找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1683|回复: 0
打印 上一主题 下一主题
收起左侧

串口液晶模块接收串口处理单片机程序源码

[复制链接]
跳转到指定楼层
楼主
ID:350209 发表于 2018-6-12 13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
武汉中显液晶模块的串口处理程序。其中包含了多字节(不定长)串口的处理方法。可以参考。

单片机源程序如下:
  1. //功能:单片机读取VGUS屏返回指令
  2. //来源:中显科技
  3. //全局变量
  4. u16 StartNum=0,TalNum=0;
  5. #define BUFFER_SIZE 2048//指令缓冲区大小,用户可根据自己单片机的容量修改
  6. u8 CommBuff[BUFFER_SIZE]//定义指令缓冲区
  7. #define USER_R3 0xA5//帧头
  8. #define USER_RA 0x5A//帧头
  9. /////////////////
  10. //串口中断函数
  11. //用户根据单片机的不同,修改串口中断函数,中断函数内只保存串口数据到缓冲区
  12. void USART3_IRQHandler(void)
  13. {
  14.     CommBuff[TalNum++]=USART_ReceiveData(USART3);//保存串口数据
  15.     if(TalNum==BUFFER_SIZE)
  16.       TalNum=0;                 
  17. }


  18. //主程序指令解析函数
  19. //用户在主循环中调用
  20. void deal_command()
  21. {
  22.     u16 i,CurNum,tem_TalNum;
  23.     u8 CmdBuf[256];
  24.     u16 nowbuffer,len;
  25.     len=StartNum;
  26.     tem_TalNum=TalNum;
  27.     if(tem_TalNum==len)//
  28.        return;
  29.     if(CommBuff[StartNum]!=USER_R3)
  30.     {
  31.         StartNum++;
  32.         if(StartNum==BUFFER_SIZE)
  33.           StartNum=0;
  34.         return;
  35.     }
  36.     if(tem_TalNum>len)
  37.       nowbuffer=tem_TalNum-len;
  38.     else
  39.       nowbuffer=tem_TalNum+BUFFER_SIZE-len;
  40.     if(nowbuffer<5)
  41.       return;
  42.     CurNum=StartNum+2;
  43.     if(CurNum>BUFFER_SIZE-1)
  44.       CurNum-=BUFFER_SIZE;
  45.     len=CommBuff[CurNum]+3;
  46.     if(nowbuffer<len)
  47.       return;
  48.     i=0;
  49.     CurNum=StartNum;
  50.     while(1)
  51.     {
  52.         CmdBuf[i++]=CommBuff[CurNum++];
  53.         if(CurNum==BUFFER_SIZE)
  54.           CurNum=0;
  55.         if(i==4)
  56.         {
  57.             if(CmdBuf[0]!=USER_R3||CmdBuf[1]!=USER_RA)//
  58.             {
  59.                 StartNum=CurNum;
  60.                 return;
  61.             }
  62.             len=CmdBuf[2];
  63.         }
  64.         else if(i>4)
  65.         {
  66.             if(i==len+3)//
  67.             {
  68.                 StartNum=CurNum;
  69.                 break;
  70.             }
  71.             else if(i>255)//
  72.             {
  73.                 StartNum=CurNum;
  74.                 return;
  75.             }
  76.             else if(CurNum==tem_TalNum)
  77.               return;
  78.         }        
  79.     }
  80.     ///现在解析指令CmdBuf保存一整条指令
  81.     switch(CmdBuf[3])
  82.     {
  83.             case 0x81:
  84.                
  85.                 break;
  86.             case 0x83:
  87.                
  88.                 break;
  89.             default:////命令无效,删除
  90.                     break;
  91.     }
  92.     return;
  93. }
复制代码

所有资料51hei提供下载:
单片机读取VGUS屏返回指令.rar (976 Bytes, 下载次数: 21)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表