找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

在單片機(jī)倒計時器程序里面再加一個按鍵循環(huán)開關(guān)?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:849826 發(fā)表于 2021-7-21 10:42 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
倒計時程序

#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();     //調(diào)“初始化”。
  while(1)
  { keyscan();  //調(diào)“監(jiān)測按鍵”。
    display(k); //調(diào)“顯示”。
}}


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


  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;  //繼電器狀態(tài) 隨啟動停止按鍵翻轉(zhuǎn)
      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() //初始化。設(shè)置中斷與定時器的值。
{ 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() //計時結(jié)束提示音--嘟嘟。
{
  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,發(fā)聲,關(guān)閉中斷。
  {
    k=0;
    xiang2();

    TR0=0;   //預(yù)定時間到,關(guān)中斷0,停止。
        jdq=1;         // 繼電器釋放
}}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:849826 發(fā)表于 2021-7-21 10:46 來自手機(jī) | 只看該作者
回復(fù)

使用道具 舉報

板凳
ID:849826 發(fā)表于 2021-7-21 10:48 來自手機(jī) | 只看該作者
把鏈接里面按鍵循環(huán)開關(guān)加倒,計時器里面,模擬的時候風(fēng)扇一個按鍵循環(huán)控制三個檔位,和倒計時功能,誰幫我把按鍵循環(huán)程序,加倒計時器里面
回復(fù)

使用道具 舉報

地板
ID:955239 發(fā)表于 2021-7-21 11:50 | 只看該作者
只提供思路參考
按鍵循環(huán)可以使用“狀態(tài)機(jī)”來實(shí)現(xiàn)。比如第一次按下,按鍵做出第一次按的響應(yīng),同時按鍵狀態(tài)更改為下一個狀態(tài)。根據(jù)“狀態(tài)機(jī)”狀態(tài)來響應(yīng)同一個按鍵的不同功能。
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2021-7-21 16:04 | 只看該作者
6313 發(fā)表于 2021-7-21 10:48
把鏈接里面按鍵循環(huán)開關(guān)加倒,計時器里面,模擬的時候風(fēng)扇一個按鍵循環(huán)控制三個檔位,和倒計時功能,誰幫我 ...

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

樓主的代碼中已經(jīng)有三個按鍵
現(xiàn)在是要再加一個按鍵去實(shí)現(xiàn)循環(huán)控制三個檔位嗎?
回復(fù)

使用道具 舉報

6#
ID:849826 發(fā)表于 2021-7-21 20:38 | 只看該作者
lkc8210 發(fā)表于 2021-7-21 16:04
樓主的魚文,能力太可怕了
我是說樓主的,魚文能力太,可怕了

是你的理解能力太差
回復(fù)

使用道具 舉報

7#
ID:123289 發(fā)表于 2021-7-22 09:04 | 只看該作者
的確,估計我的理解能力也差。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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