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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2129|回復: 7
收起左側

下面是單片機按一次燈亮且報警,松開按鍵解除報警怎么改讓它按鍵按下報警,再按解除...

[復制鏈接]
ID:1045644 發表于 2022-9-23 11:49 | 顯示全部樓層 |閱讀模式
#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
回復

使用道具 舉報

ID:752974 發表于 2022-9-23 15:12 | 顯示全部樓層
可以采用計數的方法,定義一個變量,初始值為0,按一次按鍵加1,然后判斷變量的值,當變量等于1時報警,為2時接觸報警,同時清變量。
回復

使用道具 舉報

ID:1045628 發表于 2022-9-23 16:04 | 顯示全部樓層
用一個變量做標識,
char a = 1;

if(K == 0)//這是檢測到按下的狀態?
{
if(a)
{
     a = 0;
     //報警亮燈代碼

    //
}
else
{
     a = 1;
     //解除報警,滅燈代碼

     //
}
}

不過你這個按鍵識別應該在軟件上做一個防抖動濾波

回復

使用道具 舉報

ID:1045628 發表于 2022-9-23 17:33 | 顯示全部樓層
rctty 發表于 2022-9-23 16:04
用一個變量做標識,
char a = 1;

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

當然,這里的while強制等待是不太合適的,這樣會卡住單片機的運行,可以通過定時器之類的方法進行改善


回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
ID:1045644 發表于 2022-9-24 09:52 | 顯示全部樓層
munuc_w 發表于 2022-9-23 15:12
可以采用計數的方法,定義一個變量,初始值為0,按一次按鍵加1,然后判斷變量的值,當變量等于1時報警,為2 ...

可不可以寫一下具體程序,初學單片機,好多都還不懂
回復

使用道具 舉報

ID:1045644 發表于 2022-9-24 10:17 | 顯示全部樓層
rctty 發表于 2022-9-23 17:33
這里的K == 0  改成按下到彈起整個過程的狀態,可以通過另一個變量來解決,
比如改成 b == 1,
就有

你好,請問能不能幫我寫一下具體的程序,初學單片機然后有些還不是很懂,謝謝
回復

使用道具 舉報

ID:176854 發表于 2022-9-24 15:51 | 顯示全部樓層
根據上面的建議修改的程序

#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++);
}

回復

使用道具 舉報

ID:137736 發表于 2022-9-24 21:30 | 顯示全部樓層
設置個標注位,按鍵翻轉標注位,檢測標注位決定是否報警。
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表