单片机学习记录——独立按键

2019-04-15 18:34发布

硬件连接
这里写图片描述
从电路连接图可以看出,8个独立按键一端接地,一端接插口JP5。
在开发板上,通过外接排线使JP5接P1端口。单片机通过读入P1端口的状态(0或1),就得之哪个按键被按下。 软件设计 编写按键扫描函数 /************************************************************ * 函 数 名 : duli_key_scan * 函数功能 : 识别哪个键被按下 * 输 入 : 无 * 输 出 : 键值1~8 ************************************************************/ unsigned char duli_key_scan(void) { static unsigned char key_num; if (KEY != 0xff) { //说明有键按下 delay10ms(); //延时消抖 if ((KEY != 0xff)) { //真有键按下 switch (KEY) { case 0xfe : key_num = 1; break; case 0xfd : key_num = 2; break; case 0xfb : key_num = 3; break; case 0xf7 : key_num = 4; break; case 0xef : key_num = 5; break; case 0xdf : key_num = 6; break; case 0xbf : key_num = 7; break; case 0x7f : key_num = 8; break; } } } return key_num; } 根据按键扫描函数返回的键值,编写LED 显示程序,使不同的LED点亮。 led显示程序 void led(unsigned char num) { //8个LED单独点亮时的码值 unsigned char led[9] = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; LED = led[num]; } 烧录至开发板 注意:有两种按键模式(两者代码只差一个关键字static)
第一种:按下灯亮,松开灯灭(无static)
第二种:按下灯亮,松开不变,直至下次按下按键,灯亮的状态才改变。(有static). 扩展
按键左右移LED灯(按键1 右移、按键2左移)
按键选择花样显示(每个按键类似于一个模式开关,按一下显示不同的模式)