084ea927e58f37bf
获得 0 次赞
帮助过0人
迪文配套提供的《迪文 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]; } }}
现在要利用PIC18F4580单片机,通过添加编码器和按钮,实现对迪文DGUS屏中数值A的改变与确认,单片机与DGUS屏的联结通过RS232串口。现请问,涉及到DGUS屏的部分,都应该编写哪些程序,最好是能够提供一些示例,迪文提供的51单片机例程没有看很明白,注释有点少,谢谢!