实例介绍
本例程可与昆仑通态触摸屏互通数据Modbus_KLTT
void main ()
{ int temp;float temperature;
unsigned char displaytemp[16];//¶¨ÒåÏÔÊ¾ÇøÓòÁÙʱ´æ´¢Êý×é
LCD_Init(); // ³õʼ»¯Òº¾§
LCD_Clear();
EA = 1; // ¿ª×ÜÖжÏ
ConfigTimer0(1); // Åä Öà T0 ¶¨ ʱ
ConfigUART(9600); //ÅäÖò¨ÌØÂÊΪ9600
while(1)
{ temp=ReadTemperature();
temperature=(float)temp*0.0625;
sprintf(displaytemp,"Temp % 7.3f",temperature);//´òӡζÈÖµ
LCD_Write_String(0,1,displaytemp);//ÏÔʾµÚ¶þÐÐ
UartDriver();
}
}
void InterruptUART() interrupt 4 //UART ÖжϷþÎñº¯Êý
{
if (RI) // ½ÓÊÕµ½×Ö½Ú
{
RI = 0; // ÊÖ¶¯ÇåÁã½ÓÊÕÖжϱê־λ
if (cntRxd < sizeof(bufRxd)) // ½ÓÊÕ»º³åÇøÉÐδÓÃÍêʱ£¬
{
bufRxd[cntRxd ] = SBUF; // ±£´æ½ÓÊÕ×Ö½Ú£¬²¢µÝÔö¼ÆÊýÆ÷
}
}
if (TI) // ×Ö½Ú·¢ËÍÍê±Ï
{
TI = 0; // ÊÖ¶¯ÇåÁã·¢ËÍÖжϱê־λ
flagOnceTxd = 1; //ÉèÖõ¥´Î·¢ËÍÍê³É±êÖ¾
}
}
{
unsigned char i;
unsigned char cnt;
unsigned char len;
unsigned char buf[30];
unsigned int crc;
unsigned char crch, crcl;
if (cmdArrived) // ÓÐÃüÁîµ½´ïʱ£¬¶ÁÈ¡´¦Àí¸ÃÃüÁî
{
cmdArrived = 0;
len = UartRead(buf, sizeof(buf)); //½«½ÓÊÕµ½µÄÃüÁî¶ÁÈ¡µ½»º³åÇøÖÐ
if (buf[0] == 0x01) //ºË¶ÔµØÖ·ÒÔ¾ö¶¨ÊÇ·ñÏìÓ¦ÃüÁ±¾Àý±¾»úµØÖ·Îª0x01
{
crc = GetCRC16(buf, len-2); //¼ÆËã CRCУÑéÖµ
crch = crc >> 8;
crcl = crc & 0xFF;
if ((buf[len-2] == crch) && (buf[len-1] == crcl)) // ÅÐ¶Ï CRCУÑéÊÇ·ñÕýÈ·
{
switch (buf[1]) // °´¹¦ÄÜÂëÖ´ÐвÙ×÷
{
case 0x03: // ¶Áȡһ¸ö»òÁ¬ÐøµÄ¼Ä´æÆ÷
if ((buf[2] == 0x00) && (buf[3] <= 0x05)) // ¼Ä´æÆ÷µØÖ·Ö§³Ö 0x0000 ¡«0x0005
{
if (buf[3] <= 0x04)
{
i = buf[3]; // ÌáÈ¡¼Ä´æÆ÷µØÖ·
cnt = buf[5]; //ÌáÈ¡´ý¶ÁÈ¡µÄ¼Ä´æÆ÷ÊýÁ¿
buf[2] = cnt*2; // ¶ÁÈ¡Êý¾ÝµÄ×Ö½ÚÊý£¬Îª¼Ä´æÆ÷Êý*2 £¬Òò Modbus¶¨ÒåµÄ¼Ä´æÆ÷Ϊ16 λ
len = 3;
while (cnt--)
{
buf[len ] = 0x00; // ¼Ä´æÆ÷¸ß×Ö½Ú²¹ 0
buf[len ] = regGroup[i ]; // µÍ×Ö½Ú
}
}
else
{
buf[2] = 2; // ¶ÁÈ¡Êý¾ÝµÄ×Ö½ÚÊý
buf[3] = 0x00;
buf[4] = 0x00;
len = 5;
}
break;
}
else // ¼Ä´æÆ÷µØÖ·²»±»Ö§³Öʱ£¬·µ»Ø´íÎóÂë
{
buf[1] = 0x83; // ¹¦ÄÜÂë×î¸ßλÖÃ1
buf[2] = 0x02; // ÉèÖÃÒì³£ÂëΪ02- ÎÞЧµØÖ·
len = 3;
break;
}
case 0x06: // дÈëµ¥¸ö¼Ä´æÆ÷
if ((buf[2] == 0x00) && (buf[3] <= 0x05))
{
if (buf[3] <= 0x04)
{
i = buf[3]; // ÌáÈ¡¼Ä´æÆ÷µØÖ·
regGroup[i] = buf[5]; // ±£´æ¼Ä´æÆ÷Êý¾Ý
}
else
{
}
len -= 2; // ³¤¶È -2 ÒÔÖØÐ¼ÆËãCRC²¢·µ»ØÔÖ¡break;
}
else // ¼Ä´æÆ÷µØÖ·²»±»Ö§³Öʱ£¬·µ»Ø´íÎóÂë
{
buf[1] = 0x86; // ¹¦ÄÜÂë×î¸ßλÖà 1
buf[2] = 0x02; // ÉèÖÃÒì³£ÂëΪ 02- ÎÞЧµØÖ·
len = 3;
break;
}
default: // ÆäËü²»Ö§³ÖµÄ¹¦ÄÜÂë
buf[1] |= 0x80; // ¹¦ÄÜÂë×î¸ßλÖÃ1
buf[2] = 0x01; // ÉèÖÃÒì³£ÂëΪ 01- ÎÞЧ¹¦ÄÜ
len = 3;
break;
}
crc = GetCRC16(buf, len); //¼ÆËã CRCУÑéÖµ
buf[len ] = crc >> 8; //CRC ¸ß×Ö½Ú
buf[len ] = crc & 0xFF; //CRC µÍ× Ö½Ú
UartWrite(buf, len); // ·¢ËÍÏìÓ¦Ö¡
}
}
}
}
标签: Modbus 通讯 触摸屏 温度采集 LCD1206液晶显示
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论