標(biāo)題: 關(guān)于單片機(jī)24秒倒計(jì)時(shí)添加按鍵控制程序的問(wèn)題 [打印本頁(yè)]

作者: 坐在分頭調(diào)戲鬼    時(shí)間: 2019-1-23 10:05
標(biāo)題: 關(guān)于單片機(jī)24秒倒計(jì)時(shí)添加按鍵控制程序的問(wèn)題
我寫(xiě)了一個(gè)24秒倒計(jì)時(shí)的程序    想添加按鍵去控制暫停  繼續(xù)    等功能    我應(yīng)該把按鍵程序添加在什么位置    該怎么去寫(xiě)
這是我的程序:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. sbit key1=P3^4;
  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  8.                                         0x7f,0x6f,0x40};
  9. uchar code tablefen[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  10.                                         0x7f,0x6f};
  11. uchar code tablemiao[]={0x3f,0x7d,0x6f,0x4f,0x7d,0x6f,0x4f,0x7d,0x6f};
  12. uchar num,num1,num2,num3,ge,shi,fen,miao;
  13. void delayms(uint);
  14. void display(uchar,uchar);
  15. void display1(uchar,uchar);
  16. void main()
  17. {
  18.         dula=1;
  19.         P0=table[2];
  20.         dula=0;

  21.         P0=0xff;

  22.         wela=1;
  23.         P0=0xfe;
  24.         wela=0;

  25.         delayms(1);

  26.         dula=1;
  27.         P0=table[4];
  28.         dula=0;

  29.         P0=0xff;

  30.         wela=1;
  31.         P0=0xfd;
  32.         wela=0;

  33.         delayms(1);

  34.         dula=1;
  35.         P0=table[10];
  36.         dula=0;

  37.         P0=0xff;

  38.         wela=1;
  39.         P0=0xfb;
  40.         wela=0;

  41.         delayms(1);

  42.         dula=1;
  43.         P0=table[10];
  44.         dula=0;

  45.         P0=0xff;

  46.         wela=1;
  47.         P0=0xf7;
  48.         wela=0;

  49.         delayms(1);        

  50.         dula=1;
  51.         P0=table[0];
  52.         dula=0;

  53.         P0=0xff;

  54.         wela=1;
  55.         P0=0xef;
  56.         wela=0;

  57.         delayms(1);

  58.         dula=1;
  59.         P0=table[0];
  60.         dula=0;

  61.         P0=0xff;

  62.         wela=1;
  63.         P0=0xdf;
  64.         wela=0;

  65.         delayms(1);        

  66.         num1=24;
  67.         shi=2;
  68.         ge=3;
  69.         fen=0;
  70.         miao=0;
  71.         TMOD=0x11;
  72.         TH0=(65536-45872)/256;
  73.         TL0=(65536-45872)%256;
  74.         TH1=(65536-45872)/256;
  75.         TL1=(65536-45872)%256;
  76.         EA=1;
  77.         ET0=1;
  78.         ET1=1;
  79.         TR0=1;
  80.         TR1=1;
  81.         while(1)
  82.         {
  83.                                                 display1(fen,miao);
  84.                                                 display(shi,ge);                                       
  85.         }
  86. }

  87. void display(uchar shi, uchar ge)
  88. {
  89.         dula=1;
  90.         P0=table[shi];
  91.         dula=0;

  92.         P0=0xff;

  93.         wela=1;
  94.         P0=0xfe;
  95.         wela=0;

  96.         delayms(1);

  97.         dula=1;
  98.         P0=table[ge];
  99.         dula=0;

  100.         P0=0xff;

  101.         wela=1;
  102.         P0=0xfd;
  103.         wela=0;
  104.         delayms(1);

  105.         dula=1;
  106.         P0=table[10];
  107.         dula=0;

  108.         P0=0xff;

  109.         wela=1;
  110.         P0=0xfb;
  111.         wela=0;

  112.         delayms(1);

  113.         dula=1;
  114.         P0=table[10];
  115.         dula=0;

  116.         P0=0xff;

  117.         wela=1;
  118.         P0=0xf7;
  119.         wela=0;

  120.         delayms(1);

  121. }
  122. void display1(uchar fen,uchar miao)
  123. {
  124.         
  125.         dula=1;
  126.         P0=tablefen[fen];
  127.         dula=0;

  128.         P0=0xff;

  129.         wela=1;
  130.         P0=0xef;
  131.         wela=0;

  132.         delayms(1);

  133.         dula=1;
  134.         P0=tablemiao[miao];
  135.         dula=0;

  136.         P0=0xff;

  137.         wela=1;
  138.         P0=0xdf;
  139.         wela=0;

  140.         delayms(1);        
  141. }
  142. void delayms(uint xms)
  143. {
  144.         uint i,j;
  145.         for(i=xms;i>0;i--)
  146.                 for(j=110;j>0;j--);
  147. }
  148. void exter1() interrupt 3
  149. {
  150.         TH1=(65536-45872)/256;
  151.         TL1=(65536-45872)%256;        
  152.         num2++;
  153.         if(num2==2)
  154.                 {
  155.                         num2=0;
  156.                         if(fen==0)
  157.                         fen=9;
  158.                         if(miao==0)
  159.                         miao=9;
  160.                         fen--;
  161.                         miao--;
  162.                 }
  163. }
  164. void exter0() interrupt 1
  165. {
  166.         TH0=(65536-45872)/256;
  167.         TL0=(65536-45872)%256;
  168.         num++;        
  169.         if(num==20)
  170.         {
  171.                 num=0;
  172.                 num1--;
  173.                 if(num1==0)
  174.                         {
  175.                                 P1=0xfe;
  176.                                 delayms(50);
  177.                                 P1=0xff;
  178.                         }
  179.                 if(num1==0)
  180.                 num1=23;
  181.                 shi=num1/10;
  182.                 ge=num1%10;
  183.         }
  184. }
