找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3532|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

求助為什么單片機(jī)數(shù)碼管倒計(jì)時(shí)不了?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
30黑幣
我想倒計(jì)時(shí)14秒,但是仿真只有一位數(shù)碼管在顯示,而且也不動(dòng)。
#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, 下載次數(shù): 115)

2022-01-13_004341.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:96682 發(fā)表于 2022-1-13 02:27 來自觸屏版 | 只看該作者
能顯示只是矛盾體結(jié)合而已
回復(fù)

使用道具 舉報(bào)

地板
ID:1001243 發(fā)表于 2022-1-13 08:06 | 只看該作者
wc86110 發(fā)表于 2022-1-13 02:27
能顯示只是矛盾體結(jié)合而已

啊!矛盾體結(jié)合,那我該咋辦
回復(fù)

使用道具 舉報(bào)

5#
ID:584814 發(fā)表于 2022-1-13 08:08 | 只看該作者
寫法比較清奇,沒有半句注釋,雙等于號賦值都不算什么,主程序中竟然有倆這貨

while(1)
……
        while(1);
回復(fù)

使用道具 舉報(bào)

6#
ID:744809 發(fā)表于 2022-1-13 08:44 | 只看該作者
問題有些多
回復(fù)

使用道具 舉報(bào)

7#
ID:8222 發(fā)表于 2022-1-13 09:01 | 只看該作者
毛病太多了,要推倒重來。
回復(fù)

使用道具 舉報(bào)

8#
ID:415064 發(fā)表于 2022-1-13 09:09 | 只看該作者
地板 真相
回復(fù)

使用道具 舉報(bào)

9#
ID:53621 發(fā)表于 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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

10#
ID:53621 發(fā)表于 2022-1-13 11:24 | 只看該作者
把Light_Scan(); 提到if(cnt>=500)外面可能會(huì)好點(diǎn)。
回復(fù)

使用道具 舉報(bào)

11#
ID:979299 發(fā)表于 2022-1-13 13:54 | 只看該作者
電路畫得不怎么樣,總線畫的可有可無,段端口上拉了就行,不再用排阻了,位端口不用三極管驅(qū)動(dòng)也可以,程序P1口掃描怎么又接到P0口呢
回復(fù)

使用道具 舉報(bào)

12#
ID:1022849 發(fā)表于 2022-4-30 00:28 | 只看該作者
可能是前面數(shù)碼管電平高低不合適
回復(fù)

使用道具 舉報(bào)

13#
ID:278457 發(fā)表于 2022-5-3 03:37 | 只看該作者
樓主你為什么芯片驅(qū)動(dòng),這樣比較簡單點(diǎn).程序好寫一點(diǎn).見意重新寫一下,反正用不了多少時(shí)間,用個(gè)74hc595或者用74hc573
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表