基于AT89C51的5按键控制8个LED并显示按键号
#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;
}
}
}
原文地址: https://www.cveoy.top/t/topic/oW15 著作权归作者所有。请勿转载和采集!