LCALL RST ;调用18B20复位子程序(初始化)
///////////////////////////////////////////////////////////////////
lcall
ds1302csh ;调用1302初始化子程序
;调用lcd初始化子程序 ;调用1302写子程序 ;调用1302读子程序
;调用显示子程序
lcall lcdcsh lcall w1302 lcall lcall
r1302
display
;************************************************************* main:
CALL MK1
:
;ds18b20的写读及显示加1302时钟显示
;判断DS18B20是否响应以及初始值的设定
CALL MK3 AJMP MAIN
;************************************************************* MK4: MK1:
AJMP MK2
;跳转到错误子程序
;DS1820不存在
JNB FLAG1,MK4
LCALL MENU_OK 序
CALL RET
RD_EEPROM
;DS1820存在,调用显示正确信息子程
;将报警温度值从EEPROM中读出来
;************************************************************* MK3:
LCALL RST
;调用DS18B20复位子程序
;DS18B20不存在跳转到错误显示子程
JNB FLAG1,MK4 序
MOV A,#0CCH LCALL WRITE
;跳过ROM匹配命令
;DS18B20数据写入操作子程序
;温度转换命令
MOV A,#44H LCALL WRITE LCALL RST
;DS18B20数据写入操作子程序
;调用DS18B20复位子程序
6
MOV A,#0CCH LCALL WRITE
;跳过ROM匹配
;DS18B20数据写入操作子程序
;读温度命令
MOV A,#0BEH LCALL WRITE LCALL READ
;调用DS18B20数据读取操作子程序 ;调用温度数据BCD 码处理子程序 ;调用温度数据显示子程序 ;调用LCD显示处理子程序
;调用实测温度值与设定温度值比较子
LCALL CONVTEMP LCALL DISPBCD LCALL CONV
LCALL TEMP_COMP 程序
LCALL PROC_KEY ;调用键扫描子程序
;**************************************************************************
LCALL
SHIZHONG
;调用1302时钟模块
SJMP MK3
;*********************************************************************
SHIZHONG:mov tmod,#01h ;用定时器0,方式一工作 mov th0,#70h ;为定时器赋初值 mov tl0,#00h setb tr0 lp1:
jbc tf0,lp2 ;定时器溢出跳到lp2处并将tf0清零 clr tr0
lp2: mov th0,#70h ;为定时器赋初值 mov tl0,#00h
lcall r1302 ;调用读1302子程序 lcall display ;调用显示程序 setb tr0
7
RET
;******************LCD初始化********************************** set_lcd:
CLR EN
LCALL INIT_LCD ;初始化 LCD
LCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET
;///////////////////////////////////////////////////////////////////////////
;设置1302初值子程序
ds1302csh:mov second,#00h
mov minute,#57h mov hour,#15h mov day,#17h mov month,#03h mov week,#06h mov year,#12h
;miao秒
;分
;时 ;天 ;月 ;周 ;年
;/////////////////////////////////////////////////////////////////////
;lcd初始化子程序 lcdcsh:
mov
lcd,#38h
lcall xzl mov
lcd,#08h
lcall xzl mov
lcd,#01h
lcall xzl
lcd,#06h
mov
lcall xzl mov
lcd,#0ch
8
lcall xzl
;///////////////////////////// ;1302写数据子程序 w1302: clr ce
clr clk nop setb
ce
;复位脚置高电平 ;复位脚置低电平
;串行时钟置低电平
mov b,#8eh ;送操作地址 lcall wbit
;调用写字节子程序
mov b,#00h ;送操作数 lcall wbit setb
;调用写字节子程序
clk ;串行时钟置高电平,下降沿有效
clr ce ;禁止写入数据
mov r0,#second ;将秒寄存器送到r0 mov r1,#80h
;将80h送到A
mov r7,#7 ;将r7送7
//////////////////////////////////////////////////////////////////////////
wloop: clr ce
;复位脚置低电平
clr clk nop setb
;复位脚置低电平
ce ;复位脚置高电平,准备写数据
mov b,r1 ;将r1内的数据送给b
;调用写字节子程序
lcall wbit
mov a,@r0 ;将r0内地址中的数送到A mov hex,a ;将a中的数送到十进制寄存器 lcall hex_bcd mov b,a
;调用十进制转bcd码子程序
;将a内的数送给b
;调用写字节子程序
9
lcall wbit
inc r0 inc r1 inc r1 setb
;r0加一 ;r1加一
clk ;串行时钟下降沿写入
clr ce djnz
;禁止写入
r7,wloop ;判断是否将年月日等七组数写入1302
;禁止写入 ;
clr ce clr clk nop setb
ce ;准备写入
mov b,#8eh ;送操作地址 lcall wbit
;调用写字节子程序
mov b,#80h ;送操作数 lcall wbit setb
clk
;调用写字节子程序 ;下降沿有效
clr ce ret
;禁止写入
;子程序返回
;///////////////////////////// ;写字节子程序
wbit: mov r2,#08h ;给r2送8 w_loop:
a,b
;b送给a ;带进位的右移A
mov
rrc a mov b,a
mov dio,c ;sclk上升沿时写入数据 setb clk nop
clr clk
;禁止写入
djnz r2,w_loop ;判断是否送完
10