#include<reg52.h>

#define LED P0 #define KEY P1

//定义延时函数 void delay(unsigned int i) { while(i--); }

//读取按键函数,返回按下的按键号 unsigned char readKey() { unsigned char keyVal = 0; KEY = 0x0f; //设置列为高电平 if(KEY != 0x0f) //有按键按下 { delay(1000); //延时去抖动 if(KEY != 0x0f) //再次检查是否有按键按下 { switch(KEY) //根据行的值确定按下的键 { case 0x07: keyVal = 1; break; case 0x0b: keyVal = 2; break; case 0x0d: keyVal = 3; break; case 0x0e: keyVal = 4; break; case 0x0f: keyVal = 5; break; } } } return keyVal; }

void main() { unsigned char keyNum = 0; unsigned char ledVal = 0; unsigned char i = 0;

while(1)
{
    keyNum = readKey(); //读取按键
    switch(keyNum) //根据按键号执行相应的操作
    {
        case 1: //所有灯都熄灭
            LED = 0xff;
            break;
        case 2: //LED1—LED8流动点亮
            ledVal = 0x01;
            for(i = 0; i < 8; i++)
            {
                LED = ledVal;
                delay(50000);
                ledVal <<= 1;
            }
            break;
        case 3: //LED1—LED8依次点亮
            ledVal = 0x01;
            for(i = 0; i < 8; i++)
            {
                LED = ledVal;
                delay(50000);
                ledVal <<= 1;
            }
            break;
        case 4: //LED1、LED3、LED5、LED7和LED2、LED4、LED6、LED8轮流点亮
            LED = 0x55;
            delay(50000);
            LED = 0xaa;
            delay(50000);
            break;
        case 5: //LED1—LED8闪烁
            LED = 0xff;
            delay(50000);
            LED = 0x00;
            delay(50000);
            break;
        default: //无操作
            break;
    }
}

}

基于AT89C51的5按键控制8个LED并显示按键号

原文地址: https://www.cveoy.top/t/topic/oW15 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录