//
Receive_B:
SETB
SDA ;释放SDA数据线
MOV R7,#08H ;一个字节共接收8位数据 CLR A
R_B: SETB SCL ;启动一个时钟周期,读总线
NOP
MOV C,SDA ;将SDA状态读入C RLC A ;结果移入A CLR SCL NOP
DJNZ R7,R_B ;判断8位数据是否接收完全? SETB SDA NOP RET
;//////停止24c02子程序/////////////////////////////////// Stop:
CLR SDA ;时钟高电平时数据上升沿
为停止信号
NOP
SETB SCL NOP
SETB SDA NOP
CLR SCL RET
Begin: ;24C02启动子程序
SETB SCL ;时钟高电平时数据下降沿为启
动信号
NOP
SETB SDA
21
NOP
CLR SDA NOP
CLR SCL ;钳住IC总线准备发送或接受数
据 NOP
RET
;****************
无
温
度
显
示
时
子
程
************************************************************ MK2:
LCALL MENU_ERROR
;调用显示出错信息子程序
SJMP $
RET
;**************LCD
初
始
*********************************************** INIT_LCD:
MOV A,#38H ;2行显示,字形5*7点阵
LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1
MOV A,#0CH ;开显示,显示光标,光标不闪烁 LCALL WCOM LCALL DELAY1
MOV A,#01H ;清除 LCD 显示屏 LCALL WCOM
22
序
化
LCALL DELAY1 RET
;************************DS1820初始化时序************************ RST:
SETB DQ
NOP CLR DQ
MOV R0,#6BH ; MOV R1,#04H TSR1: DJNZ R0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB DQ NOP NOP NOP
MOV R0,#32H TSR2: JNB DQ,TSR3 DJNZ R0,TSR2
JMP TSR4 ; TSR3: SETB FLAG1 ; JMP TSR5
TSR4: CLR FLAG1 ; JMP TSR7 TSR5: MOV R0,#06BH
TSR6: DJNZ R0,$ ; TSR7: SETB DQ RET
;**************************
主机发出延时复位低脉冲 ;拉高数据线
;等待DS18B20回应
延时
置1标志位,表示DS1820存在 清0标志位,表示DS1820不存在 时序要求延时一段时间 LCD
显示子程23
序
********************************** SHOW_DIG2H:
MOV B,#100
DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B MOV A,#0AH XCH A,B DIV AB ADD A,#30H INC LCD_X PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RET
;*************************** 键扫描***************************** PROC_KEY:
JB K1,PROC_K1 ; 按键K1处理 CALL BEEP_BL ;调用蜂鸣器处理程序 24
子程序
JNB K1,$ ;按键没有松开则继续等待 MOV DPTR,#M_ALAX1 MOV A,#1
;查表,LOOK ALERT CODE
;设置显示在第一行
CALL LCD_PRINT ;调用第一行显示,显示LOOK ALERT CODE CALL LOOK_ALARM JB K3,$
;调用温度报警值显示子程序
;判断K3是否按下,没按下则等待
;按下了调用蜂鸣器处理程序 ;跳到PROC_K2
CALL BEEP_BL JMP PROC_K2
PROC_K1: ; 按键K2处理
JB K2,PROC_END ;判断K2是否按下,没有按下则跳出去 CALL BEEP_BL JNB K2,$
;调用蜂鸣器处理程序
;按键2没有松开则等待
表头指向 RESET ALERT CODE
MOV DPTR,#RESET_A1 ; MOV A,#1
;设置显示位置为第一行
CALL LCD_PRINT ;调用LCD显示,显示RESET ALERT CODE CALL SET_ALARM ;调用报警值设置子程序
CALL EEPROM
;将设定的TH,TL值写入EEPROM
PROC_K2:
CALL MENU_OK // CALL TEMP_BJ PROC_END: RET RESET_A1:
DB \
;*************************** 设定温度报警值 TH、TL *************************** SET_ALARM:
LCALL LOOK_ALARM
;调用正常温度显示,显示DS18B20 OK
;调用显示温度标记子程序
AS0: JB K1,AS00
25