?? 17動態數碼管掃描a.asm
字號:
;本程序的任務是要讓8個數管能分別顯示不同的數字,以前的例子中,更改P1口聽數據,8個數碼管會同時變成另一數字,本程序需要觀看LED顯示,請將CZ2和P1口用排線連接起來
;本程序先在30-37h放入0-7,在數碼管中顯示出來
;根據電路原理圖可知,本實驗板是用一只74HC164擴展IO來控制8個數碼管點亮,這種方法又經濟,又方便,
org 00h
mov dptr,#ledtab
mov r1,#0
mov 30h,#0
mov 31h,#1
mov 32h,#2
mov 33h,#3
mov 34h,#4
mov 35h,#5
mov 36h,#6
mov 37h,#7 ;先將要顯示的數放入寄存器內,以后做產品時,你要顯示什么數就由你的程序自動計算自動放進這里
main:
;LED動態掃描程序顯示開始,說明有8只LED數碼管,就需要分別顯示8只數碼管,r7表示是輪到顯示第幾只
inc r7
disp0:cjne r7,#8,disp1
mov r7,#0
disp1:cjne r7,#0,disp2
mov 38h,#10000000b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,30h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp2:cjne r7,#1,disp3
mov 38h,#01000000b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,31h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp3:cjne r7,#2,disp4
mov 38h,#00100000b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,32h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp4:cjne r7,#3,disp5
mov 38h,#00010000b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,33h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp5:cjne r7,#4,disp6
mov 38h,#00001000b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,34h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp6:cjne r7,#5,disp7
mov 38h,#00000100b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,35h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp7:cjne r7,#6,disp8
mov 38h,#00000010b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,36h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp8:cjne r7,#7,disp9
mov 38h,#00000001b ;將要顯的那只數碼管的共陽極數據,通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov 39h,37h ;將要顯示的數碼管的筆畫數據
call ddpp ;調用顯示子程序,對上面的數碼管數據顯示
disp9:
jmp main
ddpp: mov a,38h ;通過串行口向74HC164發送數據,只讓一個數碼管的陽極有電,即只點亮一只數碼管
mov p1,#0ffh ;向74HC164送數據前要先熄滅LED數碼管顯示,否則,會出"鬼影",因為要確保每一位管對應每一位管的數據
mov sbuf,a
nop
nop
nop
nop
mov a,39h ;累加器讀入要顯示的第一個數
movc a,@a+dptr ;這是唯一的查表指令,作用就是讀出DPTR中的表名中的第幾個數的數據.
cpl a ;可以顯示陰文或者陽文,ledtab是順序存放的0123456789abcdef的LED筆畫關系,根據數碼管的共陰或者共陽,有時高電平是點亮,有時低電平是點亮.
mov p1,a ;放到P1口,顯示出字符
ret
ledtab: db 11101101b,00000101b,11100011b,01100111b,00001111b,01101110b,11101110b,00100101b,11101111b,01101111b,10101111b,11001110b,11101000b,11000111b,11101010b,10101010b
end
;最后告訴大家:這個程序功能是非常正確的,這個程序比起上一個程序來說,短多了,又好讀又好理解,又好維護
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -