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 的二进制数。

显示效果

相关推荐
xunyan62341 天前
51 单片机LED流水灯(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
雪雪爱冲浪2 天前
2026 年网络爬虫领域的Puppeteer vs. Playwright
爬虫·网络协议·测试工具·接口隔离原则
DolitD5 天前
3D应用多实例并发中的GPU隔离技术路径分析
容器·gru·接口隔离原则
xunyan62345 天前
51 单片机LED闪烁(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·notepad++·接口隔离原则
运维行者_6 天前
PHP性能监控怎么做?从响应时间到慢函数的6个关键指标
运维·服务器·开发语言·网络·支持向量机·php·接口隔离原则
雪雪爱冲浪6 天前
ISP代理与住宅代理选型对比:从原理到实战
服务器·网络·网络协议·tcp/ip·接口隔离原则
黑妹天下第一乖8 天前
第 12 讲:阿加犀 AidLux 部署与量产——把端侧 AI 应用做成 7×24 产品
人工智能·嵌入式硬件·数码相机·接口隔离原则·iot
黑妹天下第一乖9 天前
第08讲 · 视觉与相机流水:Spectra ISP 与实时检测
人工智能·嵌入式硬件·数码相机·机器人·接口隔离原则·iot
pride.li14 天前
ISP标定-BLC标定(Black Level Calibration,黑电平校准)
人工智能·计算机视觉·接口隔离原则