找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有大佬能帮我看看为什么单片机数码管没有反应吗?要如何修改?

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar bufr[]="------\r\n";//存放接收数据
  6. uchar *prx=&bufr;//接收指针
  7. bit str; //接收完毕标志位
  8. //段码
  9. uchar code leddata[]={
  10. 0xC0, //"0"
  11. 0xF9, //"1"
  12. 0xA4, //"2"
  13. 0xB0, //"3"
  14. 0x99, //"4"
  15. 0x92, //"5"
  16. 0x82, //"6"
  17. 0xF8, //"7"
  18. 0x80, //"8"
  19. 0x90, //"9"
  20. 0x88, //"A"
  21. 0x83, //"B"
  22. 0xC6, //"C"
  23. 0xA1, //"D"
  24. 0x86, //"E"
  25. 0x8E, //"F"
  26. 0x89, //"H"
  27. 0xC7, //"L"
  28. 0xC8, //"n"
  29. 0xC1, //"u"
  30. 0x8C, //"P"
  31. 0xA3, //"o"
  32. 0xBF, //"-"
  33. 0xFF, //熄灭
  34. 0xFF //自定义
  35. };
  36. //延时函数
  37. void delay(uint i)
  38. {
  39. uint m,n;
  40. for(m=i;m>0;m--)
  41. for(n=90;n>0;n--);
  42. }
  43. //数码管显示函数
  44. void led_display()
  45. {
  46. uchar i;
  47. P2=0x01;
  48. for(i=0;i<6;i++)
  49. {
  50. P0=0xff;
  51. P2=_cror_(P2,1);
  52. P0=leddata[bufr[i]-'0'];
  53. delay(2);
  54. }
  55. }
  56. //字符发送函数
  57. void putchar(uchar data1)
  58. {
  59. SBUF=data1; //将待发送的字符送入发送缓冲器
  60. while(!TI); //等待发送完成
  61. TI=0; //发送中断标志请0
  62. }
  63. //字符串发送函数
  64. void putstring(uchar *dat)
  65. {
  66. while(*dat!='\0')    //判断字符串是否发送完毕
  67. {           
  68. putchar(*dat);        //发送单个字符
  69. dat++;                //字符地址加1,指向先下一个字符
  70. delay(5);
  71. }
  72. }
  73. //串口初始化函数
  74. void serial_init()
  75. {
  76. TMOD=0x20;  //定时器工作方式2
  77. SCON=0x50;  //串行口工作方式2
  78. PCON=0x80; //SMOD =1,波特率加倍
  79. TH1=0xfa;
  80. TL1=0xfa;    //波特率设置9600
  81. ES=1;
  82. EA=1;//开总中断
  83. }
  84. void main()
  85. {
  86. serial_init();
  87. TR1=1;
  88. putstring("Receiving from 8051...\r\n");      
  89. putstring("----------------------\r\n");
  90. delay(50);
  91. while(!str);//等待接收完毕
  92. while(1)
  93. {   
  94. P0=0xff;
  95. while(!str);
  96. led_display();
  97. }
  98. }
  99. void serial() interrupt 4
  100. {
  101. if(RI!=1) return;//判断是否接收
  102. {   
  103. str=0;
  104. ES=0;
  105. *prx=SBUF; //接收存放数据
  106. putchar(*prx);
  107. RI=0;
  108. prx++;    //指针自加
  109. if(*prx=='\0') //是否接收完成
  110. {
  111. prx=&bufr;//指针初始化
  112. str=1; //标志位置1
  113. putstring("\r\n");
  114. putstring("translate over!\r\n");
  115. ES=1;
  116. return;
  117. }
  118. ES=1;
  119. return;    //退出中断
  120. }
  121. }
复制代码

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

使用道具 举报

沙发
ID:332444 发表于 2020-6-19 07:41 | 只看该作者
去掉三极管试看。
回复

使用道具 举报

板凳
ID:783500 发表于 2020-6-19 12:30 来自触屏版 | 只看该作者
xianfajushi 发表于 2020-6-19 07:41
去掉三极管试看。

去掉了,但是数码管显示的不是我在pc端输入的数据,可以帮我看看程序吗?
回复

使用道具 举报

地板
ID:636538 发表于 2020-6-19 16:26 | 只看该作者
P0=leddata[bufr[i]-'0'];
uchar bufr[]="------\r\n";//存放接收数据这两句话让我看着怎么像是字符变量,不是实际的数;
你直接输入
P0=leddata[i];
看看是不是显示的012345,如果是,说明P0=leddata[bufr[i]-'0'];
uchar bufr[]="---需要改,就是这个有问题


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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