|
求教:用數碼管動態顯示法,編匯編程序,使6位數碼管顯示從000000到FFFFFF,時間間隔1s,請大佬指點一下,或者幫忙修改一下下面的程序(次程序是顯示:000000-999999,辛苦修改成000000-FFFFFF)
這3張圖片是實驗書上的,第4張是我畫的Proteus原理圖(附件的程序是000000-999999顯示的參考程序),但是編譯好了之后用我的原理圖仿真后只顯示000000,有問題不知道什么原因,請指點謝謝!是不是我畫的原理圖哪里不對?原理圖如果對的話,把上面的000000-999999的程序hex寫進51單片機應該顯示000000-999999才對啊,請高手指點一下我的原理圖或者程序應該怎么改?(老師的要求是按照實驗書上的接法)謝謝!
下面是000000-999999的參考匯編程序
ORG 0000H
LJMP MAIN
ORG 0030H ;MAINN主程序
MAIN: MOV SP, #70H ;設置堆棧SP
MOV 30H, #00H ;設置計算區(30H-32H)的初值
MOV 31H, #00H
MOV 32H, #00H
SEND: LCALL GIVE ;計算區的值送至顯示緩沖區
MOV R7, #159 ;顯示時間初值
SHOW: LCALL DISP ;調用顯示子程序
DJNZ R7, SHOW ;顯示時間到?
LCALL ADD1 ;計算區的值加1
LJMP SEND
;GIVE 送數子程序
GIVE: MOV R0, #45H ;顯示緩沖區末址
MOV R1, #32H ;計算區末址
MOV R2, #03H
GETBIT: MOV A, @R1 ;計算區的值送顯示緩沖區
ANL A, #0FH
MOV @R0, A
DEC R0
MOV A, @R1
ANL A, #0F0H
SWAP A
MOV @R0, A
DEC R0
DEC R1
DJNZ R2, GETBIT ;送數送完了嗎?
RET
;ADD1: 加1子程序
ADD1: MOV R1, #32H ;計算區末址
MOV R2, #03H
SETB C
BCD1: CLR A
ADDC A, @R1
DA A ;調整相加結果為十進制
MOV @R1, A ;保存結果
DEC R1 ;地址指針減1
DJNZ R2, BCD1
RET
;DISP顯示子程序
DISP: MOV R0, #40H ;顯示緩沖區首址
MOV R2, #20H ;初始位碼
MOV R3, #06H
CLOSE: CLR A ;關顯示
MOV DPTR, #8002H
MOVX @DPTR, A
MOV A, @R0 ;查表得段碼
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV DPTR, #8004H ;送段碼
MOVX @DPTR, A
MOV DPTR, #8002H ;送位碼
MOV A, R2
MOVX @DPTR, A
LCALL DELAY ;延時1毫秒
INC R0 ;顯示緩沖區地址指針加1
RR A ;位碼右移
MOV R2, A
DJNZ R3, CLOSE ;6位數碼管顯示完了嗎?
RET
;DELAY 延時子程序 晶體震蕩頻率為12MHz時,延時約1毫秒
DELAY: MOV R4, #5
DELAY1: MOV R5, #100
DJNZ R5, $
DJNZ R4, DELAY1
RET
;TABLE 段碼表對應0-F的段碼
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
|
|