1、液晶显示温度控制器功能说明:本装置的功能是对温度进行实时监测与控制。由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。如实时温度超过设定的上、下限值,一方面由LCD显示信息,并发出警报声;另一方面自动控制继电器(Relay)开接通或断开,从而控制加热源的开与断,达到对温度进行实时控制的目的。;程序清单:; TEMP_ZH EQU 24H ;实时温度值存放单元 TEMPL EQU 25H ;低温度值存放单元 TEMPH EQU 26H ;高温度值存放单元 TEMP_TH EQU 27H ;高温报警值存放单元 TEMP
2、_TL EQU 28H ;低温报警值存放单元 TEMPHC EQU 29H ;存十位数 BCD码 TEMPLC EQU 2AH ;存个位数 BCD码;- K1 EQU P2.1 K2 EQU P2.2 K3 EQU P2.3 K4 EQU P2.4;- SPK EQU P3.4 RELAY EQU P2.0 X EQU 2FH ;LCD 地址变量;- RS EQU P3.5 RW EQU P3.6 E EQU P3.7;- FLAG EQU 20H.0 ;DS18B20是否存在标记 KEY_UD EQU 20H.1 ;设定 KEY 的UP与DOWN 标记 DQ EQU P2.5;= 主程序 =
3、MAIN: ACALL SET_LCD ;LCD初始化设置子程序 ACALL WR_THL ;将报警上下线写入暂存寄存器TOOP: ACALL RESET_1820 ;18B20复位子程序 JNB FLAG,TOOP1 ;DS1820不存在 ACALL MEU_OK ;显示OK菜单 ACALL RE_THL ;把EEROM里温度报警值拷贝回暂存器 ACALL TEMP_BJ ;显示温度标记C JMP TOOP2TOOP1: ACALL MEU_ERROR ;显示ERROR菜单 ACALL TEMP_BJ ;显示温度标记 JMP $;-TOOP2: ACALL RE_TEMP ACALL SET
4、_DATA ACALL TEMP_COMP ;实际温度值与标记温度值比较子程序 ACALL P_KEY ;键扫描子程序 SJMP TOOP2; 读取温度数据子程序 RE_TEMP: ACALL RESET_1820 ;18B20复位子程序 JNB FLAG,TOOP1 ;DS1820不存在 MOV A,#0CCH ;跳过ROM匹配 ACALL WRITE_1820 ;写入子程序 MOV A,#44H ;发出温度转换命令 ACALL WRITE_1820 ;调写入子程序 ACALL RESET_1820 ;调复位子程序 MOV A,#0CCH ;跳过ROM匹配 ACALL WRITE_1820
5、;写入子程序 MOV A,#0BEH ;发出读温度命令 ACALL WRITE_1820 ;写入子程序 ACALL READ_1820 ;调用读入子程序 RET; 温度数据处理显示子程序 SET_DATA: ACALL CONV_TEMP ;处理温度 BCD 码子程序 ACALL DISP_BCD ;显示区 BCD 码温度值刷新子程序 ACALL CONV ;数据转换子程序 RET; 按键键扫描子程序 P_KEY: ;按键K1处理 JB K1,PK1 ; K1键未按,转到PK1处 ACALL SPK_BZ ;K1键按下,一声鸣响 JNB K1,$ ;等按键放开 MOV DPTR,#M_ALAX
6、1 ;存M_ALAX1表 MOV A,#1 ACALL LCD_PRINT ;显示字符 ACALL LOOK_ALARM ;显示信息区 JB K3,$ ;等待K3按下 ACALL SPK_BZ ;一声鸣响 JMP PK2 ;转到标号 PK2处 PK1: ; 按键K2处理 JB K2,PK3 ;K2键未按,转到PK3处 ACALL SPK_BZ ;K2键按下,一声鸣响 JNB K2,$ ;等按键放开 MOV DPTR,#TA1 ;存#TA1表 MOV A,#1 ACALL LCD_PRINT ;显示字符 ACALL SET_ALARM ;设定报警值 TH、TL ACALL WR_THL ;将设定
7、的TH,TL值写入DS18B20内 ACALL WRITE_E2 ;PK2: ACALL MEU_OK ;显示OK菜单 ACALL TEMP_BJ ;显示温度标记 PK3: RET;-TA1: DB RESET ALERT CODE;-; 设定报警值 TH、TL子程序 ;设定报警值 TH、TLSET_ALARM: ACALL LOOK_ALARMA0: JB K1,A2 ACALL SPK_BZ JNB K1,$ CPL 20H.1 ;UP/DOWN 标记A2: JB 20H.1,A3 ;20H.1=1,UP JMP A8 ;20H.1=0,DOWNA3: JB K2,A5 ;TH值调整(增加
8、) ACALL SPK_BZ INC TEMP_TH MOV A,TEMP_TH CJNE A,#120,A4 MOV TEMP_TH,#0A4: ACALL LOOK_ALARM MOV R5,#10 ACALL DELAY JMP A3A5: JB K3,A7 ;TL值调整(增加) ACALL SPK_BZ INC TEMP_TL MOV A,TEMP_TL CJNE A,#99,A6 MOV TEMP_TL,#00HA6: ACALL LOOK_ALARM ; MOV R5,#10 ACALL DELAY JMP A5A7: JB K4,A0 ;确定调整 OK ACALL SPK_BZ
9、JNB K4,$ RETA8: JB K2,A10 ;TH值调整 (减少) ACALL SPK_BZ DEC TEMP_TH MOV A,TEMP_TH CJNE A,#0FFH,A9 JMP A12A9: ACALL LOOK_ALARM MOV R5,#10 ACALL DELAY JMP A0A10: JB K3,A13 ;TL值调整(减少) ACALL SPK_BZ DEC TEMP_TL MOV A,TEMP_TL CJNE A,#0FFH,A11 JMP A12A11: ACALL LOOK_ALARM ; MOV R5,#10 ACALL DELAY JMP A0A12: CPL
10、 20H.1 JMP A3A13: JMP A7 RET; 显示信息区子程序 LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指针指到显示信息区 MOV A,#2 ;显示在第二行 ACALL LCD_PRINT MOV A,#0C6H ACALL TEMP_BJ1 MOV A,TEMP_TH ;加载TH数据 MOV X,#3 ;设置位置 ACALL SHOW_LINE2H ;显示数据 MOV A,#0CEH ACALL TEMP_BJ1 MOV A,TEMP_TL ;加载TL数据 MOV X,#12 ;设置位置 ACALL SHOW_LINE2L ;显示数据 RET;-M_ALA
11、X1: DB LOOK ALERT CODE,0M_ALAX2: DB TH: TL: ,0;-TEMP_BJ1: ACALL WR_COMM MOV DPTR,#BJ2 ;指针指到显示信息区 MOV R1,#0 MOV R0,#2B0: MOV A,R1 MOVC A,A+DPTR ACALL WR_DATA INC R1 DJNZ R0,B0 RETBJ2: DB 00H,C;-SHOW_LINE2H: ;在 LCD 的第二行显示数字 MOV B,#100 DIV AB ADD A,#30H PUSH B MOV B,X ACALL LCDP2 POP B MOV A,#0AH XCH A
12、,B DIV AB ADD A,#30H INC X PUSH B MOV B,X ACALL LCDP2 POP B INC X MOV A,B MOV B,X ADD A,#30H ACALL LCDP2 RET;-SHOW_LINE2L: ;在 LCD 的第二行显示数字 MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H PUSH B MOV B,X CALL LCDP2 POP B INC X MOV A,B MOV B,X ADD A,#30H ACALL LCDP2 RET;-; 温度值比较子程序;实际温度值与标记温度值比较
13、子程序TEMP_COMP: MOV A,TEMP_TH SUBB A,TEMP_ZH ;减数被减数,则 JC TCL1 ;借位标志位C=1,转 MOV A,TEMP_ZH SUBB A,TEMP_TL ;减数被减数,则 JC TCL2 ;借位标志位C=1,转 MOV DPTR,#BJ5 ACALL TEMP_BJ3 CLR RELAY ;继电器吸合 RET TCL1: MOV DPTR,#BJ3 ;存入#BJ3表 ACALL TEMP_BJ3 ;调用显示高、低温度及加热标记子程序 SETB RELAY ;继电器关闭 ACALL SPK_BZ RET TCL2: MOV DPTR,#BJ4 ;存
14、入#BJ4表 ACALL TEMP_BJ3 ;调用显示高、低温度及加标记子程序 ACALL SPK_BZ ;调用鸣响子程序 RET; 显示高、低温度及加热标记程序TEMP_BJ3: MOV A,#0CEH ACALL WR_COMM MOV R1,#0 MOV R0,#2BJJ: MOV A,R1 MOVC A,A+DPTR ACALL WR_DATA INC R1 DJNZ R0,BJJ RETBJ3: DB HBJ4: DB BCD DIV AB ;B= A % 100 MOV R4,A ;R7 = 百位数 MOV A,#0AH XCH A,B DIV AB ;B = A % B SWAP
15、 A ORL A,B RET;- ; 小数部分码表DOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H DB 05H,05H,06H,06H,07H,08H,08H,09H;-; 显示区BCD 码温度值刷新子程序 ;显示区 BCD 码温度值刷新DISP_BCD: MOV A,TEMPLC ANL A,#0FH MOV 70H,A ;小数位 MOV A,TEMPLC SWAP A ANL A,#0FH MOV 71H,A ;个位 MOV A,TEMPHC ANL A,#0FH MOV 72H,A ;十位 MOV A,TEMPHC SWAP A ANL A,#0FH
16、 MOV 73H,A ;百位 MOV A,TEMPHC ANL A,#0F0H CJNE A,#010H,DI0 SJMP DI2DI0: MOV A,TEMPHC ANL A,#0FH JNZ DI2 ;十位数是0 MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,#0AH ;符号位不显示 MOV 72H,A ;十位数显示符号DI2: RET;- DS18B20复位初始化子程序 - RESET_1820: ;复位(有具体的时序要求) SETB DQ NOP CLR DQ ; ;主机发出延时537微秒的复位低脉冲 MOV R1,#3 DLY: MOV R0,#107
17、 DJNZ R0,$ DJNZ R1,DLY ; ;然后拉高数据线 SETB DQ NOP NOP NOP ; MOV R0,#25H T2: JNB DQ ,T3 ;等待DS18B20回应 DJNZ R0, T2 JMP T4 ; T3: SETB FLAG ;置标志位,表示DS1820存在 JMP T5 ; T4: CLR FLAG ;清标志位,表示DS1820不存在 JMP T7 ; T5: MOV R0,#117 T6: DJNZ R0,T6 ;时序要求延时一段时间 ; T7: SETB DQ RET ;复位子程序 ;- 写入DS18B20子程序 - WRITE_1820: ;写入DS
18、18B20(有具体的时序要求) MOV R2,#8 ;一共8位数据 CLR C WR1: CLR DQ ;总线低位,开始写入 MOV R3,#6 DJNZ R3,$ ;保持16微秒以上 RRC A ;把字节DATA分成8个BIT环移给C MOV DQ, C ;写入一个BIT MOV R3,#23 DJNZ R3,$ ;等待 SETB DQ ;重新释放总线 NOP DJNZ R2,WR1 ;写入下一个BIT SETB DQ RET ;写入子程序 ;- 读出DS18B20子程序 - READ_1820: ; 将温度低位、高位、TH、TL从DS18B20中读出 MOV R4,#4 ;mov r4,#
19、4 MOV R1,#TEMPL ; 存入25H、26H、27H、28H RE0: MOV R2,#8 ;数据一共有8位 RE1: CLR C SETB DQ NOP NOP CLR DQ ;读前总线保持为低 NOP NOP NOP SETB DQ ;开始读总线释放 MOV R3,#9 DJNZ R3,$ ;延时18微妙 MOV C, DQ ;从总线读到一个BIT MOV R3,#23 ; DJNZ R3,$ ;等待50微秒 RRC A ;把读得的位价值环移给A DJNZ R2,RE1 ;读下一个BIT MOV R1,A INC R1 ; R1内数据递增 DJNZ R4,RE0 RET ;读出子
20、程序;= LCD 1602 显示程序 =;初始化设置 SET_LCD: ;对 LCD 做初始化设置及测试 CLR E CALL INIT_LCD ;初始化 LCD CALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET; LCD 初始化子程序 INIT_LCD: ;8位I/O控制 LCD 接口初始化 MOV A,#38H CALL WR_COMM call delay1 MOV A,#0CH ;开显示,显示光标,光标不闪烁 CALL WR_COMM call delay1 MOV A,#01H ;清除 LCD 显示屏 CALL WR_COMM call delay1 RE
21、T; 显示温度标记子程序 ;显示温度标记子程序TEMP_BJ: MOV A, #0CBH ACALL WR_COMM MOV DPTR,#BJ ;指针指到显示消息 MOV R1 ,#0 MOV R0 ,#2TP1: MOV A,R1 MOVC A,A+DPTR ACALL WR_DATA INC R1 DJNZ R0,TP1 RETBJ: DB 00H,C; 自定义字符子程序 ;将自定义字符写入LCD1602的CGRAM中STORE_DATA: MOV A,#40H ACALL WR_COMM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 MOVC A,A+DPTR ACALL WR_DATA ;写入数据 INC R3 DJNZ R2,S_DATA RET;-D_DATA: DB 0CH,12H,12
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1