基于某51单片机——Ds18B20温度采集,LCD显示总汇编程序(附带proteus仿真图)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TEMP_ZH EQU 24H ;实测温度值存放单元TEMPL EQU 25H
TEMPH EQU 26H
TEMP_TH EQU 27H ;高温报警值存放单元TEMP_TL EQU 28H ;低温报警值存放单元TEMPHC EQU 29H ;正、负温度值标记TEMPLC EQU 2AH
TEMPFC EQU 2BH
K1 EQU P1.4 ;查询按键
K2 EQU P1.5 ;设置/调整键
K3 EQU P1.6 ;调整键
K4 EQU P1.7 ;确定键
BEEP EQU P3.7 ;蜂鸣器
RELAY EQU P1.3 ;指示灯
LCD_X EQU 2FH ;LCD 字符显示位置LCD_RS EQU P2.0 ;LCD 寄存器选择信号LCD_RW EQU P2.1 ;LCD 读写信号
LCD_EN EQU P2.2 ;LCD 允许信号
FLAG1 EQU 20H.0 ;DS18B20是否存在标志KEY_UD EQU 20H.1 ;设定按键的增、减标志DQ EQU P3.3 ;DS18B20数据信号
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV A,#00H
MOV R0,#20H ;将20H~2FH 单元清零
MOV R1,#10H
CLEAR: MOV R0,A
INC R0
DJNZ R1,CLEAR
LCALL SET_LCD
LCALL RE_18B20
START: LCALL RST ;调用18B20复位子程序JNB FLAG1,START1 ;DS1820不存在
LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序
MOV TEMP_TH,#055H ;设置TH初值85度
MOV TEMP_TL,#019H ;设置TL初值25度
LCALL RE_18B20A ;调用暂存器操作子程序
LCALL WRITE_E2 ;写入DS18B20
LCALL TEMP_BJ ;显示温度标记
JMP START2
START1: LCALL MENU_ERROR ;调用显示出错信息子程序
LCALL TEMP_BJ ;显示温度标记
SJMP $
START2: LCALL RST ;调用DS18B20复位子程序JNB FLAG1,START1 ;DS18B20不存在
MOV A,#0CCH ;跳过ROM匹配命令
LCALL WRITE
MOV A,#44H ;温度转换命令
LCALL WRITE
LCALL RST
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE
MOV A,#0BEH ;读温度命令
LCALL WRITE
LCALL READ ;调用DS18B20数据读取操作子程序
LCALL CONVTEMP ;调用温度数据BCD 码处理子程序
LCALL DISPBCD ;调用温度数据显示子程序
LCALL CONV ;调用LCD显示处理子程序
LCALL TEMP_COMP ;调用实测温度值与设定温度
值比较子程序
LCALL PROC_KEY ;调用键扫描子程序
SJMP START2 ;循环
;*************************** 键扫描子程序*****************************
PROC_KEY:JB K1,PROC_K1
LCALL BEEP_BL
JNB K1,$
MOV DPTR,#M_ALAX1
MOV A,#1
LCALL LCD_PRINT
LCALL LOOK_ALARM
JB K3,$
LCALL BEEP_BL
JMP PROC_K2
PROC_K1: JB K2,PROC_END
LCALL BEEP_BL
JNB K2,$
MOV DPTR,#RST_A1
MOV A,#1
LCALL LCD_PRINT
LCALL SET_ALARM
LCALL RE_18B20 ;将设定的TH,TL值写入DS18B20
LCALL WRITE_E2
PROC_K2: LCALL MENU_OK
LCALL TEMP_BJ
PROC_END:RET
;*************************** 设定温度报警值TH、TL ***************************
SET_ALARM:LCALL LOOK_ALARM
AS0: JB K1,AS00
LCALL BEEP_BL
JNB K1,$
CPL 20H.1 ;UP/DOWN 标记
AS00: JB 20H.1,ASZ01 ;20H.1=1,增加
JMP ASJ01 ;20H.1=0,减小
ASZ01: JB K2,ASZ02 ;TH值调整(增加)
LCALL BEEP_BL
INC TEMP_TH
MOV A,TEMP_TH
CJNE A,#120,ASZ011
MOV TEMP_TH,#0
ASZ011: LCALL LOOK_ALARM
MOV R5,#10
LCALL DELAY
JMP ASZ01
ASZ02: JB K3,ASZ03 ;TL值调整(增加) LCALL BEEP_BL
INC TEMP_TL
MOV A,TEMP_TL
CJNE A,#99,ASZ021
MOV TEMP_TL,#00H
ASZ021: LCALL LOOK_ALARM
MOV R5,#10
LCALL DELAY
JMP ASZ02
ASZ03: JB K4,AS0 ;确定调整
LCALL BEEP_BL
JNB K4,$
RET
ASJ01: JB K2,ASJ02 ;TH值调整(减少)LCALL BEEP_BL
DEC TEMP_TH
MOV A,TEMP_TH