武漢中顯液晶模塊的串口處理程序。其中包含了多字節(不定長)串口的處理方法。可以參考。
單片機源程序如下:
- //功能:單片機讀取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 上傳
點擊文件名下載附件
|