硬件连接
从电路连接图可以看出,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)
{
unsigned char led[9] = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
LED = led[num];
}
烧录至开发板
注意:有两种按键模式(两者代码只差一个关键字static)
第一种:按下灯亮,松开灯灭(无static)
第二种:按下灯亮,松开不变,直至下次按下按键,灯亮的状态才改变。(有static).
扩展
按键左右移LED灯(按键1 右移、按键2左移)
按键选择花样显示(每个按键类似于一个模式开关,按一下显示不同的模式)