找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机串口显示字符串(c语言)

[复制链接]
跳转到指定楼层
楼主
本帖最后由 wake_up_smiling 于 2018-1-20 12:51 编辑

基于51单片机的串口显示字符串程序
目的:
通过串口调试助手像单片机发送字符串(文本模式),字符串将在数码管上显示,字型码需要根据原理图自己计算代码如下
头文件RS323.H:

  1. #include "stc15fxxxx.h"     //调用stc15f系列头文件

  2. #define Fosc                    11059200L       //下载晶振频率

  3. #define serial_one_baud_rate        9600L         //串口通讯波特率
  4. #define Timer1_Reload          (65536UL -(Fosc / 4 / serial_one_baud_rate))      //用定时器1做波特率发生器,计算定时器1的重装值   


  5. u8 num2[4]={10,10,10,10};
  6. u8 num=0;
  7. u8 n1,n2,n3,n4,n5;
  8. //初始化串口
  9. void serial_one_init()
  10. {
  11.     SCON |= 0x40;               //8位数据
  12.     P_SW1 &=  ~0xc0;
  13.     TR1 = 0;                    //关闭定时器
  14.     AUXR &= ~0x01;   
  15.     TMOD &= ~(1<<6);  
  16.     TMOD &= ~0x30;   
  17.     AUXR |=  (1<<6);   
  18.     TH1 = (u8)(Timer1_Reload >> 8);
  19.     TL1 = (u8)Timer1_Reload;
  20.     TR1  = 1;                   //打开定时器1
  21.     PS = 1;                                                 //高优先级中断
  22.     REN = 1;                                            //允许接收
  23.     ES  = 1;                                            //打开串口中断

  24.     EA = 1;                                                     //打开全局中断
  25. }

  26. /********************* 串口1中断函数************************/
  27. void UART1_int (void) interrupt UART1_VECTOR
  28. {
  29.     if(RI)
  30.     {
  31.         RI = 0;//清除接受标志
  32.         num2[num]= (SBUF-48);
  33.                 num++;
  34.                 if(num==4)num=0;
  35.     }
  36. }
复制代码

c文件:
  1. /*4位数码管,数码管使用P2口作为段选端,p3.7,p3.6,p3.5,p3.4分别为4位数码管的位选端,
  2. 数码管为共阳数码管,其中字型码部分需要自己计算,附带计算小工具,程序编译成功无任何问题,有问题联系q:1606260309 */
  3. #include"rs232.h"
  4. char led_mod[] = { 0x82,0xe7,0x2a,0x26,0x47,0x16,0x12,0xa7,0x02,0x06
  5. ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x52,
  6. 0x9a,0x62,0x1a,0x1b,0x92,0x43,0xdb,0xe6};//0123456789*******ABCDEFGHIJ,需要自己算,中间的‘*’按个数任意填写(访问不到)这里以0xff补齐(共阳数码管)
  7. unsigned int key=0;
  8. void delay()
  9. {
  10. int i=1000;
  11. while(i--);
  12. }
  13. void display(unsigned char m,unsigned char n)
  14. {
  15. if(m==1)
  16. {
  17. P37=0;
  18. P36=1;
  19. P35=1;
  20. P34=1;
  21. P2=led_mod[n];
  22. delay();
  23. }
  24. if(m==2)
  25. {
  26. P37=1;
  27. P36=0;
  28. P35=1;
  29. P34=1;
  30. P2=led_mod[n];
  31. delay();
  32. }
  33. if(m==3)
  34. {
  35. P37=1;
  36. P36=1;
  37. P35=0;
  38. P34=1;
  39. P2=led_mod[n];
  40. delay();
  41. }
  42. if(m==4)
  43. {
  44. P37=1;
  45. P36=1;
  46. P35=1;
  47. P34=0;
  48. P2=led_mod[n];
  49. delay();
  50. }

  51. }

  52. void main()
  53. {         
  54. serial_one_init();//串口初始化
  55. while(1)
  56. {
  57. if(num==1)
  58. {
  59. num2[1]=10;
  60. num2[2]=10;
  61. num2[3]=10;
  62. }
  63. else if(num==2)
  64. {
  65. num2[2]=10;
  66. num2[3]=10;
  67. }
  68. else if(num==3)
  69. {
  70. num2[3]=10;
  71. }
  72.         display(1,num2[0]);
  73.         display(2,num2[1]);
  74.         display(3,num2[2]);
  75.         display(4,num2[3]);
  76. }


  77.         
  78. }
复制代码

附件:
串口显示字符串(c语言).zip (60.44 KB, 下载次数: 36)



评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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