3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)

控制单独LED

SDCC安装目录下的这个文件里面有定义P2_0这个位置单独的定义,引用这个头文件就可以单独控制P2.0

D:\work\SDCC\include\mcs51\8051.h

h 复制代码
/* P2 */
__sbit __at (0xA0) P2_0 ;
__sbit __at (0xA1) P2_1 ;
__sbit __at (0xA2) P2_2 ;
__sbit __at (0xA3) P2_3 ;
__sbit __at (0xA4) P2_4 ;
__sbit __at (0xA5) P2_5 ;
__sbit __at (0xA6) P2_6 ;
__sbit __at (0xA7) P2_7 ;
部分 含义
__sbit SDCC 的关键字,表示"定义一个位变量"(占 1 位,不是 1 字节)
__at (0xA0) 把这个位变量定位到地址 0xA0
P2_0 变量名,代表 P2 口的第 0 位
; 语句结束

单独点亮P2.0

编译烧录如下代码,可以实现单独点亮P2.0

sdcc -mmcs51 --model-small --iram-size 256 --xram-size 0 --code-size 8192 .\key_led.c

c 复制代码
#include <mcs51/8051.h>   // 用 SDCC 的头文件,不是 REGX52.H

void main(void)
{
    while(1) {
        // P2 = 0xFE;  // 11111110,P2.0/P20 输出低电平,点亮第一个 LED
        P2_0 = 0;   // 直接写 P2_0,头文件里已经定义好了
    }
}

补充 1:P2_0 和 P2 = 0xFE; 的区别

写法 影响范围 适用场景
P2_0 = 0; 只影响 P2.0 只想控制一个灯,其他位不动
P2 = 0xFE; 影响整个 P2 口 流水灯、多个灯一起控制

补充 2:P2_0 = 0; 和 P2_0 = 1; 的效果

c 复制代码
P2_0 = 0;   // P2.0 输出低电平,灯亮(低电平点亮)
P2_0 = 1;   // P2.0 输出高电平,灯灭

按键控制LED

如图,四个按键一侧连接GND,另外一侧悬空。以k1为例,没有按下时,P3.1读取为高电平,按下时为低电平。

sdcc -mmcs51 --model-small --iram-size 256 --xram-size 0 --code-size 8192 .\key_led.c

c 复制代码
#include <mcs51/8051.h>   // 包含P2_0的定义

void main(void)
{   // 按下点亮led,松开灭
    while(1) {
        if(P3_1 == 0) {  // 如果按键 k1 按下
            P2_0 = 0;    // led 01 亮
        } else {
            P2_0 = 1;    // led 01 灭
        }
    }
}

效果展示

相关推荐
路上有只喵9 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件
不昀9 小时前
开关电源电流互感器怎么选:匝比、采样电阻与复位的计算笔记
单片机·嵌入式硬件·电子元器件
小李不想当小白12 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
youcans_13 小时前
【嵌入式软件AI编程】(3)面向 AI 协同开发的 STM32 硬件信息标准化
人工智能·stm32·嵌入式硬件·ai编程
智者知已应修善业16 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
辰哥单片机设计17 小时前
STM32智能药盒丨2027单片机新项目
stm32·单片机·嵌入式硬件
LCG米1 天前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga1 天前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡1 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范