说明
K1、K2按下时LED点亮,松开时熄灭;
K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;
一个按键对应控制一个LED灯;
Proteus仿真
注意:
K1-K4按键依次连接P1.0-P1.3
LED灯D54-D57依次连接P0.0-P0.3
使用到的元器件:
单片机:AT89C51
电容:CAP
极性电容:CAP-ELEC
电阻:RES
晶振:CRYSTAL
LED:LED-GREEN
按键:BUTTON
C51代码
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//关联按键引脚
sbit K1 = P1^0;
sbit K2 = P1^1;
sbit K3 = P1^2;
sbit K4 = P1^3;
//关联LED引脚
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
// 延时
void DelayMs(uint ms)
{
uchar i;
while(ms--)
{
for(i=0; i<120; i++);
}
}
void main()
{
P0 = 0xff; // 关闭LED
P1 = 0xff; // 配置按键端口为高电平
while(1)
{
// 处理按键K1和K2
LED1 = K1;
LED2 = K2;
// 处理按键K3
if(K3 == 0) // 按键K3按下
{
DelayMs(50); // 延时去抖动
if(K3 == 0) // 确认按键按下
{
LED3 = ~LED3; // 切换LED3状态
while(K3 == 0); // 等待按键松开
DelayMs(50); // 再次延时去抖动
}
}
// 处理按键K4
if(K4 == 0) // 按键K4按下
{
DelayMs(50); // 延时去抖动
if(K4 == 0) // 确认按键按下
{
LED4 = ~LED4; // 切换LED4状态
while(K4 == 0); // 等待按键松开
DelayMs(50); // 再次延时去抖动
}
}
DelayMs(10); // 确保程序有足够的时间去响应按键
}
}