復(fù)制代碼



作者: 13976778401    時(shí)間: 2019-1-23 15:22
在定制器那里添加判斷就可以實(shí)現(xiàn)暫停繼續(xù),這么說(shuō)應(yīng)該明白了吧,就是把定制器里的num和num2的計(jì)時(shí)停了就達(dá)到了你想要的效果了!
作者: wulin    時(shí)間: 2019-1-23 22:16
給你改成單鍵控制開(kāi)始、暫停、繼續(xù)的24秒倒計(jì)時(shí)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
                                                        0x7d,0x07,0x7f,0x6f,0x40};
uchar num=0,miao=0;
bit zantin=0;
void delayms(uint);
void keyscan();       
void display();

void main()
{
        TMOD=0x01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;

        while(1)
        {
                keyscan();
                display();
        }
}
/***********按鍵掃描程序****************/
void keyscan()       
{
        static uint count1=0;        //計(jì)數(shù)變量                       
        static bit key_sign=0;                                        //按鍵狀態(tài)標(biāo)志
        if(key1==0)                                //檢測(cè)輸入如果為0
        {
                count1++;                                        //計(jì)數(shù)延時(shí)消抖
                if((count1>=50)&&(key_sign==0))//檢測(cè)按鍵如果為0
                {                       
                        key_sign=1;                //按鍵狀態(tài)標(biāo)志置1,防止重復(fù)響應(yīng)
                        if(miao==0)//開(kāi)始倒計(jì)時(shí)
                        {
                                num=0;
                                miao=24;
                                zantin=1;
                        }
                        else zantin=~zantin;        //暫停/繼續(xù)
                }
        }
        else
        {
                count1=0;                                //計(jì)數(shù)變量清0
                key_sign=0;                                //按鍵狀態(tài)標(biāo)志清0
        }
}
void display()
{
        P0=0x00;
        dula=1;
        dula=0;

        P0=0xfe;
        wela=1;
        wela=0;
       
        P0=table[miao/10];
        dula=1;
        dula=0;
        delayms(1);
       
        P0=0x00;
        dula=1;
        dula=0;

        P0=0xfd;
        wela=1;
        wela=0;

        P0=table[miao%10];
        dula=1;
        dula=0;
        delayms(1);        
}
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void exter0() interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        if(zantin==1)      
        {
                num++;
                if(num==20)
                {
                        num=0;
                        if(miao>0)
                                miao--;
                }
        }
}
作者: 坐在分頭調(diào)戲鬼    時(shí)間: 2019-1-24 15:00
wulin 發(fā)表于 2019-1-23 22:16
給你改成單鍵控制開(kāi)始、暫停、繼續(xù)的24秒倒計(jì)時(shí)。
#include
#define uchar unsigned char

謝謝你的幫助
作者: lk55555    時(shí)間: 2019-12-17 20:28
樓主在嗎,這程序我也想用,能把原理圖發(fā)給我一下嗎




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