2006年12月31日 星期日

電子記分板程式

我研究一整晚的程式
也不知道會錯多少
唉....持續努力中

HeScore .reg P3.0
MeScore .reg P3.1
Me .equ 31h
He .equ 32h
ScanCounter .equ 34h
ScanCode .equ 35h
DisplayBuffer .equ 36h

org 0
jmp Reset
Reset: mov sp,#5fh
stort: mov ScanCounter,#0
mov ScanCode,#11111110b
mov me,#00h
mov he,#00h

CheckHeScore:
jb HeScore,CheckMeScore
mov a,He
add a,#1
da a
mov He,a
jnb HeScore,$

CheckMeScore:
jb MeScore,CheckHeScore
mov a,Me
add a,#1
da a
mov Me,a
jnb MeScore,$
call ScoreDisplayBuffer
call ScanDisplay
call AccessDisplayCode

;-----------顯示副程式--------

ScanDisplay:
mov r0,#ScanCounter
mov a,@ro
add a,#DisplayBuffer
mov r1,a
mov a,ScanCode
anl a,#0fh
swap a
orl a,@r1
mov p0,a
mov a,ScanCode
rl a
mov ScanCode,a
mov r0.#ScoanCounter
inc @r0
cjne @r0,#4,NotOver
mov @r0,#0
mov ScanCode,#11111110b
NotOver:
ret

;-----------顯示緩衝器調整--------
ScoreDisplayBuffer:
mov r0,#DisplayBuffer
mov a,He
anl a,#0fh
mov @r0,a
inc r0
mov a,He
anl a,#0f0h
swap a
mov @r0,a
inc r0
mov a,Me
anl a,#0fh
mov @r0,a
inc r0
mov a,Me
anl a,#0f0h
swap a
mov @r0,a
inc r0
ret
;-----------取碼副程式---------

AssessDisplayCode:
mov dptr,#DisplayCodeTable
movc a,@a+dptr
ret

DisplayCodeTable:
db 0c0h
db 0f9h
db 0a4h
db 0b0h
db 99h
db 92h
db 82h
db 0f8h
db 80h
db 90h
db 88h
db 83h
db 0a7h
db 0a1h
db 86h
db 8eh
ret
.END

沒有留言: