
A05基于51单片机汇编流水灯Proteus设计,asm
用51单片机汇编语言做一个LED流水灯仿真:经74LS373锁存器驱动8个LED从上到下流水。资料包含Proteus仿真文件和完整汇编源码,适合汇编语言入门和端口实验的同学参考。
一、设计实现功能
使用51单片机设计一个简易的LED流水灯:
1、使用汇编语言设计。
2、要求使用74LS373控制8个LED从上到下流水。
二、资源汇总
1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的cx.hex。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。
三、设计介绍
拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。
硬件链路:P1口接74LS373锁存器的数据输入端,373的输出驱动8个LED。373在这里起隔离和驱动的作用,避免单片机的P1口直接带负载,同时把数据锁存住,让流水效果稳定。
图1 Proteus仿真总览

程序逻辑非常紧凑,主循环就三步:送数、移位、延时。初值送0FEH(二进制11111110,只有最低位是0),8个LED低电平点亮,所以一开始是最下面那个灯亮;每轮用RL指令把累加器A左移一位,高位补0,亮点就往上走一位;R2寄存器计数8次,8步走完一轮,LJMP跳回主循环重新开始,如此循环往复就是流水。
RL A左移的轨迹:
| 步数 | A的值 | 点亮的LED |
| 1 | 0FEH | 第1个(最低位) |
| 2 | 0FDH | 第2个 |
| 3 | 0FBH | 第3个 |
| 4 | 0F7H | 第4个 |
| 5 | 0EFH | 第5个 |
| 6 | 0DFH | 第6个 |
| 7 | 0BFH | 第7个 |
| 8 | 07FH | 第8个(最高位) |
图2 汇编程序源码

延时子程序用R6、R7双层循环:R6、R7初值都取0,DJNZ指令每执行一次减1,从0减到0要绕255+1次,内层256次、外层也256次,合计256×256次循环。按12MHz晶振(每个机器周期1µs、DJNZ占2个机器周期)估算:
| 参数 | 值 | 说明 |
| R6 内层圈数 | 256 | 初值0,绕满一周 |
| R7 外层圈数 | 256 | 初值0,绕满一周 |
| 每步时长 | 约131ms | 12MHz晶振估算 |
| 一轮时长 | 约1s | 8步合计 |
换晶振延时等比例变化:6MHz下每步约262ms。想改流水速度,直接改R6、R7的初值即可。
特别注意: 仿真跑起来灯不亮,先检查压缩包是否解压完整;Proteus用7.8或8.6版本;改了汇编源码要重新编译生成hex再跑仿真。
四、日期修改
资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。
五、资料下载
付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。
/

