找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助为什么单片机数码管倒计时不了?

  [复制链接]
跳转到指定楼层
楼主
30黑币
我想倒计时14秒,但是仿真只有一位数码管在显示,而且也不动。
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
sbit DU=P2^0;
sbit WEI=P2^1;
bit LightFlag=1;
uchar code DuanMa[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uchar LightBuf[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint cnt;
void main()
{
        uchar num=15;
        EA=1;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        TMOD&=0XFC;
        TMOD|=0X01;
        ET0=1;
        TR0=1;
while(1)
{
if(LightFlag==1)
{
LightFlag==0;
        num--;
        LightBuf[0]=DuanMa[num%10];
        LightBuf[1]=DuanMa[num/10%10];
}
if(num==0)
{
P0=0x00;
        LightBuf[0]=DuanMa[num%10];
        LightBuf[1]=DuanMa[num/10%10];
        while(1);
}
}
}
void Light_Scan()
{
static uchar i=0;
        switch(1)
        {
                case 0:P1=0x08;WEI=1;WEI=0;P1=LightBuf[0];DU=1;DU=0;i++;break;
                case 1:P1=0x04;WEI=1;WEI=0;P1=LightBuf[1];DU=1;DU=0;i=0;break;
        }
}
void Interrupt0()interrupt 1
{
TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        Light_Scan();
        cnt++;
        if(cnt>=500)
        {
        cnt=0;
                LightFlag=1;
        }


2022-01-13_004341.png (24.75 KB, 下载次数: 92)

2022-01-13_004341.png

最佳答案

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

使用道具 举报

沙发
ID:213173 发表于 2022-1-13 00:48 | 只看该作者
  1. #include <REG51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DU =P2^0;
  5. sbit WEI=P2^1;
  6. bit LightFlag;
  7. uchar code DuanMa[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  8. uchar LightBuf[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  9. uint cnt;
  10. uchar num=15;

  11. void main()
  12. {
  13.         TMOD|=0X01;
  14.         TH0=(65536-2000)/256;
  15.         TL0=(65536-2000)%256;
  16.         EA=1;
  17.         ET0=1;
  18.         TR0=1;
  19.         while(1)
  20.         {
  21.                 if(LightFlag)
  22.                 {
  23.                         LightFlag=0;
  24.                         if(num>0)
  25.                                 num--;
  26.                 }
  27.         }
  28. }
  29. void Light_Scan()
  30. {
  31.         static uchar i=0;
  32.         switch(i)
  33.         {
  34.                 case 0:DU=1;WEI=1;P0=DuanMa[num/10];DU =0;i=1;break;
  35.                 case 1:DU=1;WEI=1;P0=DuanMa[num%10];WEI=0;i=0;break;
  36.         }

  37. }
  38. void Interrupt0()interrupt 1
  39. {
  40.         TH0=(65536-2000)/256;
  41.         TL0=(65536-2000)%256;
  42.         cnt++;
  43.         if(cnt>=500)
  44.         {
  45.                 cnt=0;
  46.                 LightFlag=1;
  47.         }
  48.         Light_Scan();
  49. }
复制代码
回复

使用道具 举报

板凳
ID:96682 发表于 2022-1-13 02:27 来自手机 | 只看该作者
能显示只是矛盾体结合而已
回复

使用道具 举报

地板
ID:1001243 发表于 2022-1-13 08:06 | 只看该作者
wc86110 发表于 2022-1-13 02:27
能显示只是矛盾体结合而已

啊!矛盾体结合,那我该咋办
回复

使用道具 举报

5#
ID:584814 发表于 2022-1-13 08:08 | 只看该作者
写法比较清奇,没有半句注释,双等于号赋值都不算什么,主程序中竟然有俩这货

while(1)
……
        while(1);
回复

使用道具 举报

6#
ID:744809 发表于 2022-1-13 08:44 | 只看该作者
问题有些多
回复

使用道具 举报

7#
ID:8222 发表于 2022-1-13 09:01 | 只看该作者
毛病太多了,要推倒重来。
回复

使用道具 举报

8#
ID:415064 发表于 2022-1-13 09:09 | 只看该作者
地板 真相
回复

使用道具 举报

9#
ID:53621 发表于 2022-1-13 11:22 | 只看该作者
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DU=P2^0;
  5. sbit WEI=P2^1;
  6. bit LightFlag=1;
  7. uchar code DuanMa[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  8. uchar LightBuf[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  9. uint cnt;
  10. void main()
  11. {
  12.     uchar num=15;
  13.     EA=1;
  14.     TH0=(65536-2000)/256;
  15.     TL0=(65536-2000)%256;
  16.     TMOD&=0XFC;
  17.     TMOD|=0X01;
  18.     ET0=1;
  19.     TR0=1;
  20.     while(1)
  21.     {
  22.         if(LightFlag==1)
  23.         {
  24.             LightFlag==0;
  25.             num--;
  26.             LightBuf[0]=DuanMa[num%10];
  27.             LightBuf[1]=DuanMa[num/10%10];
  28.         }
  29.         if(num==0)
  30.         {
  31.             P0=0x00;
  32.             LightBuf[0]=DuanMa[num%10];
  33.             LightBuf[1]=DuanMa[num/10%10];
  34.         }
  35.     }
  36. }
  37. void Light_Scan()
  38. {
  39.     static uchar i=0;
  40.     switch(i)
  41.     {
  42.         case 0:P1=0x08;WEI=1;WEI=0;P1=LightBuf[0];DU=1;DU=0;i++;break;
  43.         case 1:P1=0x04;WEI=1;WEI=0;P1=LightBuf[1];DU=1;DU=0;i=0;break;
  44.     }
  45. }
  46. void Interrupt0() interrupt 1
  47. {
  48.     TH0 = (65536 - 2000) / 256;
  49.     TL0 = (65536 - 2000) % 256;

  50.     cnt++;
  51.     if(cnt>=500)
  52.     {
  53.         cnt = 0;
  54.         LightFlag = 1;
  55.         Light_Scan();
  56.     }
  57. }
复制代码
回复

使用道具 举报

10#
ID:53621 发表于 2022-1-13 11:24 | 只看该作者
把Light_Scan(); 提到if(cnt>=500)外面可能会好点。
回复

使用道具 举报

11#
ID:979299 发表于 2022-1-13 13:54 | 只看该作者
电路画得不怎么样,总线画的可有可无,段端口上拉了就行,不再用排阻了,位端口不用三极管驱动也可以,程序P1口扫描怎么又接到P0口呢
回复

使用道具 举报

12#
ID:1022849 发表于 2022-4-30 00:28 | 只看该作者
可能是前面数码管电平高低不合适
回复

使用道具 举报

13#
ID:278457 发表于 2022-5-3 03:37 | 只看该作者
楼主你为什么芯片驱动,这样比较简单点.程序好写一点.见意重新写一下,反正用不了多少时间,用个74hc595或者用74hc573
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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