![]() |
發布時間: 2022-9-23 11:49
正文摘要:#include "reg51.h" void delay(unsigned int i); sbit K=P0^0; ... |
設置個標注位,按鍵翻轉標注位,檢測標注位決定是否報警。 |
根據上面的建議修改的程序 #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++); } |
rctty 發表于 2022-9-23 17:33 你好,請問能不能幫我寫一下具體的程序,初學單片機然后有些還不是很懂,謝謝 |
munuc_w 發表于 2022-9-23 15:12 可不可以寫一下具體程序,初學單片機,好多都還不懂 |
rctty 發表于 2022-9-23 16:04 這里的K == 0 改成按下到彈起整個過程的狀態,可以通過另一個變量來解決, 比如改成 b == 1, 就有 先判斷按下到談起的狀態 if(K == 0)//按鈕按下 { while(K == 0);//等待按鈕彈起 b = 1; } 當然,這里的while強制等待是不太合適的,這樣會卡住單片機的運行,可以通過定時器之類的方法進行改善 |
用一個變量做標識, char a = 1; if(K == 0)//這是檢測到按下的狀態? { if(a) { a = 0; //報警亮燈代碼 // } else { a = 1; //解除報警,滅燈代碼 // } } 不過你這個按鍵識別應該在軟件上做一個防抖動濾波 |
可以采用計數的方法,定義一個變量,初始值為0,按一次按鍵加1,然后判斷變量的值,當變量等于1時報警,為2時接觸報警,同時清變量。 |