51之按键控制开关
原理:按鍵和燈不是我們傳統理解的思維,傳統按鍵和燈是在同一個電路中的。而我們單片機編程按鍵 和燈是分開的兩個電路,通過單片機作為媒介來處理數據,通過邏輯來實現按鍵控制燈
通過上圖可以分析出key1是接到P2.1口,所以只要不斷的檢測P2.1口的值(0:按下,1:松開)就知道按鍵是否被按下了
#include "reg52.h"sbit ledOne = P3^7; sbit key1 = P2^1; sbit key2 = P2^0;void main() {// 查詢法檢測,是否被按下while(1){if(key1 == 0){ //KEY1位置和GND接通,表現為低電平,值為0// 燈會亮,給一個(p3.7口)低電平ledOne = 0;}if(key2 == 0){ledOne = 1;}} }軟件消抖
有時候震動燈也會亮,這種情況是不可取的,所以我們需要消除抖動
#include "reg52.h"#define ON_STATUS 1 #define OFF_STATUS 0sbit ledOne = P3^7; sbit key1 = P2^1; sbit key2 = P2^0;void Delay50ms() //@11.0592MHz {unsigned char i, j;i = 90;j = 163;do{while (--j);} while (--i); }void main() {int ledMark = OFF_STATUS;ledOne = 1;// 查詢法檢測,是否被按下while(1){if(key1 == 0){ //KEY1位置和GND接通,表現為低電平,值為0// 感覺被按下,不知道是抖動還是人為的,延遲50ms再判斷Delay50ms();if(key1 == 0){// 燈會亮,給一個(p3.7口)低電平ledMark = ON_STATUS;}}if(key2 == 0){ledMark = OFF_STATUS;}if(ledMark == OFF_STATUS){ledOne = 1;}else{ledOne = 0;}} }總結
- 上一篇: java遍历jsonarray_java
- 下一篇: gamebuino制作的小游戏之2048