微机原理实践教程(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.下载测试


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

相关推荐
Zwawa5 分钟前
PID 的三个参数之外:位置式、增量式和反馈控制
c语言·单片机·嵌入式
创界工坊工作室11 分钟前
29-基于单片机的万年历设计
stm32·单片机·嵌入式硬件·proteus
释厄62323 分钟前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin
2601_9628857234 分钟前
如何用 Python计算 CR能量指标(中间意愿指标)?
开发语言·python
木由里予37 分钟前
NAND 这门生意
运维·服务器·网络·单片机
slimer37 分钟前
11.C 语言 printf 打印函数详解:格式说明符、宽度精度与安全输出
linux·c语言
国科安芯1 小时前
在轨服务与空间机器人任务中跨飞行器CANFD互连的共模与单粒子问题综述
嵌入式硬件·机器人·canfd·低轨卫星·商业航天·抗辐射
临床数据科学和人工智能兴趣组1 小时前
在R语言的生态系统中,字符串处理一直是一个重要且复杂的任务
开发语言·正则表达式·r语言·r语言-4.2.1
蜗牛互联网1 小时前
Python调用Gemini Structured Outputs实现工单路由门禁
java·开发语言·人工智能·python
SEO_juper1 小时前
给网页做可引用性评分:判断内容够不够让 AI 引用(GEO 工具,附代码)
开发语言·人工智能·爬虫·python·seo·独立站