?? h26.asm
字號:
mode equ 082h
PORTA equ 08000h
CTL equ 08003h
OUTBIT equ 09002h
OUTSEG equ 09004h ; 段控制口
IN equ 09001h
LEDBuf equ 60h
ORG 0000H
ljmp Start
LEDMAP:
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
Delay:
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DisplayLED:
mov r0, #LEDBuf
mov r1, #6
mov r2, #00100000b
Loop:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a
mov a, @r0
mov dptr, #OUTSEG
movx @dptr, a
mov dptr, #OUTBIT
mov a, r2
movx @dptr, a
mov r6, #1
call Delay
mov a, r2
rr a
mov r2, a
inc r0
djnz r1, Loop
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a
ret
TestKey:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a
mov dptr, #IN
movx a, @dptr
cpl a
anl a, #0fh
ret
KeyTable:
db 16h, 15h, 14h, 0ffh
db 13h, 12h, 11h, 10h
db 0dh, 0ch, 0bh, 0ah
db 0eh, 03h, 06h, 09h
db 0fh, 02h, 05h, 08h
db 00h, 01h, 04h, 07h
GetKey:
mov dptr, #OUTBIT
mov P2, dph
mov r0, #Low(IN)
mov r1, #00100000b
mov r2, #6
KLoop:
mov a, r1
cpl a
movx @dptr, a
cpl a
rr a
mov r1, a
movx a, @r0
cpl a
anl a, #0fh
jnz Goon1
djnz r2, KLoop
mov r2, #0ffh
sjmp Exit
Goon1:
mov r1, a
mov a, r2
dec a
rl a
rl a
mov r2, a ; r2 = (r2-1)*4
mov a, r1
mov r1, #4
LoopC:
rrc a
jc Exit
inc r2
djnz r1, LoopC
Exit:
mov a, r2
mov dptr, #KeyTable
movc a, @a+dptr
mov r2, a
WaitRelease:
mov dptr, #OUTBIT
clr a
movx @dptr, a
mov r6, #10
call Delay
call TestKey
jnz WaitRelease
mov a, r2
ret
; ================================
UP equ 16h ; Next
DOWN equ 15h ; Last
LowLimit equ 10
HighLimit equ 30
LowTemp equ -40 ; A/D 0
HighTemp equ 50 ; A/D 255
ADPort equ 0a000h
Heat equ 1
Cool equ 2
SetTemp equ 50h
CurTemp equ 51h
DisplayResult:
mov a, CurTemp
jnb acc.7, GE0
mov LEDBuf, #40h ; '-'
dec a
cpl a
jmp Goon
GE0:
mov LEDBuf, #0 ; ' '
Goon:
mov b, #10
div ab
mov dptr, #LEDMAP
movc a, @a+dptr
mov LEDBuf+1, a
mov a, b
movc a, @a+dptr
mov LEDBuf+2, a
mov LEDBuf+3, #0 ; ' '
mov a, SetTemp
mov b, #10
div ab
movc a, @a+dptr
mov LEDBuf+4, a
mov a, b
movc a, @a+dptr
mov LEDBuf+5, a
ret
ReadAD:
mov dptr, #ADPort
clr a
movx @dptr, a ; start A/D
mov a, #0
djnz acc, $ ; delay
movx a, @dptr
ret
ReadTemp:
mov r1, #0
mov r2, #0
mov r0, #16
RLoop:
call ReadAD
add a, r2
mov r2, a
jnc GN1
inc r1
GN1:
djnz r0, RLoop
mov a, r2
swap a
anl a, #0fh
xch a, r1
swap a
anl a, #0f0h
orl a, r1 ; a = r1r2/16
mov b, #(HighTemp-LowTemp)
mul ab
mov a, b ; /256
add a, #LowTemp
mov CurTemp, a
ret
Start:
mov sp, #70h
mov a, #mode
mov dptr, #CTL
movx @dptr, a ; 設置8255工作方式,PA,PC輸出,PB輸入
mov SetTemp, #20
MLoop:
call TestKey
jnz KeyPressed
call DisplayResult
call DisplayLED
call ReadTemp
mov a, CurTemp
jb acc.7, LE0
clr c
mov b, SetTemp
dec b
dec b
subb a, b
jnc GN2
LE0:
mov a, #Heat
mov dptr, #PORTA
movx @dptr, a
sjmp GN4
GN2:
mov a, CurTemp
setb c
mov b, SetTemp
inc b
inc b
subb a, b
jc GN3
mov a, #Cool
mov dptr, #PORTA
movx @dptr, a
sjmp GN4
GN3:
mov a, #0
mov dptr, #PORTA
movx @dptr, a
GN4:
sjmp MLoop
KeyPressed:
call GetKey
mov b, a
xrl a, #DOWN
jnz Key0
mov a, SetTemp
xrl a, #LowLimit
jz Key1
dec SetTemp
sjmp Key1
Key0:
mov a, b
xrl a, #UP
jnz Key1
mov a, SetTemp
xrl a, #HighLimit
jz Key1
inc SetTemp
Key1:
sjmp MLoop
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -