打印
[51单片机]

MAX485+HDG12864F-1

[复制链接]
1183|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
笔写你容颜|  楼主 | 2015-5-20 23:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主从机通信,用12864显示,从机按键,然后主机显示,不知道怎么搞,发现怎么都不显示,求助
//主机//
  #include<reg52.h>
  #include <stdio.h>
  #include"S_12864.h"
  #include"delay.h"

sbit RD_0=P3^4;
sbit led0=P1^0;
sbit Key0=P2^0;


bit  y0;     
bit  t,s,ld;


uchar* c;  
uchar  k;
       
void Max485_Sendonechar(char c)          //发送字节到PC
{
        TI=0;
        SBUF=c;
        while(!TI);
        TI=0;
}

void Max485_Sendstring(char *st)          //发送字符串到PC
{
        while(*st)
        {
                Max485_Sendonechar(*st++);       
        }
}       

void Init()  //串口工作方式的初始化 工作方式三
{
  SCON = 0x50;    //SCON: mode 1, 8-bit UART, enable rcvr
  TMOD = 0x20;    //TMOD: timer 1, mode 2, 8-bit reload
  PCON = 0x80;     // 数据位8、停止位1。效验位无 (11.0592M)
  TH1 = 0xF4;     //TH1:  reload value for 2400@11.0592MHz
  TR1 = 1;        //启动定时器1
  ES = 1;         //允许串口中断位
  EA = 1;         //允许总中断位                  
}
        void keyscan()
        {
                if(Key0==0)
                {
                        delay_12M_50ms();
                        if(Key0==0)
                        {
                        display_Key0();
                        }
                }
        }       

                  
  void main()                       
  {
  Init();
  RD_0=0;
  c=0;
  s=1;
  k=0;
  display_bingfang();
        while(1)
        {
        if(Key0==0 && y0==0)
      {
      y0=1;
      c = "as";
      RD_0=1;
      Max485_Sendstring(c);              //发送字符串
          //keyscan();
      RD_0=0;
      }
    if(Key0==1 ) { y0=0; }       
         //keyscan();
        }//        keyscan();
}
void chuankou(void) interrupt 4
  {
  if(RI==1)
    {
    RI = 0;
    if(t==1)
      {
      if(SBUF=='s') { k++;ld=~ld; }
      s=1; t=0;
      if(k==10) { k=0;}
      Key0=~0;
         // keyscan();
      led0=0;
      }
    if(SBUF=='a' && s==1) { t=1;s=0;}
    }
}
//从机——1//
#include<reg52.h>
//#include"S_12864.h"
#define uchar unsigned char
#define SLAVE 0x02//设置设备从机号

uchar* c;

sbit Key0=P1^0;
sbit Key1=P1^1;
sbit Key2=P1^2;
sbit Key3=P1^3;
sbit led1=P2^0;     //  接收 az  , P.2 输出低电平, P3.3  输出高电平。
sbit led2=P2^1;     //  接收 aa  , P.2 输出高电平, P3.3   输出低电平。
sbit RD_1=P3^4;

bit y0,t,s;

uchar k;


void Max485_Sendonechar(char c)  //发送字节到PC
  {
  TI=0;
  SBUF = c;
  while(!TI);
  TI=0;
  }

void Max_Sendstring(char *st)  //发送字符串到PC
  {
  while(*st)
    {
    Max485_Sendonechar(*st++);
    }
  }         

void Init()
{
          SCON = 0x50;     // REN=1允许串行接受状态,串口工作模式1  
          TMOD = 0x20;     // 定时器工作方式2  
          PCON = 0x80;     // 数据位8、停止位1。效验位无 (11.0592M)  
          TH1 = 0xF4;      // TH1 = 0xFD; 波特率 2400  
          TH0=(65536-54253)/256;  // 50 mS
          TL0=(65536-54253)%256;
          TR1  = 1;  
          ES   = 1;        // 开串口中断
          EA   = 1;        // 开总中断                  
                 
}

void main()
{
    Init();
        RD_1=0;
        s=1;
        k=0;
        display_bingfang();
        while(1)
        {
                 if(Key0==0 && y0==0)
              {
              y0=1;
              c = "as";
              RD_1=1;
              Max_Sendstring(c);              //发送字符串
              RD_1=0;
              }
            if(Key0==1 ) { y0=0; }
    }
       
}
void chuankou(void) interrupt 4
  {
  if(RI==1)
    {
            RI = 0;
            if(t==1)
            {
                           if(SBUF=='s') {led1=~led1;led2=~led2; k++; }
   //if(SBUF=='s') {led1=1;led2=0; k--; }
                   s=1; t=0;
   if(k==10) { k=0;}
   if(k==255) { k=9; }
              Key0=~0;
                   }
if(SBUF=='a' && s==1) { t=1;s=0;}
    }
}
void T0_time()interrupt 1
{
    TH0=(65536-54253)/256;  // 50 mS
    TL0=(65536-54253)%256;
    k++;
    if(k==20)  // 这里修改时间
    {
    k=0;
    led1=1;
    led2=1;
    }
  }   


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