找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机数码管 为什么数字只显示一半呢?

[复制链接]
跳转到指定楼层
楼主
ID:1068873 发表于 2023-3-29 11:23 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

  1. #include<reg51.h>
  2.   typedef unsigned int uint;
  3.   typedef unsigned char uchar;
  4.   uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5.   uchar a[3];
  6.   uchar b[]={0x01,0x02,0x04,};
  7.   uint second;
  8.   uchar key;
  9.   uint z;
  10.   uchar flag=0;
  11.   sbit keyif=P3^7;

  12.   void delay(uchar i){
  13.   uchar j;
  14.   for(;i>0;i--){
  15.   for(j=0;j<100;j++);
  16.   }
  17.   }

  18.   void init(void){
  19.   TMOD=0x02;
  20.   second=0;
  21.   EA=1;
  22.   ET0=1;
  23.   key=0;
  24.   z=0;
  25.   }

  26.    void display(void){
  27.   uchar i;
  28.   a[0]=led[second/100];
  29.   a[1]=led[second%100/10];
  30.   a[2]=led[second%10];
  31.   for(i=0;i<3;i++){
  32.   P2=b[i];
  33.   P0=a[i];
  34.   delay(10);
  35.   }
  36.   }
  37.    void main(){
  38. init ( ) ;
  39. P0 = led[0];
  40. P2 = 0;
  41. while(1){
  42.   if(keyif ==0){
  43.    key++;
  44.    switch(key){
  45. case 1:
  46.     second =0;
  47.     flag =0;
  48.     TH0 = 0x00;
  49.     TL0 = 0x00;
  50.     TR0 = 1;
  51.     break;
  52. case 3:
  53. second =0;
  54. P0 = led[0];
  55. P2 = 0;
  56. flag =2;
  57. break;
  58. }
  59. while(keyif ==0);
  60. }
  61. switch(key){
  62. case 2 :
  63. z = 0;
  64. TR0 = 0;
  65. display();
  66. break;
  67. case 4:
  68. second =404;
  69. flag =1;
  70. display();
  71. key = 0;
  72. break;

  73. }
  74. if(flag==1)
  75. display();
  76. }
  77. }

  78. void timer()interrupt 1 using 0
  79. {
  80. TR0 = 0;
  81. TH0 = 0x00;
  82. TL0 = 0x00;
  83. z++;

  84. display();
  85. if(z == 15) {
  86. display();
  87. second++;
  88. z = 0;
  89. }
  90. if (second ==999){
  91. TR0=0;
  92. second =0;
  93. key = 1;
  94. }
  95. TR0 = 1;
  96. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:69038 发表于 2023-3-29 13:56 | 只看该作者
都仿真了,就不能单步执行一下,很快就能发现问题了
回复

使用道具 举报

板凳
ID:69038 发表于 2023-3-29 14:01 | 只看该作者
整个代码逻辑有点乱~
写代码之前,先画个流程吧~~
回复

使用道具 举报

地板
ID:1068873 发表于 2023-3-29 18:55 来自手机 | 只看该作者
zhuls 发表于 2023-3-29 14:01
整个代码逻辑有点乱~
写代码之前,先画个流程吧~~

谢谢!我更换了led,解决了问题!
回复

使用道具 举报

5#
ID:624769 发表于 2023-3-29 21:48 | 只看该作者
不亮的地方,组成数字 721
所以,是共阴共阳搞错了。
回复

使用道具 举报

6#
ID:332444 发表于 2023-3-31 09:19 | 只看该作者
想看数码管异常这里有几张,能全部知道是怎么回事算本事.
回复

使用道具 举报

7#
ID:1070823 发表于 2023-4-11 12:06 | 只看该作者
输出取反,或者换个其他极性的数码管
回复

使用道具 举报

8#
ID:291668 发表于 2023-4-11 12:50 | 只看该作者
又是硬件问题吗?
回复

使用道具 举报

9#
ID:1071090 发表于 2023-4-11 16:19 | 只看该作者
电路连接错误:如果单片机数码管显示数字只有一半,可能是因为电路连接不正确。
程序问题:程序编写不正确也会导致单片机的数码管只显示一半。程序设计时需要确保输出控制信号的正确性以及程序流程的正确性。
回复

使用道具 举报

10#
ID:619259 发表于 2023-4-11 16:58 | 只看该作者
xianfajushi 发表于 2023-3-31 09:19
想看数码管异常这里有几张,能全部知道是怎么回事算本事.

不消隐造成的显示错误
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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