51匯編Proteus仿真教程——5.編寫LED流水燈匯編程序
詳細(xì)介紹如何使用51匯編的Proteus仿真去實(shí)現(xiàn)LED流水燈。此教程只做操作過程,不具體解釋每一步具體含義,以極簡的方式,通過操作讓你實(shí)現(xiàn)相關(guān)功能。
前提條件:
①新建好相關(guān)的仿真工程,繪制好相關(guān)原理圖
②學(xué)會了點(diǎn)亮LED
如果不具備以上條件,可以往回看相關(guān)教程
1、原理圖如下,通過程序控制P0口,讓LED間隔一定時(shí)間,按照順序逐個(gè)點(diǎn)亮,從而實(shí)現(xiàn)流水燈效果。

2、流水燈子程序
;====================================================================
; LED流水燈子程序
; 名稱:LEDRUN
; 輸入:空
; 輸出:空
; 功能: ?控制LED像流水一樣滾動逐個(gè)點(diǎn)亮
;====================================================================
LEDRUN:
MOV ?LED ,#01H ? ; 點(diǎn)亮第一顆LED
MOV ?R0 ,#8 ? ?; LED為8位,設(shè)置循環(huán)次數(shù)位8
LEDRUN1:
MOV ?A ?,LED ? ?; 將LED的值賦給A
LCALL DELAY ? ? ; 調(diào)用延時(shí)子程序,實(shí)現(xiàn)延時(shí)
RL ?A ? ? ? ; 將A中的值,循環(huán)左移一位
MOV ?LED ,A ? ? ; 從新將A的值賦給LED,實(shí)現(xiàn)點(diǎn)亮下一顆lLED
DJNZ R0 ,LEDRUN1 ; 將R0中的值減1,并跳轉(zhuǎn)到LEDRUN1。當(dāng)減到零退出,。(R0為8,即循環(huán)8次后退出)
RET
3、具體效果展示
?

4、整體個(gè)程序
;====================================================================
; 文件名稱:main.asm
; 文件描述:匯編基本程序教程:LED流水燈
; 創(chuàng)建人:lsh ?
; 創(chuàng)建日期: 2022.8.21
; 程序版本:1.0
; 完成日期:2022.8.21
;=========================修改記錄=====================================
; 修改人:
; 修改內(nèi)容:
; 修改時(shí)間:
;====================================================================
?
$NOMOD51
$INCLUDE (80C52.MCU)
; IO引腳定義
;====================================================================
LED ?EQU ?P0 ? ? ?; 定義P0口為LED
;====================================================================
;====================================================================
??????org ??0000h
??????jmp ??Start ? ? ? ?; 跳轉(zhuǎn)到程序開始入口
?
;====================================================================
; 主程序
;====================================================================
??????org ??0100h
Start:
;====================================================================
; 主程序的主循環(huán)
;====================================================================
Loop: ? ? ? ? ? ; ?程序主循環(huán)
LCALL LEDRUN ? ? ?; ??調(diào)用LED流水燈子程序
????AJMP ?Loop ? ? ? ?; ?跳轉(zhuǎn)到程序主循環(huán)開頭
?
;====================================================================
;子程序
;====================================================================
; 延時(shí)子程序
; 名稱:DELAY
; 輸入:空
; 輸出:空
; 功能:占用cpu,實(shí)現(xiàn)延時(shí)一段時(shí)間
;====================================================================
DELAY:
MOV ?R0,#228
DELAY1:
MOV ?R1,#20
DELAY2:
MOV ?R2,#20
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
;====================================================================
?
;====================================================================
; LED流水燈子程序
; 名稱:LEDRUN
; 輸入:空
; 輸出:空
; 功能: ?控制LED像流水一樣滾動逐個(gè)點(diǎn)亮
;====================================================================
LEDRUN:
MOV ?LED ,#01H ? ; 點(diǎn)亮第一顆LED
MOV ?R0 ,#8 ? ?; LED為8位,設(shè)置循環(huán)次數(shù)位8
LEDRUN1:
MOV ?A ?,LED ? ?; 將LED的值賦給A
LCALL DELAY ? ? ; 調(diào)用延時(shí)子程序,實(shí)現(xiàn)延時(shí)
RL ?A ? ? ? ; 將A中的值,循環(huán)左移一位
MOV ?LED ,A ? ? ; 從新將A的值賦給LED,實(shí)現(xiàn)點(diǎn)亮下一顆lLED
DJNZ R0 ,LEDRUN1 ; 將R0中的值減1,并跳轉(zhuǎn)到LEDRUN1。當(dāng)減到零退出,。(R0為8,即循環(huán)8次后退出)
RET
;====================================================================
??????END ? ? ? ? ?; ??程序結(jié)束
;====================================================================
?
點(diǎn)贊、收藏加關(guān)注,下期不迷路!
?
一起學(xué)起來,讓我們成為更優(yōu)秀的自己!我們下期不見不散!