图一 硬件电路图
4系统软件设计
4.1初始化程序
初始化程序内容包括P0、P1、P2口,P0口清零,P1.4~P1.7附值,置堆栈基址(70H),初始化DS18B20、1602LCD。
4.2主程序若图片无法显示请联系QQ752018766
DS18B20传感器有信号则将信号通过P3.3口发送到AT89S51芯片,经过温度转换后再将温度发送出去,检测P0口为高电平,则转发程序,并经过BCD处理使信号发送到LCD并显示,当温度小于或等于TL(设置温度下限)时,在报警范围内从而使蜂鸣器报警;当温度大于后等于TH(设置温度上限)时,同样在蜂鸣器报警的范围内。当温度不在蜂鸣器报警的范围内时则程序不断的进行扫描信号从而不断更新现场的温度信息。主程序流程图如
5系统调试及出现问题的解决方案
测试仪器:PC机,QTH—52在线仿真机,数字万用表,稳压电源,温度计,示波器。
测试方法:先对各单元的模快进行独立的测试,再进行上机整体的测试,通过后,进行脱机测试,以提高调试效率。
各单元模块的测试基本正常,有一些个别的接线和程序错误,进行简单的修改,可以进行正常的工作。
整体的测试;将测试好的各模块连接好,用QTH—52在线仿真机倒替89C51单片机进行模拟调试,用键盘设定一定范围值接通电源,按下复位按键,使电路进行初始化,按下LCD电源开关使LCD正常显示,此时显示的是当前的室内温度,如果此时蜂鸣器报警则说明此时的温度不在设置温度值TL和TH之间,反之则在TL和TH之间。当按下K2时即进入到设定温度报警值状态,再按一下K2则此时是对TH值的设定,接着按K1键是对TH值进行减方式操作,若此时按过K4后再按K1则是对TH进行加方式操作,如此就可以设定TH值了;若按下K2后再按K3键则是对TL值进行设定,方法与TH的设定值完全相同;当对温度进行设定完毕后就可以通过按下K4键退出设定程序,此时通过按键K1就可查看刚刚设定的数值的结果,再按下K3键就退出查看设定值状态,如果再调试时LCD上没有显示,通过用万用表查看是否硬件电路有故障,如果LCD上没有显示字的蓝色显示字的条框,此时最好调节电位器就能清晰的看到字迹了。
6、系统程序
主要程序如下:
TEMP_ZH DATA 24H ;实时温度值存放单元
TEMPL DATA 25H ;
TEMPH DATA 26H ;
TEMP_TH DATA 27H ;高温报警值存放单元
TEMP_TL DATA 28H ;低温报警值存放单元
K1 EQU P1.4
K2 EQU P1.5
K3 EQU P1.6
K4 EQU P1.7
BEEP EQU P3.7
FLAG1 EQU 20H.0 ;DS18B20是否存在标记
KEY_UD EQU 20H.1 ;设定 KEY 的UP与DOWN 标记
DATE_LINE EQU P3.3
;=====================================================
ORG 0000H
JMP MAIN
MAIN: MOV SP,#60H
MOV A,#00H
MOV R0,#20H ;将 20H-2FH 单元清零
MOV R1,#10H
CLEAR: MOV @R0,A
INC R0
;18B20复位子程序
JNB FLAG1,START1 ;DS1820不存在
CALL MENU_OK
CALL READ_E2
CALL TEMP_BJ ;显示温度标记
JMP START2
START1: CALL MENU_ERROR
CALL TEMP_BJ ;显示温度标记
JMP $
START2:
CALL RESET
JNB FLAG1,START1 ;DS1820不存在
MOV A,#0CCH ; 跳过ROM匹配
CALL WRITE
MOV A,#0BEH ; 发出读温度命令
CALL WRITE
CALL READ
call CONVTEMP
Call DISPBCD
CALL CONV
CALL TEMP_COMP
CALL PROC_KEY ; 键扫描
SJMP START2
;-----------------------------------------------------
PROC_KEY:
JB K1,PROC_K1 ; 按键K1处理
CALL BEEP_BL
JNB K1,$
MOV DPTR,#M_ALAX1
CALL BEEP_BL
JMP PROC_K2
PROC_K1: ; 按键K2处理
JB K2,PROC_END
CALL BEEP_BL
JNB K2,$
MOV DPTR,#RESET_A1
MOV A,#1
CALL LCD_PRINT
CALL SET_ALARM
CALL RE_18B20 ;将设定的TH,TL值写入DS18B20内
CALL WRITE_E2
PROC_K2:
CALL MENU_OK
CALL TEMP_BJ
PROC_END:
RET
;============================================
;设定报警值 TH、TL
;============================================
SET_ALARM:
CALL RESET_ALARM
CALL LOOK_ALARM
AS0:
JB ;20H.1=0,DOWN
ASZ01: JB K2,ASZ02 ;TH值调整(增加)
CALL BEEP_BL
INC TEMP_TH
MOV A,TEMP_TH
CJNE A,#120,ASZ011
MOV TEMP_TH,#0
ASZ011: CALL LOOK_ALARM
MOV R5,#10
CALL DELAY
JMP ASZ01
ASZ02: JB K3,ASZ03 ;TL值调整(增加)
_TL,#00H
ASZ021: CALL LOOK_ALARM ;
MOV R5,#10
CALL DELAY
JMP ASZ02
ASZ03: JB K4,AS0 ;确定调整 OK
CALL BEEP_BL
,ASJ02 ;TH值调整 (减少)
CALL BEEP_BL
DEC TEMP_TH
MOV A,TEMP_TH
JMP AS0
ASJ02: JB K3,ASJ03 ;TL值调整(减少)
CALL BEEP_BL
DEC TEMP_TL
LOOK_ALARM ;
MOV R5,#10
CALL DELAY
JMP AS0
ASJ022:
RET
RESET_ALARM:
MOV DPTR,#RESET_A1 ;指针指到显示信息区
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页