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

📄 温控程序.asm

📁 51单片机控制1820工作并且实时控制现场温度
💻 ASM
📖 第 1 页 / 共 2 页
字号:
         LCALL JZKEY
         MOV A,5BH
         ANL A,#0F0H
         MOV 5BH,A
         MOV A,3FH
         ADD A,5BH
         MOV 5BH,A
     K15:MOV R6,#2
         LCALL XSLOOP
         MOV A,5AH
         LCALL XSLOOP4
         MOV A,5BH
         LCALL XSLOOP3
         LCALL DELAY1
         RET
SETALMOFF:                 ;设定关机时间(4位)
         ACALL K16
         LCALL JZKEY
         MOV A,5CH         ;设定小时
         ANL A,#0FH
         MOV 5CH,A
         MOV A,3FH
         SWAP A
         ADD A,5CH
         MOV 5CH,A
         ACALL K16
         LCALL JZKEY
         MOV A,5CH
         ANL A,#0F0H
         MOV 5CH,A
         MOV A,3FH
         ADD A,5CH
         MOV 5CH,A
         ACALL K16
         LCALL JZKEY
         MOV A,5DH        ;设定分钟
         ANL A,#0FH
         MOV 5DH,A
         MOV A,3FH
         SWAP A
         ADD A,5DH
         MOV 5DH,A
         ACALL K16
         LCALL JZKEY
         MOV A,5DH
         ANL A,#0F0H
         MOV 5DH,A
         MOV A,3FH
         ADD A,5DH
         MOV 5DH,A
     K16:MOV R6,#2
         LCALL XSLOOP
         MOV A,5CH
         LCALL XSLOOP4
         MOV A,5DH
         LCALL XSLOOP3
         LCALL DELAY1
         RET
SETTIME:                  ;设定时间(6位)
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,37H        ;设定小时
         ANL A,#0FH
         MOV 37H,A
         MOV A,3FH
         SWAP A
         ADD A,37H
         MOV 37H,A
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,37H
         ANL A,#0F0H
         MOV 37H,A
         MOV A,3FH
         ADD A,37H
         MOV 37H,A
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,36H        ;设定分钟
         ANL A,#0FH
         MOV 36H,A
         MOV A,3FH
         SWAP A
         ADD A,36H
         MOV 36H,A
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,36H
         ANL A,#0F0H
         MOV 36H,A
         MOV A,3FH
         ADD A,36H
         MOV 36H,A
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,35H         ;设定秒
         ANL A,#0FH
         MOV 35H,A
         MOV A,3FH
         SWAP A
         ADD A,35H
         MOV 35H,A
         LCALL DISPTIME
         LCALL JZKEY
         MOV A,35H
         ANL A,#0F0H
         MOV 35H,A
         MOV A,3FH
         ADD A,35H
         MOV 35H,A
         LCALL DISPTIME
         LCALL SEND8563   ;@@@@@@@@@@@@@@@@@@@@@@@*****
         RET
SETDATE:                  ;设定日期(6位)
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,3BH        ;设定年
         ANL A,#0FH
         MOV 3BH,A
         MOV A,3FH
         SWAP A
         ADD A,3BH
         MOV 3BH,A
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,3BH
         ANL A,#0F0H
         MOV 3BH,A
         MOV A,3FH
         ADD A,3BH
         MOV 3BH,A
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,3AH        ;设定月
         ANL A,#0FH
         MOV 3AH,A
         MOV A,3FH
         SWAP A
         ADD A,3AH
         MOV 3AH,A
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,3AH
         ANL A,#0F0H
         MOV 3AH,A
         MOV A,3FH
         ADD A,3AH
         MOV 3AH,A
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,38H        ;设定DAY
         ANL A,#0FH
         MOV 38H,A
         MOV A,3FH
         SWAP A
         ADD A,38H
         MOV 38H,A
         LCALL DISPDATE
         LCALL JZKEY
         MOV A,38H
         ANL A,#0F0H
         MOV 38H,A
         MOV A,3FH
         ADD A,38H
         MOV 38H,A
         LCALL DISPDATE
         LCALL SEND8563
         RET
SETTEMPH:                 ;设定温度上限值(2位)
         ACALL K14
         LCALL JZKEY
         MOV A,4DH
         ANL A,#0FH
         MOV 4DH,A
         MOV A,3FH
         SWAP A
         ADD A,4DH
         MOV 4DH,A
         ACALL K14
         LCALL JZKEY
         MOV A,4DH
         ANL A,#0F0H
         MOV 4DH,A
         MOV A,3FH
         ADD A,4DH
         MOV 4DH,A
         ACALL K14
         ;SJMP TEMPHZH

TEMPHZH: CLR C
         MOV A,4DH
         CJNE A,#10H,TZ1
     TZ1:JNC TZ2
         MOV 59H,A
         RET
     TZ2:CJNE A,#20H,TZ3
     TZ3:JNC TZ4
         SUBB A,#5
         MOV 59H,A
         RET
     TZ4:CJNE A,#30H,TZ5
     TZ5:JNC TZ6
         SUBB A,#11
         MOV 59H,A
         RET
     TZ6:CJNE A,#40H,TZ7
     TZ7:JNC TZ8
         SUBB A,#17
         MOV 59H,A
         RET
     TZ8:CJNE A,#50H,TZ9
     TZ9:JNC TZ10
         SUBB A,#23
         MOV 59H,A
         RET
    TZ10:CJNE A,#60H,TZ11
    TZ11:JNC TZ12
         SUBB A,#29
         MOV 59H,A
         RET
    TZ12:CJNE A,#70H,TZ13
    TZ13:JNC TZ14
         SUBB A,#35
         MOV 59H,A
         RET
    TZ14:CJNE A,#80H,TZ15
    TZ15:JNC TZ16
         SUBB A,#41
         MOV 59H,A
         RET
    TZ16:SUBB A,#47
         MOV 59H,A
         RET

    K14: MOV R6,#4
         LCALL XSLOOP
         MOV A,4DH
         LCALL XSLOOP3
         LCALL DELAY1
         RET

;DS18B20操作子程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;DS18B20初始化程序
INIT_1820:
    SETB DQ
    NOP
    CLR DQ
    MOV R0,#36         ;主机发出延时540微秒的复位低脉冲
    LCALL DELAY
    SETB DQ            ;然后拉高数据线
    NOP
    NOP
    MOV R0,#36
TS2:
    JNB  DQ,TS3        ;等待DS18B20回应
    DJNZ R0,TS2        ;延时
    LJMP TS4
TS3:
    SETB FLAG1         ;置标志位,表示DS1820存在
    LJMP TS5
TS4:
    CLR  FLAG1         ;清标志位,表示DS1820不存在
    LJMP TS6
TS5:                   ;复位成功!时序要求延时一段时间
    MOV R0,#06BH
    DJNZ R0,$
TS6:
    SETB DQ
    RET
; 读出转换后的温度值
GET_TEMPER:
    SETB DQ
    LCALL INIT_1820    ;先复位DS18B20
    JB FLAG1,TSS2
    RET                ;若DS18B20不存在则返回
TSS2:
    MOV A,#0CCH        ;跳过ROM匹配
    LCALL WRITE_1820
    MOV A,#44H         ;发出温度转换命令
    LCALL WRITE_1820
    MOV R0,#50         ;等待AD转换结束
    LCALL DELAY
    LCALL INIT_1820    ;准备读温度前先复位
    MOV A,#0CCH        ;跳过ROM匹配
    LCALL WRITE_1820
    MOV A,#0BEH        ;发出读温度命令
    LCALL WRITE_1820
    LCALL READ_1820
    RET
;写DS18B20的子程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
WRITE_1820:
    MOV R2,#8          ;一共8位数据
    CLR C
WR11:
    CLR  DQ
    MOV  R3,#6         ;延时
    DJNZ R3,$
    RRC  A             ;右移,低位送入C
    MOV  DQ,C
    MOV  R3,#23        ;延时
    DJNZ R3,$
    SETB DQ
    NOP
    DJNZ R2,WR11        ;等待写完8位数据
    SETB DQ
    RET
;读DS18B20的程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
READ_1820:
    MOV R4,#2
    MOV R1,#56H        ;低位存入56H,高位存入55H
RE0:
    MOV R2,#8          ;8位数据
