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

硬件连接
这里写图片描述
从电路连接图可以看出,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左移)
按键选择花样显示(每个按键类似于一个模式开关,按一下显示不同的模式)

猜你喜欢

转载自blog.csdn.net/jiaruitao777/article/details/79964433