欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機粗略60s倒計時數碼管顯示求教 [打印本頁]

作者: 單片機之神    時間: 2020-4-26 23:37
標題: 51單片機粗略60s倒計時數碼管顯示求教
目前還沒有學習定時中斷,所以只能是粗略的60s倒計時數碼管顯示,下面是我自己編的程序,沒有預期現象,還請各位大佬幫忙瞅瞅,感謝!
#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);//調用顯示子函數
                        delay(1000);//延時一秒
                        }
                        if(n==0) n=0;
                        }
                }
    }
}
void display(uint ge,uint shi)//顯示子函數
{
        ge=n%10;
        shi=n/10;
        P2=0xfe;
        P1=table1[ge];
        delay(5);
        P2=0xfd;
        P1=table1[shi];
        delay(5);
}

作者: 之一知足    時間: 2020-4-26 23:58
那就去學定時器,用軟件延時函數太粗略了,或者用延時函數計算工具,計算出大概比較精確的延時函數,自己一點一點試,比較不好
作者: 單片機之神    時間: 2020-4-27 07:31
拜托了各位,這個是我們師傅布置的任務,不用中斷定時怎么做
作者: xianfajushi    時間: 2020-4-27 09:27
用不用中斷都一樣,都是延時而已。可參https://blog.csdn.net/xianfajush ... rank_v2~rank_v25-19
作者: wulin    時間: 2020-4-27 14:11
用控制主循環周期的60s倒計時程序示例+仿真


  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()//顯示子函數
  16. {
  17.         P1=0x00;//消隱
  18.         P2=0xfe;//送個位位碼
  19.         P1=table1[sec%10];//送個位段碼
  20.         delay(1);//延時一毫秒
  21.         P1=0x00;//消隱
  22.         P2=0xfd;//送十位位碼
  23.         P1=table1[sec/10];//送十位段碼
  24.         delay(1);//延時一毫秒
  25. }

  26. void main()
  27. {
  28.         while(1)//主循環周期約2ms
  29.         {               
  30.                 if(k1==0)
  31.                 {
  32.                         if(++i==10 && j==0)//計數消抖與判斷按鍵狀態
  33.                         {
  34.                                 j=1;//記憶按鍵狀態
  35.                                 c++;
  36.                                 if(c==1)//開始倒計時
  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)//允許倒計時
  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();//調用顯示子函數
  67.         }
  68. }
復制代碼










歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1