RE1:
    CLR C
    SETB DQ
    NOP
    NOP
    CLR DQ
    NOP
    NOP
    NOP
    SETB DQ
    MOV R3,#09         ;延时
    DJNZ R3,$
    MOV C,DQ           ;温度数据送入C
    MOV R3,#23         ;延时
    DJNZ R3,$
    RRC A
    DJNZ R2,RE1
    MOV @R1,A
    DEC R1
    DJNZ R4,RE0
    RET
;温度计算子程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
WENDUZH:
    MOV A,#0FH        ;将56H低四位送入小数58H
    ANL A,56H
    MOV 58H,A
    MOV A,#0F0h       ;将56H高四位和55H低四位送入整数57H
    ANL A,56H
    SWAP A
    MOV 57H,A
    MOV A,55H
    ANL A,#0FH
    SWAP A
    ADD A,57H
    MOV 57H,A
WENDUZH1:
;整数转换
    MOV A,ZHENGSHU
    MOV B,#10
    DIV AB
    MOV WD1,A          ;十位在A,送入WD1
    MOV WD2,B          ;个位在B,送入WD2

;小数转换,A*0.0625并对第二位小数进行四舍五入
;将处理结果送入WD3,WD4
    MOV A,XIAOSHU
    CJNE A,#0,L1
    MOV WD3,#0
    MOV WD4,#0
    LJMP L16
L1: CJNE A,#1,L2
    MOV WD3,#0
    MOV WD4,#6
    LJMP L16
L2: CJNE A,#2,L3
    MOV WD3,#1
    MOV WD4,#3
    LJMP L16
L3: CJNE A,#3,L4
    MOV WD3,#1
    MOV WD4,#9
    LJMP L16
L4: CJNE A,#4,L5
    MOV WD3,#2
    MOV WD4,#5
    LJMP L16
L5: CJNE A,#5,L6
    MOV WD3,#3
    MOV WD4,#1
    LJMP L16
L6: CJNE A,#6,L7
    MOV WD3,#3
    MOV WD4,#8
    LJMP L16
L7: CJNE A,#7,L8
    MOV WD3,#4
    MOV WD4,#4
    LJMP L16
L8: CJNE A,#8,L9
    MOV WD3,#5
    MOV WD4,#0
    LJMP L16
L9: CJNE A,#9,L10
    MOV WD3,#5
    MOV WD4,#6
    LJMP L16
L10:CJNE A,#10,L11
    MOV WD3,#6
    MOV WD4,#3
    LJMP L16
L11:CJNE A,#11,L12
    MOV WD3,#6
    MOV WD4,#9
    LJMP L16
L12:CJNE A,#12,L13
    MOV WD3,#7
    MOV WD4,#5
    LJMP L16
L13:CJNE A,#13,L14
    MOV WD3,#8
    MOV WD4,#1
    LJMP L16
L14:CJNE A,#14,L15
    MOV WD3,#8
    MOV WD4,#8
    LJMP L16
L15:MOV WD3,#9
    MOV WD4,#4
L16:CLR P1.4
    NOP
    RET
;显示子程序
;*************************************************************
DISPTIME:
         MOV A,37H      ;显示小时
         LCALL XSLOOP4
         MOV A,36H      ;显示分
         LCALL XSLOOP4
         MOV A,35H      ;显示秒
         LCALL XSLOOP3
         LCALL DELAY1
         RET
DISPDATE:
         MOV A,3BH      ;显示年
         LCALL XSLOOP4
         MOV A,3AH      ;显示月
         LCALL XSLOOP4
         MOV A,38H      ;显示日
         LCALL XSLOOP3
         LCALL DELAY1
         RET
XSLOOP3:MOV 4EH,A            ;HAVE NODOT
         ANL A,#0F0H
         SWAP A
         MOV 5FH,A
         MOV A,4EH
         ANL A,#0FH
         MOV 5EH,A
         MOV DPTR,#TAB
         MOV A,5FH
         LCALL XSLOOP1
         MOV A,5EH
         LCALL XSLOOP1
         RET
XSLOOP4:                   ;HAVE DOT
         MOV 4EH,A
         ANL A,#0F0H
         SWAP A
         MOV 5FH,A
         MOV A,4EH
         ANL A,#0FH
         MOV 5EH,A
         MOV DPTR,#TAB
         MOV A,5FH
         LCALL XSLOOP1
         MOV DPTR,#TAB1
         MOV A,5EH
         LCALL XSLOOP1
         RET

XSLOOP31:
         MOV B,#10
         DIV AB           ;低位在B,高位在A
         MOV 5EH,B
         MOV 5FH,A
         MOV DPTR,#TAB
         MOV A,5FH        ;显示高位
         LCALL XSLOOP1
         MOV A,5EH        ;显示低位(无小数点)
         LCALL XSLOOP1
         RET

XSLOOP41:
         MOV B,#10
         DIV AB
         MOV 5EH,B
         MOV 5FH,A
         MOV DPTR,#TAB
         MOV A,5FH         ;显示高位
         LCALL XSLOOP1
         MOV DPTR,#TAB1
         MOV A,5EH         ;显示低位(有小数点)
         LCALL XSLOOP1
         RET
DISPTEMP:
    MOV R6,#2
    ACALL XSLOOP
    MOV   A,33H         ;显示十位
    MOV   DPTR,#TAB
    ACALL XSLOOP1
    MOV   A,32H         ;显示个位
    MOV   DPTR,#TAB1
    ACALL XSLOOP1
    MOV   A,31H         ;显示十分位
    MOV   DPTR,#TAB
    ACALL XSLOOP1
    MOV   A,30H         ;显示百分位
    MOV   DPTR,#TAB
    ACALL XSLOOP1
    RET
;不用数码管不显示
    MOV R6,#02H
XSLOOP:
    MOV A,#10
    MOV DPTR,#TAB
    ACALL XSLOOP1
    DJNZ R6,XSLOOP
    RET
;移位显示子程序
XSLOOP1:
    MOVC A,@A+DPTR
    CLR C
    MOV R5,#8
XSLOOP2:
    RLC A
    MOV P1.0,C
    CLR P1.1
    NOP
    SETB P1.1
    NOP
    DJNZ R5,XSLOOP2
    RET
;0.5s延时子程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DELAY1:
         MOV  R7,#50
     DE2:MOV  R6,#100
     DE1:MOV  R0,#50
         DJNZ R0,$
         DJNZ R6,DE1
         DJNZ R7,DE2
         RET
DISPOFF:
    MOV R6,#3
    LCALL XSLOOP
    MOV DPTR,#TAB
    MOV A,#0
    LCALL XSLOOP1
    MOV A,#12
    LCALL XSLOOP1
    MOV A,#12
    LCALL XSLOOP1
    LCALL DELAY1
    RET
DISPON:
    MOV R6,#4
    LCALL XSLOOP
    MOV DPTR,#TAB
    MOV A,#0
    LCALL XSLOOP1
    MOV A,#11
    LCALL XSLOOP1
    LCALL DELAY1
    RET
DISPERRO:
    MOV DPTR,#TAB       ;错误信息显示程序
    MOV A,#11
    LCALL XSLOOP1
    MOV A,#0
    LCALL XSLOOP1
    MOV A,#1
    LCALL XSLOOP1          ;显示"no1820"
    MOV A,#8
    LCALL XSLOOP1
    MOV A,#2
    LCALL XSLOOP1
    MOV A,#0
    LCALL XSLOOP1
    LCALL DELAY1
    RET
;TAB:八段无小数点代码,TAB1:八段有小数点代码
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFh,0C8H,8EH
TAB1:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H


;15us延时子程序
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DELAY:
      LP:MOV  R1,#06H
     LP1:DJNZ R1,LP1
         DJNZ R0,LP
         RET

;15ms延时
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DELAY2:
         MOV R7,#30
     DE3:MOV R6,#248
         DJNZ R6,$
         DJNZ R7,DE3
         RET
;100ms延时
DY100MS:
         MOV R5,#10
     DE4:LCALL DY10MS
         DJNZ R5,DE4
         RET
;10ms延时
DY10MS:
         MOV R7,#20
     DE5:MOV R6,#0FFH
         DJNZ R6,$
         DJNZ R7,DE5
         RET
         END

⌨️ 快捷键说明

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