锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

DS18B20温度传感器多点测温Proteus仿真+单片机汇编语言程序

时间:2023-09-05 01:07:00 230b在线红外温度传感器

DQ BIT P1.0

FLAG BIT 00H

FLAG_NEG BIT 01H

TEMP_L EQU 30H

TEMP_H EQU 31H

TEMP_INT EQU 32H

TEMP_DP EQU 33H

TEMP_100 EQU 34H

TEMP_10 EQU 35H

TEMP_1 EQU 36H

WR_LCD BIT P3.6

RD_LCD BIT P3.7

ORG 0000H

LJMP START

ORG 1000H

START: MOV SP,#60H

LCALL INIT

MAIN: LCALL READ_TEMP

LCALL PROC_TEMP

LJMP MAIN

;*********************************

READ_TEMP:

SETB DQ

LCALL INI_DQ

JB FLAG,RE_0

RET

RE_0: MOV A,#0CCH

LCALL WRITE_DQ

MOV A,#44H

LCALL WRITE_DQ

LCALL DISPLAY ;调用lcd显示程序并延迟

LCALL INI_DQ

MOV A,#0CCH

LCALL WRITE_DQ

MOV A,#0BEH

LCALL WRITE_DQ

LCALL READ_DQ

RET

;************DS18B20初始化程序***************

INI_DQ:

SETB DQ

NOP

NOP

CLR DQ

MOV R1,#3

INI_0: MOV R0,#80

DJNZ R0,$

DJNZ R1,INI_0

SETB DQ

NOP

NOP

NOP

MOV R7, #25

INI_1:JNB DQ,INI_2

DJNZ R7,INI_1;延时

LJMP INI_3

INI_2: SETB FLAG ;标志位

LJMP INI_4

INI_3: CLR FLAG

LJMP INI_5

INI_4:MOV R0,#80

DJNZ R0,[ DISCUZ_CODE_1 ]nbsp; ;时序要求延迟一段时间

INI_5:SETB DQ

RET

;**************DS18B20写命令******************

WRITE_DQ:

MOV R6, #8

CLR C

Tloop: CLR DQ

MOV R2,#6

DJNZ R2,$

RRC A ;最低位移到C

MOV DQ,C

MOV R2,#23

DJNZ R2,$

SETB DQ

NOP

DJNZ R6,Tloop

SETB DQ

RET

;**************读DS18B20数据函数*************

READ_DQ:

MOV R5, #2

MOV R0, #30H

READ_0: MOV &bsp;     R6,        #8

READ_1:        CLR                C

SETB DQ

NOP

NOP

CLR        DQ

NOP

NOP

NOP

NOP

SETB        DQ

MOV         R2,#9

DJNZ         R2,$

MOV         C,DQ

MOV         R3,#23

DJNZ         R3,$

RRC                A

DJNZ        R6,        READ_1

MOV         @R0,A

INC         R0

DJNZ         R5,READ_0

SETB         DQ

RET

;***************温度数据处理程序*****************

PROC_TEMP:

CLR FLAG_NEG

MOV A,TEMP_L

SWAP A

ORL A,#0F0H

MOV TEMP_INT,A

MOV A,TEMP_H

SWAP A

ORL A,#0FH

ANL TEMP_INT,A

MOV A,TEMP_H

JB        ACC.7,NEGTIVE

MOV A,TEMP_L

ANL A,#0FH

MOV DPTR,#TAB3

MOVC A,@A+DPTR

MOV TEMP_DP,A

LJMP PRO_0

NEGTIVE:                                        ;温度值为负时处理程序,按实际情况,处理过程比较复杂

SETB FLAG_NEG

MOV A,TEMP_L

CPL A

ANL A,#0FH

MOV R1,A

CJNE R1,#0FH,PRO_1

PUSH ACC

MOV A,TEMP_INT

SUBB A,#1

MOV TEMP_INT,A

POP ACC

MOV TEMP_DP,#00H

LJMP PRO_2

PRO_1:        ADD A,#1

