标题:
串口液晶模块接收串口处理单片机程序源码
[打印本页]
作者:
elenwq
时间:
2018-6-12 13:33
标题:
串口液晶模块接收串口处理单片机程序源码
武汉中显液晶模块的串口处理程序。其中包含了多字节(不定长)串口的处理方法。可以参考。
单片机源程序如下:
//功能:单片机读取VGUS屏返回指令
//来源:中显科技
//全局变量
u16 StartNum=0,TalNum=0;
#define BUFFER_SIZE 2048//指令缓冲区大小,用户可根据自己单片机的容量修改
u8 CommBuff[BUFFER_SIZE]//定义指令缓冲区
#define USER_R3 0xA5//帧头
#define USER_RA 0x5A//帧头
/////////////////
//串口中断函数
//用户根据单片机的不同,修改串口中断函数,中断函数内只保存串口数据到缓冲区
void USART3_IRQHandler(void)
{
CommBuff[TalNum++]=USART_ReceiveData(USART3);//保存串口数据
if(TalNum==BUFFER_SIZE)
TalNum=0;
}
//主程序指令解析函数
//用户在主循环中调用
void deal_command()
{
u16 i,CurNum,tem_TalNum;
u8 CmdBuf[256];
u16 nowbuffer,len;
len=StartNum;
tem_TalNum=TalNum;
if(tem_TalNum==len)//
return;
if(CommBuff[StartNum]!=USER_R3)
{
StartNum++;
if(StartNum==BUFFER_SIZE)
StartNum=0;
return;
}
if(tem_TalNum>len)
nowbuffer=tem_TalNum-len;
else
nowbuffer=tem_TalNum+BUFFER_SIZE-len;
if(nowbuffer<5)
return;
CurNum=StartNum+2;
if(CurNum>BUFFER_SIZE-1)
CurNum-=BUFFER_SIZE;
len=CommBuff[CurNum]+3;
if(nowbuffer<len)
return;
i=0;
CurNum=StartNum;
while(1)
{
CmdBuf[i++]=CommBuff[CurNum++];
if(CurNum==BUFFER_SIZE)
CurNum=0;
if(i==4)
{
if(CmdBuf[0]!=USER_R3||CmdBuf[1]!=USER_RA)//
{
StartNum=CurNum;
return;
}
len=CmdBuf[2];
}
else if(i>4)
{
if(i==len+3)//
{
StartNum=CurNum;
break;
}
else if(i>255)//
{
StartNum=CurNum;
return;
}
else if(CurNum==tem_TalNum)
return;
}
}
///现在解析指令CmdBuf保存一整条指令
switch(CmdBuf[3])
{
case 0x81:
break;
case 0x83:
break;
default:////命令无效,删除
break;
}
return;
}
复制代码
所有资料51hei提供下载:
单片机读取VGUS屏返回指令.rar
(976 Bytes, 下载次数: 21)
2018-6-12 13:31 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1