找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2034|回复: 4
收起左侧

这个四位数码管动态显示单片机程序,编译没问题,执行无效果

[复制链接]
ID:127160 发表于 2019-3-21 22:06 | 显示全部楼层 |阅读模式
那位师傅,帮我看一下这个陈序。四位数码管动态显示,能编译不错,下载到单片机,不显示。错在那里?
#include <reg52.h>
                                        sbit LED=P0^0;
                                        sbit DT0=P1^0;
                                                sbit DT1=P1^1;  

                                sbit DT2=P1^2;
                                        sbit DT3=P1^3;
                                        unsigned char code LedChar[]={
                                        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                                        0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
                                       
                                        };
                                        unsigned char LedBuff[4]={
                                        0xFF,0xFF,0xFF,0xFF,

                                        };
                                        void main()
                                        {
                                          unsigned char i=0;
                                          unsigned int  cnt=0;
                                          unsigned long sec=0;
                                         LED=1;
                                          DT0=0;
                                          TMOD=0x01;
                                          TH0=0xFC;
                                          TL0=0x67;
                                          TR0=1;
                                          while(1)
                                          {
                                            if(TF0==1)
                                                {
                                                TF0= 0;
                                                  TH0 = 0xFC;
                                                  TL0=0x67;
                                                  cnt++;
                                                  if(cnt>=1000)
                                                  {
                                                   cnt=0;
                                                   sec++;
                                                   LedBuff[0]=LedChar[sec%10];
                                                    LedBuff[1]=LedChar[sec/10%10];
                                                           LedBuff[2]=LedChar[sec/100%10];
                                                                  LedBuff[3]=LedChar[sec/1000%10];
                                                                  }


                                                if(i==0)
                                                {DT2=0;DT1=0;DT3=0;i++;P0=LedBuff[0];}
                                                else if(i==1)
                                                          {DT2=0;DT1=0;DT3=1;i++;P0=LedBuff[1];}
                                                else if(i==2)
                                                         {DT2=0;DT1=1;DT3=0;i++;P0=LedBuff[2];}
                                                else if(i==3)

                                                         {DT2=0;DT1=1;DT3=1;i++;P0=LedBuff[3];}
                                                  }

                                         }
                                        }
回复

使用道具 举报

ID:489394 发表于 2019-3-22 00:49 | 显示全部楼层
会不会是接口不对
回复

使用道具 举报

ID:111634 发表于 2019-3-22 10:30 | 显示全部楼层
硬件软件都可能有问题,提问不清,情况不明。
回复

使用道具 举报

ID:213173 发表于 2019-3-22 16:48 | 显示全部楼层
编译没问题只是语法没问题,不代表逻辑没问题。P1.0就被你重复使用。改这样你试试。
无标题.jpg

  1. #include <reg52.h>
  2. //sbit LED=P0^0;
  3. sbit LED=P3^0;
  4. //sbit DT0=P1^0;
  5. //sbit DT1=P1^1;  
  6. //sbit DT2=P1^2;
  7. //sbit DT3=P1^3;
  8. unsigned char code LedChar[]={
  9. 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  10. 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  11. unsigned char LedBuff[4];
  12. void main()
  13. {
  14.         unsigned char i=0;
  15.         unsigned int  cnt=0;
  16.         unsigned int  sec=0,min;
  17. //        LED=1;
  18. //        DT0=0;
  19.         TMOD=0x01;
  20.         TH0=0xFC;
  21.         TL0=0x67;
  22.         TF0=0;
  23.         TR0=1;
  24.         while(1)
  25.         {
  26.                 if(TF0==1)
  27.                 {
  28.                         TF0 = 0;
  29.                         TH0 = 0xFC;
  30.                         TL0 = 0x67;
  31.                         if(cnt==0||cnt==500)
  32.                                 LED=~LED;//LED以1秒周期闪烁
  33.                         cnt++;
  34.                         if(cnt>=1000)
  35.                         {
  36.                                 cnt=0;
  37.                                 sec++;
  38.                                 if(sec>=60)
  39.                                 {
  40.                                         sec=0;
  41.                                         min++;
  42.                                         if(min>=60)
  43.                                         {
  44.                                                 min=0;
  45.                                         }
  46.                                 }
  47.                                 LedBuff[0]=LedChar[min/10];
  48.                                 LedBuff[1]=LedChar[min%10]&0x7f;//加点
  49.                                 LedBuff[2]=LedChar[sec/10];
  50.                                 LedBuff[3]=LedChar[sec%10];
  51.                         }
  52.                         if(sec==0)//初始显示00.00
  53.                         {
  54.                                 if(i==0)
  55.                                 {P1=0x01;P0=0xC0;i++;}
  56.                                 else if(i==1)
  57.                                 {P1=0x02;P0=0xC0&0x7f;i++;}//加点
  58.                                 else if(i==2)
  59.                                 {P1=0x04;P0=0xC0;i++;}
  60.                                 else if(i==3)                       
  61.                                 {P1=0x08;P0=0xC0;i=0;}
  62.                         }
  63.                         if(sec>0)//正常计时显示
  64.                         {
  65.                                 if(i==0)
  66.                                 {P1=0x01;P0=LedBuff[i];i++;}
  67.                                 else if(i==1)
  68.                                 {P1=0x02;P0=LedBuff[i];i++;}
  69.                                 else if(i==2)
  70.                                 {P1=0x04;P0=LedBuff[i];i++;}
  71.                                 else if(i==3)                       
  72.                                 {P1=0x08;P0=LedBuff[i];i=0;}
  73.                         }
  74.                 }
  75.         }
  76. }
复制代码



回复

使用道具 举报

ID:127160 发表于 2019-3-22 22:04 | 显示全部楼层
谢谢,师傅,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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