⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20application.txt

📁 用汇编语言写的18B20写的温度测量和显示程序,采用LCD显示.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
MOV COUNT,#10H          ;地址计数器设为16
MOV A,#98H             ;第四行起始地址
LCALL SEND_I           ;调用写指令子程序
LCALL QUSHU
RET
;==============================================================
;显示恒温水温度值子程序
;==============================================================
SHOW_G: MOV A,#86H        ;设置显示位置
LCALL SEND_I
MOV A,SDWDG
MOV B,#0AH 
DIV AB
ADD A,#30H        ;十位数转换为 ASCII 码
LCALL SEND_D       ;送显示 
MOV A,B           ;个位数
ADD A,#30H        ;个位数转换为 ASCII 码
LCALL SEND_D       ;送显示                    ;显示恒温水温度值子程序
MOV A,#87H        ;设置显示位置
LCALL SEND_I
MOV A,#0A1H       ;显示温度标记℃ 
LCALL SEND_D
MOV A,#0E6H
LCALL SEND_D
SHOW_D: MOV A,#96H        ;设置显示位置
LCALL SEND_I
MOV A,SDWDD
MOV B,#0AH 
DIV AB
ADD A,#30H        ;十位数转换为 ASCII 码
LCALL SEND_D       ;送显示 
MOV A,B           ;个位数
ADD A,#30H        ;个位数转换为 ASCII 码
LCALL SEND_D       ;送显示                    ;显示恒温水温度值子程序
MOV A,#97H        ;设置显示位置
LCALL SEND_I
MOV A,#0A1H       ;显示温度标记℃ 
LCALL SEND_D
MOV A,#0E6H
LCALL SEND_D
RET 
;==============================================================
; LCD12864 显示实际温度值子程序
;==============================================================
SHOW_S: MOV A,#8DH        ;设置显示位置
LCALL SEND_I
MOV A,75H         ;加载十位数据
CJNE A,#00H,CONV2
CONV1: MOV A,#" "        ;十位数等于0显示空格
LCALL SEND_D      ;送显示
JMP CONV3
CONV2: ADD A,#30H         ;十位数转换成ASCII码
LCALL SEND_D      ;显示数据
CONV3: MOV A,74H         ;个位
ADD A,#30H        ;个位数转换成ASCII码
CALL SEND_D       ;送显示
MOV A,#'.'
CALL SEND_D       ;送显示
MOV A,73H         ;加载小数位
ADD A,#30H        ;小数位转换成ASCII码
CALL SEND_D       ;送显示
MOV A,#8FH        ;显示温度标记℃ 
CALL SEND_I
MOV A,#0A1H
CALL SEND_D
MOV A,#0E6H
CALL SEND_D
RET 
;==============================================================
;取数子程序
;==============================================================
QUSHU: CLR A
MOVC A,@A+DPTR       ;查表取数据
LCALL SEND_D         ;送显示
INC DPTR
DJNZ COUNT,QUSHU
RET
;==============================================================
;写数据子程序
;RS=1,RW=0,E=高脉冲,D0-D7=数据
;==============================================================
SEND_D: LCALL CHK_BUSY       ;写数据子程序
SETB RS
CLR RW
MOV P0,A
SETB E
NOP
NOP
CLR E
RET 
;--------------------------------------------------------------
MING1: SETB P3.7
LCALL YS
CLR P3.7
RET
YS:    MOV     R5,#8FH
YS1:   MOV     R6,#0FFH
YS2:   DJNZ    R6,$
DJNZ    R5,YS1
RET 
;************************按键程序***********************
ANJIAN: JB      K3,ANJIAN_0 ;按键K3确定修改
LCALL   YS   ;防抖动
JB      K3,ANJIAN_0
LCALL MING1
LCALL   BBBB   
JNB K3,$
ANJI_1: JB      K2,JIAN_2 ;按键K2设定值加1
LCALL   YS   ;防抖动
JB      K2,JIAN_2
LCALL MING1
MOV     A,SDWDG
INC A
MOV SDWDG,A
CLR C
CJNE A,#63H,JIAN_01
JMP JIAN_02
JIAN_01:JC JIAN_02
MOV SDWDG,#00H
JIAN_02:
LCALL BBBB
JNB K2,$
JIAN_2: JB      K1,ANJI_3      ;按键K1设定值减1
LCALL   YS              ;防抖动
JB      K1,ANJI_3
LCALL MING1
MOV A,SDWDG
DEC A
MOV SDWDG,A
CLR C
CJNE A,#63H,JIAN_21
JIAN_21:JC JIAN_22
MOV SDWDG,#63H
JIAN_22:JNB K1,$
LCALL BBBB 
ANJI_3: JB      K3,ANJI_1 ;按键K3确定退出
LCALL   YS   ;防抖动
JB      K3,ANJI_1
LCALL MING1
LCALL CCCC
JNB K3,$
LJMP ANJI_4
ANJIAN_0:LJMP ANJIAN_9
ANJI_4: JB      K2,JIAN_5 ;按键K2设定值加1
LCALL   YS   ;防抖动
JB      K2,JIAN_5
LCALL MING1
MOV     A,SDWDD
INC A
MOV SDWDD,A
CLR C
CJNE A,#63H,JIAN_31
JMP JIAN_32
JIAN_31:JC JIAN_32
MOV SDWDD,#00H
JIAN_32:LCALL CCCC
JNB K2,$
JIAN_5: JB      K1,ANJI_6      ;按键K1设定值减1
LCALL   YS              ;防抖动
JB      K1,ANJI_6
LCALL MING1
MOV A,SDWDD
DEC A
MOV SDWDD,A
CLR C
CJNE A,#63H,JIAN_41
JIAN_41:JC JIAN_42
MOV SDWDD,#63H
JIAN_42:JNB K1,$
LCALL CCCC 
ANJI_6: JB      K3,ANJI_4 ;按键K3确定退出
LCALL   YS   ;防抖动
JB      K3,ANJI_4
LCALL MING1
JNB K3,$
ANJIAN_9:LCALL CUN
RET
;==============================================================
;重新对 DS18B20 初始化
;将设定的温度报警值写入 DS18B20
;==============================================================
CUN:    LCALL W18b20
        MOV A,#0CCH       ;跳过ROM匹配
        LCALL XIEB20
        MOV A,#4EH        ;写暂存寄存器
        LCALL XIEB20
        MOV A,SDWDG
