C51 Proteus仿真实验12:按键状态显示

说明

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);  // 确保程序有足够的时间去响应按键
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值