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

標題: 在單片機倒計時器程序里面再加一個按鍵循環開關? [打印本頁]

作者: 6313    時間: 2021-7-21 10:42
標題: 在單片機倒計時器程序里面再加一個按鍵循環開關?
倒計時程序

#include<reg52.h>  //最長99分鐘定時倒計時提醒器
                       //2021-7-14        中微電子
#define uchar unsigned char
#define uint unsigned int
sbit gewei0=P1^6;   //允許個位顯示。
sbit shiwei0=P1^7;  //允許十位顯示。
sbit key1=P1^2;  //鍵1,每按加10分鐘。
sbit key2=P1^1;  //鍵2,每按加1分鐘。
sbit key3=P1^0;  //鍵3,開倒計時或暫停。
sbit beep=P1^3;         //蜂鳴器
sbit  led=P1^4;          //秒指示燈
sbit  jdq=P3^4;        //繼電器        
uchar k;
unsigned int s,m;
void delayms(uchar);
void delay(uint z);
void keyscan();
void display(uchar);
void init();
void xiang1();
void xiang2();
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


void main()
{ init();     //調“初始化”。
  while(1)
  { keyscan();  //調“監測按鍵”。
    display(k); //調“顯示”。
}}


void keyscan() //監測按鍵。
{ if(key2==0)
  { delayms(26);
    if(key2==0)
    { k++;
      if(k>=99) //k==99與中斷那里一致。
         k=0;
      while(!key2); //抬起按鍵key2時,顯示出k+2的結果。
    }
  }


  if(key1==0)
  { delayms(26);
    if(key1==0)
    { k=k+10;
      if(k>=99) //k==99與中斷那里一致。
         k=0;
      while(!key1);
    }
  }
  if(key3==0)
  { delayms(26);
    if(key3==0)
    {         
          xiang1(); //啟動“倒計時”提示。
      delayms(246);
      TR0=~TR0;
           jdq=~jdq;  //繼電器狀態 隨啟動停止按鍵翻轉
      while(!key3);
         
}}}


void delayms(uchar z) //延時。
{ uchar i,j;
  for(i=z;i>0;i--)
    for(j=110;j>0;j--); }


void delay(uint z)
{  while(z--); }


void display(uchar k) //顯示。
{ uchar shi,ge;
  shi=k/10;
  ge =k%10;


  gewei0=0;
  P2=table[ge];
  delayms(21);
  gewei0=1;


  shiwei0=0;
  P2=table[shi];
  delayms(21);
  shiwei0=1;
}


void init() //初始化。設置中斷與定時器的值。
{ TMOD=0x01;
  TH0=(65536-50000)/256;  //晶振12MHz,定時50ms。
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
}


void xiang1() //計時開始提示音。
{
  uchar q;
  for(q=0;q<100;q++)
  {
    beep=0;
    delayms(6);
    beep=1;
    delayms(4);
  }
    delayms(64);
}




   void xiang2() //計時結束提示音--嘟嘟。
{
  unsigned int m;
  uchar n,i;
  for(i=3;i>0;i--)
  {
    for(n=123;n>0;n--)
    {
      beep=0;
      delay(100);
      beep=1;
      delay(100);
    }


   for(m=3456;m>0;m--);
    for(n=123;n>0;n--)
    {
      beep=0;
      delay(90);
      beep=1;
      delay(90);
                  
    }


         
   for(m=56789;m>0;m--);
        
  }

}










void time0()interrupt 1  //0中斷,中斷序號1。
{ uint zxc=65432;
  TH0=0xb1; //晶振12MHz,定時20ms。
  TL0=0xe0;
  s++;
  if(m==25)  //作秒指示。
  {
    m=0;
    led=~led;}
  m++;  //uchar m; 定義為全局變量。
  if(s==3000) //3000×20ms=60000ms÷1000ms=60s(1分鐘)
  { s=0;   //歸零。等待下個1分鐘。
    k--; } //倒計時,減1分鐘。


  if(k<=0) //如果到0,發聲,關閉中斷。
  {
    k=0;
    xiang2();

    TR0=0;   //預定時間到,關中斷0,停止。
        jdq=1;         // 繼電器釋放
}}


作者: 6313    時間: 2021-7-21 10:46
http://m.raoushi.com/bbs/dpj-199874-1.html
作者: 6313    時間: 2021-7-21 10:48
把鏈接里面按鍵循環開關加倒,計時器里面,模擬的時候風扇一個按鍵循環控制三個檔位,和倒計時功能,誰幫我把按鍵循環程序,加倒計時器里面
作者: ZChaoM    時間: 2021-7-21 11:50
只提供思路參考
按鍵循環可以使用“狀態機”來實現。比如第一次按下,按鍵做出第一次按的響應,同時按鍵狀態更改為下一個狀態。根據“狀態機”狀態來響應同一個按鍵的不同功能。

作者: lkc8210    時間: 2021-7-21 16:04
6313 發表于 2021-7-21 10:48
把鏈接里面按鍵循環開關加倒,計時器里面,模擬的時候風扇一個按鍵循環控制三個檔位,和倒計時功能,誰幫我 ...

樓主的魚文,能力太可怕了
我是說樓主的,魚文能力太,可怕了

樓主的代碼中已經有三個按鍵
現在是要再加一個按鍵去實現循環控制三個檔位嗎?
作者: 6313    時間: 2021-7-21 20:38
lkc8210 發表于 2021-7-21 16:04
樓主的魚文,能力太可怕了
我是說樓主的,魚文能力太,可怕了

是你的理解能力太差
作者: yzwzfyz    時間: 2021-7-22 09:04
的確,估計我的理解能力也差。




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