LCALL XIEB20
MOV A,SDWDD
LCALL XIEB20
       ; MOV A,#7FH        ;12位精确度
       ; LCALL XIEB20
LCALL W18B20   ;把 DS18B20 暂存器里的温度报警值拷贝到EEROM
        MOV A,#0CCH        ;跳过ROM匹配
        LCALL XIEB20
        MOV A,#48H         ;把暂存器里的温度报警值拷贝到EEROM
        LCALL XIEB20
        RET
;--------------------------------------------------------------
show_g1:MOV A,#93H        ;设置显示位置
LCALL SEND_I
MOV A,SDWDG
MOV B,#0AH 
DIV AB
ADD A,#30H        ;十位数转换为 ASCII 码
LCALL SEND_D       ;送显示 
MOV A,B           ;个位数
ADD A,#30H        ;个位数转换为 ASCII 码
LCALL SEND_D       ;送显示                    ;显示恒温水温度值子程序
MOV A,#94H        ;设置显示位置
LCALL SEND_I
MOV A,#0A1H       ;显示温度标记℃ 
LCALL SEND_D
MOV A,#0E6H
LCALL SEND_D
RET 
BBBB:
          MOV DPTR,#M_ERRORA ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#80H          ;第一行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU

          MOV DPTR,#M_ERRORB ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#90H          ;第二行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU
lcall show_g1
LJMP DDDD
CCCC:
          MOV DPTR,#M_ERRORC ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#80H          ;第一行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU

          MOV DPTR,#M_ERRORD ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#90H          ;第二行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU
         lcall show_d
DDDD: MOV DPTR,#M_ERROR3 ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#88H          ;第三行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU

          MOV DPTR,#M_ERROR4 ;指针指到显示信息区
          MOV COUNT,#10H       ;地址计数器设为16
          MOV A,#98H          ;第四行起始地址
          LCALL SEND_I        ;调用写指令子程序
          LCALL QUSHU
RET
;--------------------------------------------------------------
M_OK1:   DB   '设定低温度:    '   ;显示在第一行 
M_OK2:   DB   '设定高温度:    '   ;显示在第二行
M_OK3:   DB   '实际温度:       '   ;显示在第三行
M_OK4:   DB   ' QQ:80908900 '   ;显示在第四行 
M_ERRORA: DB   ' 设定高温度!   '   ;显示在第一行
M_ERRORB: DB   '                '   ;显示在第二行
M_ERRORC: DB   ' 设定低温度!   '   ;显示在第一行
M_ERRORD: DB   '              '   ;显示在第二行
M_ERROR1: DB   ' 温度探头错误!'   ;显示在第一行
M_ERROR2: DB   '    请检查!    '   ;显示在第二行
M_ERROR3: DB   '    风也有情    '   ;显示在第三行
M_ERROR4: DB   ' QQ:80908900 '   ;显示在第四行
;************************************************************* 
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -