標題:
用學習板上數(shù)碼管顯示8051
[打印本頁]
作者:
雪中梅花
時間:
2014-10-20 14:14
標題:
用學習板上數(shù)碼管顯示8051
我是初學單片機的學員只懂匯編語言編的程序是否合理請各位老師指正,使用的學習板是在論壇買的。
ORG 0000H ;晶振6,數(shù)碼顯示8051右移程序
AJMP START
START: MOV SP,#60H
MOV R0,#250
aaa1: MOV R1,#250 ;上電延時
DJNZ R1,$
DJNZ R0,aaa1
KKK: CLR P1.4
MOV R2,#0FFH ;循環(huán)次數(shù)
KK: MOV A,#7FH ;數(shù)碼顯示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111110B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;數(shù)碼顯示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111101B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;數(shù)碼顯示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;數(shù)碼顯示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK
MOV R3,#1
DEC R3
CJNE R3,#0H,KK
KK1: MOV A,#7FH ;數(shù)碼顯示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111101B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;數(shù)碼顯示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;數(shù)碼顯示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;數(shù)碼顯示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK1
MOV R3,#1
DEC R3
CJNE R3,#0H,KK1
KK2: MOV A,#7FH ;數(shù)碼顯示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;數(shù)碼顯示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;數(shù)碼顯示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;數(shù)碼顯示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK2
MOV R3,#1
DEC R3
CJNE R3,#0H,KK2
KK3: MOV A,#7FH ;數(shù)碼顯示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;數(shù)碼顯示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;數(shù)碼顯示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;數(shù)碼顯示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#10111111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK3
MOV R3,#1
DEC R3
CJNE R3,#0H,KK3
KK4: MOV A,#7FH ;數(shù)碼顯示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;數(shù)碼顯示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;數(shù)碼顯示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#10111111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;數(shù)碼顯示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#01111111B ;數(shù)碼顯示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK4
MOV R3,#1
DEC R3
CJNE R3,#0H,KK4
MOV P0,#11111111B ;數(shù)碼顯示關閉
SETB P2.7
CLR P2.7
LCALL DELAY
LCALL DELAY
LCALL DELAY
LJMP KKK
DELAY: MOV R0,#0A5H ;100毫秒延時子程序
DL0: MOV R1,#96H
DJNZ R1,$
DJNZ R0, DL0
RET
DELAY1: MOV R0,#31H ;500微秒延時子程序
DL1: MOV R1,#01H
DJNZ R1,$
DJNZ R0,DL1
RET
END
作者:
a119
時間:
2014-10-20 21:17
這個程序能成功實現(xiàn)左移動嗎?
作者:
雪中梅花
時間:
2014-10-21 08:14
謝謝老師的回復,這個程序我在學習板上試驗正常但是循環(huán)右移請老師指點。
作者:
明白
時間:
2014-10-21 09:20
程序屬于機器操作,其實可以采用算法進行循環(huán)
作者:
明白
時間:
2014-10-21 12:45
采用循環(huán)程序就短很多了,程式就下面
LP1:循環(huán)顯示8位數(shù)碼管、
LP2:右移所到之處,重復循環(huán)顯示多遍
LP3:右移4個位置
沒有電路板調試,自己調整吧
ORG 0000H ;晶振6,數(shù)碼顯示8051右移程序
AJMP START
START: MOV SP,#60H
MOV R6,#250
aaa1: MOV R7,#250 ;上電延時
DJNZ R7,$
DJNZ R6,aaa1
KKK: CLR P1.4
MOV R5,#0 ;數(shù)碼管右移4次
LP3: MOV R2,#250 ;每一個花樣顯示遍數(shù)
LP2: MOV DPTR,#TAB
MOV R3,#8 ;顯示8位數(shù)碼管
MOV R4,#01111111B ;開始數(shù)碼顯示的位置
LP1: MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
CLR P2.6
MOV P0,R4 ;數(shù)碼顯示位置
SETB P2.7
CLR P2.7
LCALL DELAY1
INC DPTR ;指向表格中的下一個數(shù)值
MOV A,R4 ;指向下一個數(shù)碼顯示的位置
RR A ;指向下一個數(shù)碼顯示的位置
MOV R4,A ;指向下一個數(shù)碼顯示的位置
DJNZ R3,LP1 ;8位都顯示了嗎?
DJNZ R2,LP2 ;遍數(shù)顯示完成了嗎
INC R5
CJNE R5,#4,LP3
MOV P0,#11111111B ;數(shù)碼顯示關閉
SETB P2.7
CLR P2.7
LCALL DELAY
LCALL DELAY
LCALL DELAY
LJMP KKK
TAB: DB 0, 0, 0, 0, 06H, 6DH, 3FH, 7FH, 0, 0, 0, 0
; 熄 熄 熄 熄 1 5 0 8 熄 熄 熄 熄
DELAY: MOV R6,#0A5H ;100毫秒延時子程序
DL0: MOV R7,#96H
DJNZ R7,$
DJNZ R6, DL0
RET
DELAY1: MOV R6,#31H ;500微秒延時子程序
DL1: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DL1
RET
END
作者:
雪中梅花
時間:
2014-10-21 15:09
感謝老師的指點學習了今后有不明白的問題在向您請教。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1