51 单片机LED流水灯(SDCC + Notepad++ + STC-ISP/普中ISP)

效果展示

无参延时流水灯

上节已经测试了led闪烁,这节写led流水灯效果,若想达到效果,可以依次让P2.0到P2.7这八个灯亮,每个间隔500ms。

已知P2.0亮的寄存器是1111 1110,那么P2.1亮的寄存器就是1111 1101。

可以将P2.0左移一位得到1111 1100,再和0000 0001或运算,或运算(有1取1)

text 复制代码
0xFC = 1111 1100
0x01 = 0000 0001
-----------------
0xFD = 1111 1101   ← 只有第 1 位是 0,P2.1 亮

完整代码:

c 复制代码
#include <mcs51/8051.h>
// SDCC 没有 INTRINS.h,用宏定义实现 _nop_()
#define _nop_()  __asm NOP __endasm

void Delay500ms(void)	//@12.000MHz
{
	unsigned char i, j, k;    // 去掉 data,让编译器自动分配

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main(void)
{
    while(1){
        unsigned char led = 0xFE;  // 1111 1110
        
        for(int i = 0; i < 8; i++) {
            P2 = led;
            led = (led << 1) | 0x01;   // 左移后最低位补 1, 最后变成0111 1111
            Delay500ms();
        }
    }
}

或者

c 复制代码
unsigned char led = 0xFE;

while(1)
{
    P2 = led;
    Delay500ms();

    // 把最高位(第 7 位)移到最低位,实现循环
    led = (led << 1) | (led >> 7);
}

带参数延时

c 复制代码
// 一毫秒延时代码
void Delay1ms(void)	//@12.000MHz
{
	unsigned char data i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}
c 复制代码
// xms毫米延时代码
void DelayXms(unsigned int xms)
{
    unsigned char i, j;

    if(xms == 0) return;    // 传入 0 直接返回,不做延时

    do
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    } while (--xms);
}
相关推荐
路上有只喵11 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯12 小时前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司12 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷13 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw13 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
凯基迪科技14 小时前
瑞萨R5F100解密 R8C/RL78 MCU 固件读取与保护机制详解
服务器·网络·单片机
PMAOS14 小时前
4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法
嵌入式硬件·ai·操作系统
mk01515 小时前
单片机同步降压稳压器输出最低1V,关断时损耗3uA
单片机·嵌入式硬件·硬件工程·智能硬件·pcb工艺
然后,是第八天16 小时前
platformio使用使用pioarduino流程
单片机
糖糖单片机设计16 小时前
基于 STM32 + LU-ASR01 的智能台灯
stm32·单片机·嵌入式硬件·51单片机·语音识别