微机原理实践教程(C语言篇)---A002流水灯

1.硬件

2.C程序

cpp 复制代码
#define ADR_273 0x0200
#define ADR_244 0x0400
#define LED_PORT 0x800

void outp(unsigned int addr, char data)
// 输出一字节到I/O端口
{ __asm
    { mov dx, addr
      mov al, data
      out dx, al
    }
}

char inp(unsigned int addr)
// 从I/O端口输入一字节
{ char result;
   __asm
    { mov dx, addr
      in al, dx
      mov result, al
    }
   return result;
}

char end_flag[5]={0x55,0x55,0x55,0x55,0x55};

void delay(void)
// 延时函数,使用原有的双重循环延时方式
{
    int i;
    for(i=0; i<5000; i++);
    for(i=0; i<5000; i++);
}

void main(void)
/* 流水灯程序:8位LED轮流点亮,形成流水效果
   采用共阳LED,输出0点亮,输出1熄灭 */
{ 
    int i;
    unsigned char led_pattern;
    
    // 初始值:1111 1110 (最低位D0=0,点亮第1个LED)
    led_pattern = 0xFE;
    
    while (1)
    {
        // 输出当前模式到LED端口
        outp(LED_PORT, led_pattern);
        
        // 延时控制流水速度
        delay();
        
        // 循环左移:让点亮的LED向左移动
        // 例如: 1111 1110 -> 1111 1101 -> 1111 1011 -> ...
        led_pattern = (led_pattern << 1) | (led_pattern >> 7);
        
        // 可选:检测按键退出(如果按下任意键则退出循环)
        // if (inp(ADR_244) != 0xFF) break;
    }
    
    // 退出时关闭所有LED(输出全1)
    // outp(LED_PORT, 0xFF);
}

3.编译

4.下载测试


保存图片
编辑图片
移除物体
提取文字
图片翻译

相关推荐
LuDvei4 小时前
STM32串行通信DMA的使用
stm32·单片机·嵌入式硬件
似是燕归来4 小时前
嵌入式工程师进阶指南:适配器编程设计模式一
c语言·stm32·适配器模式·嵌入式开发
2401_854151555 小时前
STM32 I2C 通信 HAL 库踩坑记录
stm32·单片机·嵌入式硬件
西门吹-禅5 小时前
java springboot N+1问题
java·开发语言·spring boot
skywalk81635 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
IT笔记7 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode7 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇7 小时前
C# 运算符重载详解
开发语言·后端·c#
蒙塔基的钢蛋儿8 小时前
记一次 STM32H723 硬件 Bug 排查:写个 ETH 寄存器,SDRAM 数据飞了
stm32·嵌入式硬件·bug
TPBoreas8 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言