?? wenduchuanganqi.asm
字號:
ADPort equ 09000h ; AD采樣輸入片選
OUTBIT equ 08002h ; 位控制口
OUTSEG equ 08004h ; 段控制口
IN_KEY equ 08001h ; 鍵盤讀入口
LowTemp equ -99 ; A/D 0
HighTemp equ 99 ; A/D 255
data segment
LEDBuf db 6 dup(?) ; 顯示緩沖
CurTemp db 0 ; 當前溫度
LEDMAP: ; 八段管顯示碼
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
data ends
code segment
assume cs:code, ds:data
Delay proc near
push ax ; 延時子程序
push cx
mov al, 0
mov cx,ax
loop $
pop cx
pop ax
ret
Delay endp
DisplayLED proc near
mov bx, offset LEDBuf
mov cl, 6 ; 共6個八段管
mov ah, 00100000b ; 從左邊開始顯示
DLoop:
mov dx, OUTBIT
mov al, 0
out dx,al ; 關所有八段管
mov al, [bx]
mov dx, OUTSEG
out dx,al
mov dx, OUTBIT
mov al, ah
out dx, al ; 顯示一位八段管
push ax
mov ah, 1
call Delay
pop ax
shr ah, 1
inc bx
dec cl
jnz DLoop
mov dx, OUTBIT
mov al, 0
out dx,al ; 關所有八段管
ret
DisplayLED endp
; ===================================
DisplayResult proc near
mov al, CurTemp
test al, 80h
jz GE0
mov LEDBuf, 40h ; '-'
dec al
not al
jmp Goon
GE0:
mov LEDBuf, 0 ; ' '
Goon:
mov cl, 10
mov ah, 0
div cl
mov bl, al
mov bh, 0
add bx, offset LEDMAP
mov al, [bx]
mov LEDBuf+1, al
mov bl, ah
mov bh, 0
add bx, offset LEDMAP
mov al, [bx]
mov LEDBuf+2, al
mov LEDBuf+3, 0 ; ' '
ret
DisplayResult endp
ReadAD proc near
mov dx, ADPort
mov al, 0
out dx, al
mov al, 60
rr:
dec al ; delay
jnz rr
mov dx, ADPort
in al, dx
mov dl, al
mov al, 0ffh
sub al, dl
ret
ReadAD endp
ReadTemp proc near
mov bx, 0
mov cl, 16
RLoop:
call ReadAD
mov ah, 0
add bx, ax
dec cl
jnz RLoop
shr bx, 4
mov ax, bx
mov cl, HighTemp - LowTemp
mul cl
mov al, ah ; /256
add al, LowTemp
mov CurTemp, al
ret
ReadTemp endp
Start proc near
mov ax, data
mov ds, ax
MLoop:
call DisplayResult
call DisplayLED
call ReadTemp
jmp MLoop
start endp
code ends
end start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -