?? 溫度控制.asm
字號(hào):
;溫度過程控制
PORTA equ 0FEF3H
LEDBuf equ 30H
TEMP EQU 40H
DIN BIT 0B0H
CLK BIT 0B1H
ORG 0000H
ljmp Start
LEDMAP: DB 3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5
DB 7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,B
DB 58H,5EH,7BH,71H,0,40H ;C,D,E,F(xiàn), , -
DB 63H,39H
;##############################
DisplayLED: ;-----------顯示子程序---------------
MOV R0,#LEDBUF
MOV R1,#TEMP
MOV R2,#5
DP10: MOV DPTR,#LEDMAP
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,DP10
MOV R0,#TEMP
MOV R1,#5
DP12: MOV R2,#8
MOV A,@R0
DP13: RLC A
MOV 0B0H,C
CLR 0B1H
SETB 0B1H
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
;==================================================
TestKey:MOV P1, #0FH
MOV A, P1 ; 讀入鍵狀態(tài)
cpl a
anl a, #0fh ; 高四位不用
ret
KeyTable:DB 0EEH,0DEH,0BEH,07EH
DB 0EDH,0DDH,0BDH,07DH
DB 0EBH,0DBH,0BBH,07BH
DB 0EFH,0D7H,0B7H,077H ; 鍵碼定義
GetKey: MOV R6,#10
ACALL DELAY
MOV P1, #0FH
MOV A, P1
CJNE A, #0FH, K12
LJMP MLOOP
K12: MOV B,A
MOV P1, #0EFH ;
MOV A, P1
CJNE A, #0EFH,K13 ;
MOV P1, #0DFH
MOV A, P1
CJNE A, #0DFH,K13 ;
MOV P1, #0BFH
MOV A, P1
CJNE A, #0BFH,K13;
MOV P1, #7FH
MOV A, P1
CJNE A, #7FH, K13;
LJMP MLOOP
K13: ANL A, #0F0H;
ORL A, B
MOV B, A
MOV R1, #16
MOV R2, #0
MOV DPTR,#KEYTABLE
K14: MOV A, R2
MOVC A, @A+DPTR
CJNE A, B, K16
MOV P1, #0FH;
K15: MOV A, P1
CJNE A, #0FH, K15;
MOV R6, #10
ACALL DELAY
MOV A, R2
MOV LEDBUF, A
RET
K16: INC R2 ;
DJNZ R1, K14
LJMP MLOOP
Delay: ; 延時(shí)子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DELAY1:MOV R4,#0FFH
AA1: MOV R5,#0FFH
AA: NOP
NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
; ================================
UP equ 1 ; Next
DOWN equ 2 ; Last
LowLimit equ 10
HighLimit equ 30
LowTemp equ -50 ; A/D 0
HighTemp equ 150 ; A/D 255
SetTemp equ 50h
CurTemp equ 51h
DisplayResult:;===================
mov a, CurTemp
jnb acc.7, GE0
mov LEDBuf, #11h ; '-'
dec a
cpl a
Ljmp Goon
GE0:
mov LEDBuf, #10H ; ' '
Goon:
mov b, #10
div ab
mov LEDBuf+1, a
mov a, b
mov LEDBuf+2, a
mov a, SetTemp
mov b, #10
div ab
mov LEDBuf+3,A
mov a, b
mov LEDBuf+4,A
ret
;==============
ReadAD:
mov dptr, #PortA
clr a
movx @dptr, a ; start A/D
WAIT: JNB P3.3,WAIT
MOVX A,@DPTR ; 讀入結(jié)果
ret
ReadTemp:
ACALL ReadAD
mov b, #200 ;(HighTemp-LowTemp)
mul ab
mov a, b ; /256
add a, #LowTemp
mov CurTemp, a
ret
;%%%%%%%%%%%%%%%%%%%%%%%%%*******************************************
Start: mov SetTemp, #20
MLoop: ACALL TestKey
jnz KeyPressed
ACALL DisplayResult
ACALL DisplayLED
ACALL ReadTemp
mov a, CurTemp
jb acc.7, LE0
clr c
mov b, SetTemp
dec b
dec b
subb a, b
jnc GN2
LE0: setb p3.4
sjmp GN4
GN2: mov a, CurTemp
setb c
mov b, SetTemp
inc b
inc b
subb a, b
jc GN4
CLR P3.4
sjmp GN4
GN4: ACALL DELAY1
sjmp MLoop
KeyPressed:
ACALL 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -