想开一家相亲网站 怎么做,外贸有限公司英文网站,四川建设网网网站维护电话,wordpress不显示其它主题实验目的#xff1a;按下键盘1时#xff0c;点亮LED灯1。
键盘原理图如下图所示#xff0c;可见#xff0c;由于接GND#xff0c;当键盘按下时#xff0c;P3相应的端口为低电平。 键盘按下时会出现抖动#xff0c;时间通常为5-10ms#xff0c;代码中通过延时函数delay…实验目的按下键盘1时点亮LED灯1。
键盘原理图如下图所示可见由于接GND当键盘按下时P3相应的端口为低电平。 键盘按下时会出现抖动时间通常为5-10ms代码中通过延时函数delay_10us将抖动过滤掉。 我们要实现的功能是按下键盘1LED1点亮再按下键盘1LED1熄灭。为了防止一直按着键盘不松手LED1被反复点亮熄灭代码中通过key来确保按下键盘只执行一次操作。
#include reg52.htypedef unsigned char u8;
typedef unsigned int u16;sbit KEY1 P3^1; //定义键盘对应的端口
sbit KEY2 P3^0;
sbit KEY3 P3^2;
sbit KEY4 P3^3;sbit LED1 P2^0; //LED灯对应的端口#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0void delay_10us(u16 ten_us){while(ten_us--);
}u8 key_scan(u8 mode){ static u8 key1;if(mode)key1; //key的目的是防止一直按按键不松手if(key1 (KEY10||KEY20||KEY30||KEY40)){//低电平表示键盘被按下delay_10us(1000);key0;if(KEY10)return KEY1_PRESS;else if(KEY20)return KEY2_PRESS;else if(KEY30)return KEY3_PRESS; else if(KEY40)return KEY4_PRESS; }else if(KEY11KEY21KEY31KEY41){//键盘未被按下key1;}return KEY_UNPRESS;
}void main(){u8 key0;while(1){key key_scan(0);if(keyKEY1_PRESS){//当键盘1按下时LED灯1被点亮LED1 !LED1;}}
}