• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

跪谢:迪文屏C51例程详解

084ea927e58f37bf 2019-05-23 浏览量:1919

迪文配套提供的《迪文 DGUS 屏用户开发指南Ver4.3》里面的C51例程实在是看不懂,厂家表示也不反馈给技术部门,实在没办反了,跪求各位大神给详细标注一下,尤其是打问号的地方,跪谢!!!


#include <REG52.h>

sbit JDQ1=P1^0;         //温度控制继电器 

//串口变量  
unsigned char RCVOKRCVDATARX5ARXA5RXLENRXCMDRXADRHRXADRLRXDLENTXTIME; 
unsigned char TX_PRX_P; //收发缓冲区的指针位置
//配置参数区(DGUS 0x83 指令)32B对应 DGUS 0x1000-0x100F 地址    ???

unsigned char CFGBUF[32];     ???


//发送给 DGUS 屏的数据读取指令和写指令缓冲区
//TXBUF[12]:TXBUF[13]用于显示曲线 CH1 接口    ???
//TXBUF[20]-TXBUF[84]0x82 写 DGUS 屏的 64B 变量数据,对应 DGUS 0x0000-0x001F 地址    ???
unsigned char TXBUF[84]={0x5A0xA50x40x830x100x00x10
                         0x5A0xA50x40x840x10x00x00x5A0xA50x430x820x000x00};    ???
void main(void)

  int ij;  
  
  /@@*开始设置串口*/

  PCON=PCON|0x80; //配置串口波特率为 115200bps,22.1184MHz 晶体
  SCON=0x50; 
  TMOD=0x21;
  TH1=255;
  TL1=255;
  TR1=1;
  TH0=0xb8; //10ms 定时器中断
  TL0=0x00;
  TR0=1;
  JDQ1=0; 
  JDQ1=0; //关闭加热继电器
  RCVOK=0; //清除数据接收 OK 标记    ???
  RCVDATA=0;     ???
  TXTIME=100; //上电 1 秒后开始数据读写
  ES=1;
  ET0=1;
  EA=1;
  /@@*串口设置完毕*/

  while(RCVOK==0x00); //delate     ???
  //用户测量和控制温度,显示温度值和实时温度曲线
  while(1)     ???整个while???
  { 
    i=Readtemp(); //测量当前温度
    j=CFGBUF[0]*256+CFGBUF[1]; //设定温度,DGUS 0x1000 地址,整形变量
    if(i<j)
    {
      JDQ1=1; 
    }
    else
    {
      JDQ1=0;
    }
    TXBUF[20]=i/256;  //显示当前温度值,DGUS 0x0000 地址,整形变量
    TXBUF[21]=i%256;
    TXBUF[12]=i/256;  //显示当前温度曲线,CH1 曲线通道
    TXBUF[13]=i%256;
  }
}

//温度测量函数
int Readtemp( )     ???
{
  return(500);
}

//定时器 2 中断函数10mS 定时器中断,用于定时 200mS 发送指令给 DGUS 屏

void Timer0_interrupt(void) interrupt 2
{  
  TF0=0;  
  TH0=0xb8;
  TL0=0x00;  
  TXTIME--;
  if(TXTIME==0x00) ​
  {
    TXTIME=20; 
    TX_P=0;       ???
    TI=0;
    SBUF=TXBUF[0];      ???
  }
}

//串口中断方式处理和 DGUS 屏的数据交换
//定时从 DGUS 屏的 1000-100F 存储区读取 32Byte 数据保存到单片机的 CFGBUF
//定时把单片机的 DSPBUF 的 64B 内容写到 DGUS 屏的 0000-001FH 存储区
void Uart_interrupt(void) interrupt 4 ???此处直到结束???

  unsigned char i;
  if(RI)  //接收中断  
  { 
    i=SBUF;  
    RI=0;
    if(RCVDATA==0)
    { 
      RX5A=RXA5;
      RXA5=RXLEN;
      RXLEN=RXCMD;
      RXCMD=RXADRH;
      RXADRH=RXADRL;
      RXADRL=RXDLEN;
      RXDLEN=i;
//检查帧同步数据 5A A5 24 83 10 00 10 +32B DATA
      if((RX5A==0x5A)&&(RXA5==0xA5)&&(RXLEN==0x24)&&(RXCMD==0x83)&&(RXADRH=0x10)&&
     (RXADRL=0x00)&&(RXDLEN=0x10))
      { 
        RCVDATA=0xff;
        RX_P=0;
      }
     }
    else
    { 
      CFGBUF[RX_P]=i;
      RX_P++;
      if(RX_P==32)
      { 
        RCVDATA=0;
        RCVOK=0xff;
      }
    }
  }
  if(TI) //发送中断
  { 
    TI=0;
    TX_P++;
    if(TX_P<84)
    { 
      SBUF=TXBUF[TX_P];
    }
  }
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:0

相关问题

问题达人换一批

跪谢:迪文屏C51例程详解