找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4315|回复: 6
收起左侧

串口程序。电脑发送字母下位机接收显示流水灯和数码管显示

[复制链接]
ID:79544 发表于 2015-12-12 18:48 | 显示全部楼层 |阅读模式
电脑发送大写A下位机显示流水灯。电脑发送大写字母B下位机数码管显示0-F.
  1. /*******************************************************
  2.         功能  :串口程序。电脑发送字母,下位机(实验板)
  3.                         显示流水灯和数码管显示0-F
  4.         单片机:STC12C5A60S2
  5.         晶振  :11.0592M(必须用这个频率的晶振要不会出错)
  6.         作者  :苏义江
  7.         时间  ; 20015-12-12
  8.         注释  :数码管用P2口通过锁存器573驱动位和段。
  9.                         位的锁存端用P0^6控制
  10.                         段的锁存端用P0^7控制
  11. *******************************************************/
  12. #include<reg52.h>
  13. #define uchar unsigned char
  14. #define uint unsigned int
  15. sbit wei=P0^6;//位使能
  16. sbit duan=P0^7;//段使能
  17. //共阳数码管段码
  18. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  19.                                 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
  20.                                 0xa1,0x86,0x8e,0x89};
  21. //位码
  22. uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  23. uchar a,i;
  24. void init_uart()//串口初始化
  25. {
  26.         TMOD=0X20;//T1工作在方式2及自动重装
  27.         TH1=0XFD;//波特率9600
  28.         TL1=0XFD;
  29.         TR1=1;
  30. //        SCON=0X50;        //SCON=0X50也可以写成SM0=0;SM1=1;
  31.         SM0=0;
  32.         SM1=1;
  33.         REN=1;
  34.         ES=1;  //启动串口中断
  35.         EA=1;
  36. }
  37. void delay(uint z)
  38. {
  39.         uint x,y;
  40.         for(x=z;x>0;x--)
  41.         for(y=700;y>0;y--);
  42. }
  43. void liushui()//流水灯
  44. {       
  45.         for(i=0;i<8;i++)
  46.         {
  47.                 P0=tab[i];
  48.                 delay(200);
  49.         }       
  50. }
  51. void diplay()//数码管显示0-F
  52. {
  53.         wei=1;  //打开573位码锁存端
  54.         P2=0;
  55.         wei=0;        //锁存数据
  56.         for(i=0;i<16;i++)
  57.         {
  58.                 duan=1;  //打开573段码锁存端
  59.                 P2=table[i];
  60.                 duan=0;  //锁存数据
  61.                 delay(1000);
  62.                 P2=0XFF;  //消隐
  63.         }
  64. }
  65. void main()
  66. {
  67.         init_uart();
  68.         while(1);
  69.        
  70. }
  71. void uate() interrupt 4
  72. {       
  73.         ES=0; //先关闭串口中断防止出错
  74.         RI=0;  //发送标志位清零
  75.         a=SBUF;       
  76.         switch(a)
  77.         {
  78.                 case 'A': liushui();break;//电脑发送A实验板显示流水灯
  79.                 case 'a': P0=0;  break;//电脑发送a实验板显示LED灯全亮
  80.                 case 'B': diplay();break;//电脑发送B实验板数码管显示0-F
  81.         }
  82.         ES=1;//启动串口中断,继续发送
  83. }
复制代码


回复

使用道具 举报

ID:92873 发表于 2015-12-19 15:02 | 显示全部楼层
RI=0;//接收标志位清零;ES=1;//启动串口中断,继续接收。
回复

使用道具 举报

ID:79544 发表于 2015-12-19 16:31 | 显示全部楼层
a15616 发表于 2015-12-19 15:02
RI=0;//接收标志位清零;ES=1;//启动串口中断,继续接收。

谢谢你的指正。TI是发送,RI是接收。
回复

使用道具 举报

ID:114742 发表于 2016-5-5 20:27 | 显示全部楼层
for(i=0;i<16;i++)         {                 duan=1;  //打开573段码锁存端                 duan=0;  //锁存数据                                  P0=table[i];                                 wei=1;  //打开573位码锁存端                         wei=0;                 delay(100);                 P0=0XFF;  //消隐         }不然会出现位码不正确的现象
回复

使用道具 举报

ID:79544 发表于 2016-5-6 09:26 | 显示全部楼层
串口在单片机中还是很重要的。比如蓝牙小车的控制就是利用串口发送和接收的。
回复

使用道具 举报

ID:398208 发表于 2019-4-23 18:51 | 显示全部楼层
我试试了不可以
回复

使用道具 举报

ID:398208 发表于 2019-4-23 19:12 | 显示全部楼层
程序有问题把
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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