MOV DPTR,#TAB3

MOVC A,@A+DPTR

MOV TEMP_DP,A

PRO_2:        MOV A,TEMP_INT

CPL A

MOV TEMP_INT,A

PRO_0:        MOV A,TEMP_INT

MOV B,#100

DIV AB

MOV TEMP_100,A

MOV A,B

MOV B,#10

DIV AB

MOV TEMP_10,A

MOV TEMP_1,B

RET

;**************LED显示***********************

;**************LCD初始化**********************

INIT:        MOV DPTR,#8000H

SETB        WR_LCD

SETB        RD_LCD

MOV A,#01H

ACALL F_BUSY

MOVX @DPTR,A

ACALL F_BUSY

MOV A,#38H

MOVX @DPTR,A

ACALL F_BUSY

MOV A,0EH

MOVX @DPTR,A

ACALL F_BUSY

MOV A,#0CH

MOVX @DPTR,A

RET

;***********写LCD函数*************************

DISPLAY:        MOV DPTR,#8000H                ;写第一行数据

MOV A,#80H

ACALL F_BUSY

MOVX @DPTR,A

MOV DPTR,#8100H

MOV R1,#0

D1:                LCALL TRANS1;

ACALL F_BUSY

MOVX @DPTR,A

INC R1

CJNE R1,#16,D1

MOV DPTR,#8000H                ;写第二行数据

MOV A,#0C0H

ACALL F_BUSY

MOVX @DPTR,A

MOV DPTR,#8100H

LCALL WRITE_NEGTIVE

ACALL F_BUSY

MOVX @DPTR,A

MOV A,TEMP_100

LCALL WRITE_INT

ACALL F_BUSY

MOVX @DPTR,A

MOV A,TEMP_10

LCALL WRITE_INT

ACALL F_BUSY

MOVX @DPTR,A

MOV A,TEMP_1

LCALL WRITE_INT

ACALL F_BUSY

MOVX @DPTR,A

MOV A,#2EH

ACALL F_BUSY

MOVX @DPTR,A

MOV A,TEMP_DP

LCALL WRITE_INT

ACALL F_BUSY

MOVX @DPTR,A

MOV A,#20H

ACALL F_BUSY

MOVX @DPTR,A

MOV A,#0DFH

ACALL F_BUSY

MOVX @DPTR,A

MOV A,#43H

ACALL F_BUSY

MOVX @DPTR,A

RET

;**************显示第一行******************

TRANS1:        PUSH DPH

PUSH DPL

MOV A,R1

MOV DPTR,#TAB1;

MOVC A,@A+DPTR

POP DPL

POP DPH

RET

;**************显示第二行******************

WRITE_NEGTIVE:

JB FLAG_NEG,WN

MOV A,#20H

RET

WN:                MOV A,#2DH

RET

WRITE_INT:

PUSH DPH

PUSH DPL

MOV DPTR,#TAB2

MOVC A,@A+DPTR

POP DPL

POP DPH

RET

;***********判断LCD是否忙******************

F_BUSY:        PUSH DPH

PUSH DPL

PUSH PSW

PUSH Acc

LOOP:        MOV DPTR,#8200H

MOVX A,@DPTR

JB Acc.7,LOOP

POP Acc

POP PSW

POP DPL

POP DPH

RET

DELAY_10MS:

MOV R3,#20

DEL_1:        MOV R4,#248

DJNZ R4,$

DJNZ R3,DEL_1

RET

TAB1:         DB  20H,20H,20H,'T','e','m','p','r','e','t','u','r','e',20H,20H,20H

;**************LCD数字字模

TAB2:         DB  30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

;**********小数位转换********************

TAB3:        DB        00H,01H,01H,02H

DB        02H,03H,04H,04H

DB        05H,06H,06H,07H

DB        07H,08H,09H,09H

;************无小数点位的段码******************

TAB4:        DB        0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

;*****************有小数点**********************

TAB5:        DB        40H,79H,24H,30H,19H,12H,02H,78H,00H,10H

END

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章