51汇编Proteus仿真教程——5.编写LED流水灯汇编程序

简介:

详细介绍如何使用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          ;   程序结束

;====================================================================

点赞、收藏加关注,下期不迷路!

一起学起来,让我们成为更优秀的自己!我们下期不见不散!

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值