找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机使用LCD1602接收串口数据

  [复制链接]
跳转到指定楼层
楼主
单片机使用LCD1602接收串口数据

  1. /*
  2. 晶振12MHz,波特率1200,
  3. 程序启动后单片机主动发出Hello Server,
  4. PC使用串口助手应答单片机,
  5. 单片机收到数据后,不做任何修改返回PC。
  6. 使用LCD1602显示单片机接受到的数据
  7. */
  8. #include<reg51.h>
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. uchar code data1[]="Hello Server";
  12. sbit EN = P3 ^ 4;                //液晶使能端
  13. sbit RS = P3 ^ 5;                        //液晶数据命令选择端
  14. sbit RW = P3 ^ 6;                                //读/写选择端(H/L)

  15. uchar num;
  16. uchar count=0;
  17. char a;
  18. char old_CNT;
  19. char CNT = 0;
  20. bit flag;
  21. char temp[16];
  22. //作用:延时 z ms
  23. //参数:z
  24. //返回值:
  25. void delay(uint z)
  26. {
  27.         uint x, y;
  28.         for (x = z; x>0; x--)
  29.         for (y = 110; y>0; y--);
  30. }

  31. //作用:写命令
  32. //参数:
  33. //返回值:
  34. void write_com(uchar com)
  35. {
  36.         RS = 0;        //命令选择
  37.         RW = 0;
  38.         P0 = com;
  39.         delay(5);
  40.         EN = 1;        //使能E开
  41.         delay(5);
  42.         EN = 0;        //使能E关
  43.         delay(5);
  44. }

  45. //作用:写数据
  46. //参数:
  47. //返回值:
  48. void write_date(uchar date)
  49. {
  50.         RS = 1;        //数据选择
  51.         RW = 0;
  52.         P0 = date;
  53.         delay(5);
  54.         EN = 1;        //使能E开
  55.         delay(5);
  56.         EN = 0;        //使能E关
  57. }

  58. //作用:LCD初始化
  59. //参数:
  60. //返回值:
  61. void init_LCD()
  62. {
  63.         EN = 0;
  64.         write_com(0x38);        //设置16x2显示,5x7点阵,8位数据接口
  65.         write_com(0x0c);        //设置开显示,不显示光标
  66.         write_com(0x06);        //写一个字符后,地址指针加1
  67.         write_com(0x01);        //显示清0,数据指针清0
  68.         write_com(0x80);
  69. }
  70. //作用:串口中断初始化
  71. //参数:
  72. //返回值:
  73. void init_Serial()
  74. {
  75.     SCON=0X50;        //工作方式1,允许接收
  76.         //SM0 = 0;
  77.         //SM1 = 1;
  78.         //REN = 1;
  79.     TMOD=0X20;        //定时器 工作方式2
  80.     TH1=TL1=230;//波特率为1200
  81.     EA=1;                                        //开总中断
  82.     TR1=1;                                //T1启动
  83.     SBUF=data1[count];
  84.     ES=1;                                    //开串口
  85. }
  86. //作用:串口中断服务程序
  87. //参数:
  88. //返回值:
  89. void S_proc() interrupt 4
  90. {
  91.     if(TI)                //发送结束
  92.     {
  93.         TI=0;
  94.         if(count<12)
  95.         {
  96.             SBUF=data1[++count];
  97.         }
  98.     }
  99.     else                //接收结束
  100.     {
  101.         RI=0;
  102.         a=SBUF;                //存数据
  103.         SBUF=a;                //发送数据
  104.         while(!TI);        //等待发送完成
  105.                                 TI=0;
  106.                                 temp[CNT++]=a;
  107.                                 flag = 1;
  108.     }
  109. }
  110. //作用:主函数
  111. //参数:
  112. //返回值:
  113. void main()
  114. {
  115.                 int i;
  116.                 init_Serial();
  117.                 init_LCD();
  118.     while(1)
  119.                 {
  120.                                 // LCD显示
  121.                                 write_com(0x80);
  122.                                 if(flag)
  123.                                 {
  124.                                                 //write_com(0x01);
  125.                                                 for(i=0; i<CNT; i++)
  126.                                                 {
  127.                                                                 write_date(temp[i]);
  128.                                                                 // temp[i] = ' '; temp[i] != '\0'
  129.                                                                 delay(5);
  130.                                                 }
  131.                                 }
  132.                                 old_CNT = CNT;
  133.                                 delay(100);
  134.                                 if(old_CNT == CNT)
  135.                                 {
  136.                                                 CNT = 0;
  137.                                                 flag = 0;
  138.                                 }
  139.                 }
  140. }










复制代码


LCD1602-SC.rar

54.36 KB, 下载次数: 108, 下载积分: 黑币 -5

含Proteus仿真

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:260698 发表于 2018-1-7 20:43 | 只看该作者
你的程序不能显示啊
回复

使用道具 举报

板凳
ID:164146 发表于 2019-4-17 10:12 | 只看该作者
wgb 发表于 2018-1-7 20:43
你的程序不能显示啊

可以显示啊,附件中有仿真,你运行就可以看见了。如果是实物不能显示的话,你调节一下LCD的对比度呢。
回复

使用道具 举报

地板
ID:631166 发表于 2019-10-28 19:27 | 只看该作者
maomao12 发表于 2019-4-17 10:12
可以显示啊,附件中有仿真,你运行就可以看见了。如果是实物不能显示的话,你调节一下LCD的对比度呢。

楼主你好,下载了你的程序 运行正常,但是我想请教一个问题
  1.   old_CNT = CNT;
  2.                                 delay(100);
  3.                                 if(old_CNT == CNT)
  4.                                 {
  5.                                                 CNT = 0;
  6.                                                 flag = 0;
  7.                                 }
复制代码


这段代码当中 old_CNT=CNT  然后再判断的意思是什么没看明白。这里如果不加这个直接延时以后就是CNT置0,可以 吗?
回复

使用道具 举报

5#
ID:845320 发表于 2020-12-20 21:38 | 只看该作者
naye 发表于 2019-10-28 19:27
楼主你好,下载了你的程序 运行正常,但是我想请教一个问题

意思是  接收到的新数据如果与旧数据一样,标志位为0
回复

使用道具 举报

6#
ID:748788 发表于 2020-12-22 21:45 | 只看该作者
不错!对串口初始化做了一点修改,在普中A5成功运行
回复

使用道具 举报

7#
ID:866712 发表于 2020-12-23 22:46 | 只看该作者
大佬 这个51开发板可以做吗
回复

使用道具 举报

8#
ID:748788 发表于 2020-12-24 21:02 | 只看该作者
878615787 发表于 2020-12-23 22:46
大佬 这个51开发板可以做吗

应该可以,程序使用的功能、模块都是常用开发板具备的
回复

使用道具 举报

9#
ID:867525 发表于 2020-12-25 09:00 来自手机 | 只看该作者
不错!对串口初始化做了一点修改,在普中A5成功运行
回复

使用道具 举报

10#
ID:376534 发表于 2021-6-10 21:22 | 只看该作者
在发送123456后如果之后发送222,就会显示222456;
一点修改建议:
128行                                               //write_com(0x01);
这一句如果不注释并且再加上一句将显示光标定在第一行的句子(write_com(0x80);)就可以在发送123456后发送222时正常显示222;
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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