標(biāo)題: 下面是單片機(jī)按一次燈亮且報(bào)警,松開(kāi)按鍵解除報(bào)警怎么改讓它按鍵按下報(bào)警,再按解除... [打印本頁(yè)]

作者: hjb147258369    時(shí)間: 2022-9-23 11:49
標(biāo)題: 下面是單片機(jī)按一次燈亮且報(bào)警,松開(kāi)按鍵解除報(bào)警怎么改讓它按鍵按下報(bào)警,再按解除...
#include "reg51.h"         
void     delay(unsigned int i);
sbit K=P0^0;                     
sbit beep=P1^0;                  
sbit green=P1^1;                 
sbit red=P1^2;                  
void  main()
{
  green=0;     
  red=1;   
  while(1)
   {
     if(K==0)            
      {
        delay(200);   
        if(K==0)        
          {
            green=1;   
            red=0;      
            beep=0;     
            delay(100);
            red=1;      
            beep=1;  
               
         }
      }
     else
        green=0;     
   }
}

void     delay(unsigned int i)            
{
unsigned int k;
for(k=0;k<i;k++);
}


IIX@DE)[(OLQ@4[%9(1%5MO.png (44.32 KB, 下載次數(shù): 42)

IIX@DE)[(OLQ@4[%9(1%5MO.png

作者: munuc_w    時(shí)間: 2022-9-23 15:12
可以采用計(jì)數(shù)的方法,定義一個(gè)變量,初始值為0,按一次按鍵加1,然后判斷變量的值,當(dāng)變量等于1時(shí)報(bào)警,為2時(shí)接觸報(bào)警,同時(shí)清變量。
作者: rctty    時(shí)間: 2022-9-23 16:04
用一個(gè)變量做標(biāo)識(shí),
char a = 1;

if(K == 0)//這是檢測(cè)到按下的狀態(tài)?
{
if(a)
{
     a = 0;
     //報(bào)警亮燈代碼

    //
}
else
{
     a = 1;
     //解除報(bào)警,滅燈代碼

     //
}
}

不過(guò)你這個(gè)按鍵識(shí)別應(yīng)該在軟件上做一個(gè)防抖動(dòng)濾波


作者: rctty    時(shí)間: 2022-9-23 17:33
rctty 發(fā)表于 2022-9-23 16:04
用一個(gè)變量做標(biāo)識(shí),
char a = 1;

這里的K == 0  改成按下到彈起整個(gè)過(guò)程的狀態(tài),可以通過(guò)另一個(gè)變量來(lái)解決,
比如改成 b == 1,
就有
先判斷按下到談起的狀態(tài)
if(K == 0)//按鈕按下
{
     while(K == 0);//等待按鈕彈起
    b = 1;
}

當(dāng)然,這里的while強(qiáng)制等待是不太合適的,這樣會(huì)卡住單片機(jī)的運(yùn)行,可以通過(guò)定時(shí)器之類的方法進(jìn)行改善



作者: hjb147258369    時(shí)間: 2022-9-24 09:52
munuc_w 發(fā)表于 2022-9-23 15:12
可以采用計(jì)數(shù)的方法,定義一個(gè)變量,初始值為0,按一次按鍵加1,然后判斷變量的值,當(dāng)變量等于1時(shí)報(bào)警,為2 ...

可不可以寫一下具體程序,初學(xué)單片機(jī),好多都還不懂
作者: hjb147258369    時(shí)間: 2022-9-24 10:17
rctty 發(fā)表于 2022-9-23 17:33
這里的K == 0  改成按下到彈起整個(gè)過(guò)程的狀態(tài),可以通過(guò)另一個(gè)變量來(lái)解決,
比如改成 b == 1,
就有

你好,請(qǐng)問(wèn)能不能幫我寫一下具體的程序,初學(xué)單片機(jī)然后有些還不是很懂,謝謝
作者: jjjjjjir    時(shí)間: 2022-9-24 15:51
根據(jù)上面的建議修改的程序

#include "reg51.h"         
void     delay(unsigned int i);
sbit K=P0^0;                     
sbit beep=P1^0;                  
sbit green=P1^1;                 
sbit red=P1^2;      
unsigned char Flag = 0;
void  main()
{
  green=0;     
  red=1;   
  while(1)
   {
     if(K==0)            
      {
        while(K==0);                       
        Flag = ~Flag;
      }
     if(Flag)
                 {
                   green=1;   
       red=0;      
       beep=0;     
       delay(100);
       red=1;      
       beep=1;
                 }
                 else
                 {
                   green=0;
                         red=1;
       beep=1;                         
                 }
   }
}

void     delay(unsigned int i)            
{
unsigned int k;
for(k=0;k<i;k++);
}


作者: zmc419    時(shí)間: 2022-9-24 21:30
設(shè)置個(gè)標(biāo)注位,按鍵翻轉(zhuǎn)標(biāo)注位,檢測(cè)標(biāo)注位決定是否報(bào)警。




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