3-3 独立按键控制LED显示二进制(SDCC + Notepad++ + STC-ISP/普中ISP)

功能概述

每按一次按键,LEDNum 加 1,然后把这个数取反后输出到 P2 口,点亮对应的 LED。

因为 LED 是低电平点亮,所以取反后,值为 0 的位对应的 LED 会亮。

代码

c 复制代码
#include <mcs51/8051.h>

void DelayXms(unsigned int xms)
{
    unsigned char i, j;
    if(xms == 0) return;
    do {
        i = 2;
        j = 239;
        do {
            while (--j);
        } while (--i);
    } while (--xms);
}

void main(void)
{   // LEDNum 是一个 8 位变量,初始值为 0,用来记录当前要显示的数值。
    unsigned char LEDNum = 0;
    while(1)
    {
        if(P3_1 == 0)           // 按键按下
        {
            DelayXms(20);       // 消抖
            while(P3_1 == 0);   // 等待松手
            DelayXms(20);       // 消抖
            
            LEDNum++;
            P2 = ~LEDNum;
        }
    }
}

为什么要取反?

LED 是低电平点亮。

  • LEDNum = 1 时,二进制是 0000 0001,取反后是 1111 1110,P2.0 输出低电平,第一个 LED 亮。
  • LEDNum = 2 时,二进制是 0000 0010,取反后是 1111 1101,P2.1 输出低电平,第二个 LED 亮。
  • LEDNum = 3 时,二进制是 0000 0011,取反后是 1111 1100,P2.0 和 P2.1 都亮。

理论运行效果

按键次数 LEDNum 二进制 P2 输出(取反后) 亮的 LED
0 0 0000 0000 1111 1111 全灭
1 1 0000 0001 1111 1110 P2.0
2 2 0000 0010 1111 1101 P2.1
3 3 0000 0011 1111 1100 P2.0、P2.1
4 4 0000 0100 1111 1011 P2.2
5 5 0000 0101 1111 1010 P2.0、P2.2

相当于用 LED 显示 0~255 的二进制数。

显示效果

相关推荐
ccbw1628 分钟前
从一颗录音豆说起:AI会议转写的端侧方案与选型
人工智能·接口隔离原则·码率·采集
星核0penstarry5 天前
企业 API 向后兼容实战:版本控制、废弃字段通知与灰度发布策略
人工智能·后端·api·接口隔离原则·版本控制·架构设计·后端架构
OCR_133716212757 天前
户外强光下护照OCR为什么崩?从ISP到边缘AI,拆一下ER阅读器的抗眩光架构
人工智能·ocr·接口隔离原则
ccbw167 天前
CH634 四端口 USB3.0 HUB 控制器方案拆解与国产替代选型
接口隔离原则·摄像头
xunyan623410 天前
4-2 动态数码管显示(SDCC + Notepad++ + STC-ISP/普中ISP)
接口隔离原则
xunyan623418 天前
4-1 静态数码管显示(SDCC + Notepad++ + STC-ISP/普中ISP)
接口隔离原则
xunyan623419 天前
3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
kyle~20 天前
实时系统通信抖动(Jitter)
计算机视觉·机器人·接口隔离原则·传感器
xunyan623420 天前
3-1 独立按键控制LED状态(SDCC + Notepad++ + STC-ISP/普中ISP)
notepad++·接口隔离原则