📄 jiayongreshuiqi.txt
字号:
附系统具体汇编语言源程序:
ORG 0000H
JMP START
ORG 000BH ;定时器中断子程序入口
JMP TIME0
START: MOV SP,#60H ;初始化
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000) ;定时50ms
MOV TL0,#LOW(65536-50000)
SETB TR0
MOV IE,#82H
SETB P3.3 ;电源状态灯亮
CLR P3.2 ;加热状态灯灭
MOV R4,#06H
MOV R0,#30H
CLEAR: MOV @R0,#00H ;清温度显示缓冲区
INC R0
DJNZ R4,CLEAR
START0: MOVX @R0,A ;启动ADC
WAIT: MOV A,#0F0H ;判断有无键按下
MOV P2,A
MOV A,P2
XRL A,#0F0H
JZ NEXT0
ACALL KEYSCAN ;有键按下转键盘扫描子程序
NEXT0: JB P1.4,ADC ;无键按下等待ADC转换
JMP WAIT
ADC: MOVX A,@R0 ;读转换的温度数据
ACALL L1 ;十进制调整转换
MOV 21H,#10H
DISP1: MOV R1,#32H ;当前温度显示地址
ACALL DISP ;调显示子程序
DJNZ 21H,DISP1
JMP START0
L1: CLR C ;十进制调整转换子程序
MOV R5,#00H
MOV R4,#00H
MOV R3,#08H
NEXT: RLC A
MOV R2,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
MOV R4,A
MOV A,R2
DJNZ R3,NEXT
MOV R7,#02
L2: MOV A,R5
ADD A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,L2
MOV A,R5
ANL A,#0F0H
SWAP A
MOV 30H,A
MOV A,R4
ANL A,#0FH
MOV 31H,A
MOV A,R4
ANL A,#0F0H
SWAP A
MOV 32H,A
CLR A
RET
KEYSCAN: MOV R3,#0F7H ;键盘扫描处理子程序
MOV 23H,#00H ;23H为键码指针地址
S1: MOV A,R3
MOV P2,A
MOV A,P2
MOV R4,A
SETB C
MOV R5,#03H
S2: RLC A
JNC KEYIN
INC 23H
DJNZ R5,S2
MOV A,R3
SETB C
RRC A
MOV R3,A
JC S1
RET
KEYIN: MOV R7,#60H ;延时消抖
D2: MOV R6,#248
DJNZ R6,$
DJNZ R7,D2
D3: MOV A,P2
XRL A,R4
JZ D3
MOV A,23H
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;查表取键码
XRL A,#0AH ;是*号键否?
JZ TSET ;是则跳至温度设定模式
JMP START0
TSET: MOV R1,#35H ;设定温度显示地址
ACALL DISP ;显示设定温度
MOV A,#0F0H
MOV P2,A
MOV A,P2
XRL A,#0F0H ;有按键否?
JZ TSET
KEYSCAN2: MOV R3,#0F7H ;有则进入温度设定模式的键盘扫描
MOV 23H,#00H
SCAN1: MOV A,R3
MOV P2,A
MOV A,P2
MOV R4,A
SETB C
MOV R5,#03H
SCAN2: RLC A
JNC KEYIN1
INC 23H
DJNZ R5,SCAN2
MOV A,R3
SETB C
RRC A
MOV R3,A
JC SCAN1
RET
KEYIN1: MOV R7,#60H ;延时消抖
DL2: MOV R6,#248
DJNZ R6,$
DJNZ R7,DL2
DL3: MOV A,P2
XRL A,R4
JZ DL3
MOV A,23H
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;取键码
MOV 20H,A
XRL A,#0AH
JZ START0 ;是*号键,说明设定完成,回主程序
MOV A,20H
XRL A,#0BH
JZ TSET ;#号键没有定义
MOV A,20H ;不是“*”、“#”其余为数字键,键值存33H-35H
XCH A,33H
XCH A,34H
XCH A,35H
JMP TSET
DISP: MOV A,@R1 ;载入百位数
ADD A,#80H ;位选D3
MOV P1,A ;输出显示百位数
ACALL DELAY
DEC R1
MOV A,@R1
ADD A,#40H
MOV P1,A ;输出显示十位数
ACALL DELAY
DEC R1
MOV A,@R1
ADD A,#20H
MOV P1,A ;输出显示个位数
ACALL DELAY
RET
TIME0: PUSH ACC ;保护现场
PUSH PSW
MOV TH0,#HIGH(65536-50000) ;重设50ms计数值
MOV TL0,#LOW(65536-50000)
MOV A,35H ;比较测量的温度和设定的温度
CJNE A,32H,T
MOV A,34H
CJNE A,31H,T
MOV A,33H
CJNE A,30H,T
JMP OFF
T: JC OFF ;c=1测量温度大于设定温度,c=0则小于
CLR P3.1 ;测量温度<设定温度,开始加热
SETB P3.2 ;加热状态灯亮
JMP RETURN
OFF: SETB P3.1 ;测量温度>=设定温度,停止加热
CLR P3.2 ;加热状态灯灭
RETURN: POP PSW
POP ACC
RETI
DELAY: MOV R7,#06 ;延时子程序
D1: MOV R6,#248
DJNZ R6,$
DJNZ R7,D1
RET
TABLE: DB 01H,02H,03H ;键盘码 1 , 2 , 3
DB 04H,05H,06H ; 4 , 5 , 6
DB 07H,08H,09H ; 7 , 8 , 9
DB 0AH,00H,0BH ; * , 0 , #
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -