📄 th23_温度过程控制.asm
字号:
;温度过程控制
PORTA equ 0FEF3H
LEDBuf equ 30H
TEMP EQU 40H
DIN BIT P3.4
CLK BIT P3.5
UP equ 1 ; Next
DOWN equ 2 ; Last
LowLimit equ 0
HighLimit equ 50
LowTemp equ -50 ; A/D 0
HighTemp equ 150 ; A/D 255
SetTemp equ 50h
CurTemp equ 60h
ORG 0000H
ljmp Start
ORG 0030H
Start: mov SetTemp, #20
MLoop: LCALL TestKey
jnz KeyPressed
LCALL DisplayResult
LCALL DisplayLED
LCALL 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.2
Ljmp GN4
GN2: mov a, CurTemp
setb c
mov b, SetTemp
inc b
inc b
subb a, b
jc GN4
CLR P3.2
Ljmp GN4
GN4: LCALL DELAY1
Ljmp MLoop
KeyPressed:
LCALL 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:
Ljmp MLoop
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, , -
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 DIN,C
CLR CLK
SETB CLK
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
;==================================================
TestKey:MOV P1, #0FH
MOV A, P1 ; 读入键状态
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: ; 延时子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, Delay
ret
DELAY1:MOV R4,#0FFH
AA1: MOV R5,#0FFH
AA: NOP
NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
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 ; 读入结果
ret
ReadTemp:
CALL ReadAD
mov b, #200
mul ab
mov a, b
add a, #LowTemp
mov CurTemp, a
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -