?? ctrlleds.asm
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;實例五:流水控制燈 controllable LEDs (《51單片機應用從零開始》 4.2小節實例)
;
;現象:P1口上的發光二極管發光,當按下按鍵S6或S7時,發光二極管向左或向右流動
;
;作者:楊欣,劉長煥,張延強 電路飛翔網 eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H
START: ;這部分是系統的初始化部分
MOV A,#0FFH ; 累加器ACC中8位全置1(FFH),發光二極管全熄滅
CLR C ; 進位CY被清0,CY=0
MOV R1,#8 ; R1=8,循環8次(左/右移8次)
MOV P1,#00H ; 8支發光二極管全亮
MOV P2, A ; P2作輸入口,先將其各位置1(參考3.1小節)
WAIT_A: ;這是循環等待按鈕A按下的程序
JB P2.4,WAIT_B ;如果按鈕S7沒有按下,查詢按鈕S6有沒有按下
JMP LEFT ;如果按下按鈕S7,就執行向左流動的程序
WAIT_B: ;這是循環等待按鈕B按下的程序
JB P2.5,WAIT_A ;如果按鈕S6沒有按下,返回繼續查詢按鈕S7有沒有按下
JMP RIGHT ;如果按下按鈕S6,就執行向右流動程序
LEFT: ;這是流水燈向左流動的程序
RLC A ;把進位CY=0在累加器ACC中從右向左移一位,對照矩陣理解
MOV P1,A ;輸出至P1口
CALL DELAY ;調延時子程序,延時200ms
DJNZ R1,LEFT ;R1減1,如果不為0跳回LEFT繼續左移,否則執行下一行
JMP START ;向左流動完成后,跳回初始狀態,全亮,并等待按下按鈕
RIGHT: ;這是流水燈向右流動的程序
RRC A ;把進位CY=0在累加器ACC中從左向右移一位
MOV P1,A ;輸出至P1口
CALL DELAY ;調延時子程序,延時200ms
DJNZ R1,RIGHT ;是否右移了8次,如果不是則跳回RIGHT繼續右移
JMP START ;向右流動完成后,跳回初始狀態,全亮,并等待按下按鈕
DELAY: ;延時200ms的子程序
MOV R3,#20
D1:
MOV R4,#20
D2:
MOV R5,#248
DJNZ R5,$ ;R5減1,如果不為0,就執行本行
DJNZ R4,D2
DJNZ R3,D1
RET ;子程序結束標志,返回主程序
END ;程序結束點
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -