找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 3042|回復(fù): 4
收起左側(cè)

51單片機(jī)粗略60s倒計(jì)時(shí)數(shù)碼管顯示求教

[復(fù)制鏈接]
ID:720329 發(fā)表于 2020-4-26 23:37 來自手機(jī) | 顯示全部樓層 |閱讀模式
目前還沒有學(xué)習(xí)定時(shí)中斷,所以只能是粗略的60s倒計(jì)時(shí)數(shù)碼管顯示,下面是我自己編的程序,沒有預(yù)期現(xiàn)象,還請(qǐng)各位大佬幫忙瞅瞅,感謝!
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void display(uint ge,uint shi);
void delay(uint z)
{
        uint a,b;
        for(a=z;a>0;a--)
        for(b=120;b>0;b--);
}
uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint c,n,i,ge,shi;
sbit k1=P1^0;
void main()
{
        while(1)
        {
                c=0;
                n=60;
                if(k1==0) {c=1;}
                if(k1==0) delay(10);
                if(c==1)
                {
                        for(i=60;i>0;i--)
                        {
                        n- -;
                        display(ge,shi);//調(diào)用顯示子函數(shù)
                        delay(1000);//延時(shí)一秒
                        }
                        if(n==0) n=0;
                        }
                }
    }
}
void display(uint ge,uint shi)//顯示子函數(shù)
{
        ge=n%10;
        shi=n/10;
        P2=0xfe;
        P1=table1[ge];
        delay(5);
        P2=0xfd;
        P1=table1[shi];
        delay(5);
}
回復(fù)

使用道具 舉報(bào)

ID:342451 發(fā)表于 2020-4-26 23:58 | 顯示全部樓層
那就去學(xué)定時(shí)器,用軟件延時(shí)函數(shù)太粗略了,或者用延時(shí)函數(shù)計(jì)算工具,計(jì)算出大概比較精確的延時(shí)函數(shù),自己一點(diǎn)一點(diǎn)試,比較不好
回復(fù)

使用道具 舉報(bào)

ID:720329 發(fā)表于 2020-4-27 07:31 來自手機(jī) | 顯示全部樓層
拜托了各位,這個(gè)是我們師傅布置的任務(wù),不用中斷定時(shí)怎么做
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2020-4-27 09:27 | 顯示全部樓層
用不用中斷都一樣,都是延時(shí)而已�?蓞�https://blog.csdn.net/xianfajush ... rank_v2~rank_v25-19
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-4-27 14:11 | 顯示全部樓層
用控制主循環(huán)周期的60s倒計(jì)時(shí)程序示例+仿真
無標(biāo)題.jpg

  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit k1=P3^0;
  5. uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. uint n;
  7. uchar c=0,i=0,sec=0;
  8. bit j;
  9. void delay(uint z)
  10. {
  11.         uint a,b;
  12.         for(a=z;a>0;a--)
  13.                 for(b=119;b>0;b--);
  14. }

  15. void display()//顯示子函數(shù)
  16. {
  17.         P1=0x00;//消隱
  18.         P2=0xfe;//送個(gè)位位碼
  19.         P1=table1[sec%10];//送個(gè)位段碼
  20.         delay(1);//延時(shí)一毫秒
  21.         P1=0x00;//消隱
  22.         P2=0xfd;//送十位位碼
  23.         P1=table1[sec/10];//送十位段碼
  24.         delay(1);//延時(shí)一毫秒
  25. }

  26. void main()
  27. {
  28.         while(1)//主循環(huán)周期約2ms
  29.         {               
  30.                 if(k1==0)
  31.                 {
  32.                         if(++i==10 && j==0)//計(jì)數(shù)消抖與判斷按鍵狀態(tài)
  33.                         {
  34.                                 j=1;//記憶按鍵狀態(tài)
  35.                                 c++;
  36.                                 if(c==1)//開始倒計(jì)時(shí)
  37.                                 {
  38.                                         sec=60;
  39.                                         n=0;
  40.                                 }
  41. //                                if(c==2)//暫停
  42.                                 if(c==3)//清0
  43.                                 {
  44.                                         c=0;       
  45.                                         sec=0;
  46.                                 }
  47.                         }
  48.                 }
  49.                 else //按鍵松手
  50.                 {
  51.                         i=0;
  52.                         j=0;
  53.                 }
  54.                 if(c==1)//允許倒計(jì)時(shí)
  55.                 {
  56.                         n++;
  57.                         if(n>=500)//1秒
  58.                         {
  59.                                 n=0;
  60.                                 if(sec>0)
  61.                                         sec--;
  62.                                 if(sec==0)
  63.                                         c=0;
  64.                         }
  65.                 }
  66.                 display();//調(diào)用顯示子函數(shù)
  67.         }
  68. }
復(fù)制代碼





回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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