简介:
详细介绍如何使用51汇编的Proteus仿真去实现LED流水灯。此教程只做操作过程,不具体解释每一步具体含义,以极简的方式,通过操作让你实现相关功能
前提条件:
①新建好相关的仿真工程,绘制好相关原理图
②学会了点亮LED
如果不具备以上条件,可以往回看相关教程
1、原理图如下,通过程序控制P0口,让LED间隔一定时间,按照顺序逐个点亮,从而实现流水灯效果。
2、流水灯子程序
;====================================================================
; LED流水灯子程序
; 名称:LEDRUN
; 输入:空
; 输出:空
; 功能: 控制LED像流水一样滚动逐个点亮
;====================================================================
LEDRUN:
MOV LED ,#01H ; 点亮第一颗LED
MOV R0 ,#8 ; LED为8位,设置循环次数位8
LEDRUN1:
MOV A ,LED ; 将LED的值赋给A
LCALL DELAY ; 调用延时子程序,实现延时
RL A ; 将A中的值,循环左移一位
MOV LED ,A ; 从新将A的值赋给LED,实现点亮下一颗lLED
DJNZ R0 ,LEDRUN1 ; 将R0中的值减1,并跳转到LEDRUN1。当减到零退出,。(R0为8,即循环8次后退出)
RET
3、具体效果展示
4、整体个程序
;====================================================================
; 文件名称:main.asm
; 文件描述:汇编基本程序教程:LED流水灯
; 创建人:lsh
; 创建日期: 2022.8.21
; 程序版本:1.0
; 完成日期:2022.8.21
;=修改记录=============
; 修改人:
; 修改内容:
; 修改时间:
;====================================================================
$NOMOD51
$INCLUDE (80C52.MCU)
; IO引脚定义
;====================================================================
LED EQU P0 ; 定义P0口为LED
;====================================================================
;====================================================================
org 0000h
jmp Start ; 跳转到程序开始入口
;====================================================================
; 主程序
;====================================================================
org 0100h
Start:
;====================================================================
; 主程序的主循环
;====================================================================
Loop: ; 程序主循环
LCALL LEDRUN ; 调用LED流水灯子程序
AJMP Loop ; 跳转到程序主循环开头
;====================================================================
;子程序
;====================================================================
; 延时子程序
; 名称:DELAY
; 输入:空
; 输出:空
; 功能:占用cpu,实现延时一段时间
;====================================================================
DELAY:
MOV R0,#228
DELAY1:
MOV R1,#20
DELAY2:
MOV R2,#20
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
;====================================================================
;====================================================================
; LED流水灯子程序
; 名称:LEDRUN
; 输入:空
; 输出:空
; 功能: 控制LED像流水一样滚动逐个点亮
;====================================================================
LEDRUN:
MOV LED ,#01H ; 点亮第一颗LED
MOV R0 ,#8 ; LED为8位,设置循环次数位8
LEDRUN1:
MOV A ,LED ; 将LED的值赋给A
LCALL DELAY ; 调用延时子程序,实现延时
RL A ; 将A中的值,循环左移一位
MOV LED ,A ; 从新将A的值赋给LED,实现点亮下一颗lLED
DJNZ R0 ,LEDRUN1 ; 将R0中的值减1,并跳转到LEDRUN1。当减到零退出,。(R0为8,即循环8次后退出)
RET
;====================================================================
END ; 程序结束
;====================================================================