51之按键控制开关
原理:按鍵和燈不是我們傳統(tǒng)理解的思維,傳統(tǒng)按鍵和燈是在同一個(gè)電路中的。而我們單片機(jī)編程按鍵 和燈是分開的兩個(gè)電路,通過單片機(jī)作為媒介來處理數(shù)據(jù),通過邏輯來實(shí)現(xiàn)按鍵控制燈
通過上圖可以分析出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接通,表現(xiàn)為低電平,值為0// 燈會(huì)亮,給一個(gè)(p3.7口)低電平ledOne = 0;}if(key2 == 0){ledOne = 1;}} }軟件消抖
有時(shí)候震動(dòng)燈也會(huì)亮,這種情況是不可取的,所以我們需要消除抖動(dòng)
#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接通,表現(xiàn)為低電平,值為0// 感覺被按下,不知道是抖動(dòng)還是人為的,延遲50ms再判斷Delay50ms();if(key1 == 0){// 燈會(huì)亮,給一個(gè)(p3.7口)低電平ledMark = ON_STATUS;}}if(key2 == 0){ledMark = OFF_STATUS;}if(ledMark == OFF_STATUS){ledOne = 1;}else{ledOne = 0;}} }總結(jié)
- 上一篇: java遍历jsonarray_java
- 下一篇: gamebuino制作的小游戏之2048