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

📄 ds18b20与1602显示.txt

📁 关于ds18b20的所有有用处的好资料
💻 TXT
字号:
;**************************************************************
;    基于DS18B20 液晶和数码管同步显示程序          
;   可测量0-99度
;  DAtE :  2006.3.13     12MHZ晶振         
;**************************************************************           
TEMPER_L    EQU  36H ;从DS18B20中读回高位,低位暂存区
TEMPER_H    EQU 35H ;
TEMPER_NUM  EQU 60H;温度值存储
TEMPER_GE   EQU 61H
TEMPER_SHI  EQU 62H
TEMPER_SAVE EQU 63H
FLAG1      BIT   00H
FLAG2      BIT   01H
RS         BIT   p3.5;液晶控制接口
R_W        BIT   p3.6
E          BIT   p3.7
DB0_DB7    EQU  P0
DQ         BIT   P3.4;单总线口
           ORG  0000H
           AJMP MAIN
           ORG  0030H
MAIN:      MOV SP,#70H          	   
LOOP:      LCALL GET_TEMPER 
           LCALL TEMPER_COV 	   
           LJMP LOOP
           NOP 
;****************************************************
;DS18B20初始化程序 
;;****************************************************
INIT_1820:SETB DQ  
          CLR DQ 
          MOV R0,#250
TSR1:     DJNZ R0,TSR1 ; 延时520us 
          SETB DQ 
          MOV R0,#25H ;96US-25H 
TSR2:     DJNZ R0,TSR2 
          JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在 
          LJMP TSR4 ; 延时 
TSR3:     SETB FLAG1 ; 置标志位,表示DS1820存在 
          LJMP TSR5 
TSR4:     CLR FLAG1 ; 清标志位,表示DS1820不存在 
          LJMP TSR7 
TSR5:     MOV R0,#06BH ;200US 
TSR6:     DJNZ R0,TSR6 ; 延时 
TSR7:     SETB DQ ;拉高总线
          RET
;;**************************************************** 
;将从DS18B20中读出的温度数据进行转换
;;****************************************************  
TEMPER_COV:MOV A,#0F0H 
           ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值 
           SWAP A 
           MOV TEMPER_NUM,A ;得到低四位
           MOV A,TEMPER_L 
           JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值 
           INC TEMPER_NUM 
TEMPER_COV1:MOV A,TEMPER_H 
           ANL A,#07H 
           SWAP A 
           ORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到值
           MOV TEMPER_NUM,A ; 保存变换后的温度数据 
           LCALL CH_ASCII
           RET
;;**************************************************** 
;将16进制的温度数据转换成BCD码
;;****************************************************
CH_ASCII:MOV A,TEMPER_NUM
         MOV B,#10
         DIV AB
         MOV TEMPER_SHI,A
         MOV TEMPER_GE,B
         MOV A,TEMPER_SAVE
         CJNE A,TEMPER_GE,ZW
FHRET:   MOV TEMPER_SAVE,TEMPER_GE
         RET
ZW:      CALL LCD_DISP
         AJMP FHRET
	 RET
;;*************************************************
;液晶显示程序
;*************************************************
LCD_DISP:LCALL INITIAL;夜晶初始
	 LCALL CLS    ;夜晶清屏
         MOV A,#80H;显示 "'Welcome Our car!"
         LCALL WRITE_COM
         MOV DPTR,#TAB0
	 LCALL DISP
	 MOV A,#0C0H;显示" TEMPER:  `C "
	 LCALL WRITE_COM
	 MOV DPTR,#TAB1
	 LCALL DISP	 
	 MOV A,#0C9H 
         LCALL WRITE_COM     ;显示 高位温度
	 MOV DPTR,#ASCII
	 MOV A,TEMPER_SHI
	 MOVC A,@A+DPTR
	 LCALL WRITE_DATA
	 MOV A,#0CAH     ;显示 低位
	 LCALL WRITE_COM
	 MOV DPTR,#ASCII
	 MOV A,TEMPER_GE
	 MOVC A,@A+DPTR
	 LCALL WRITE_DATA
	 RET
;;**************************************************
;读出转换后的温度值 
;;**************************************************
GET_TEMPER:SETB      DQ ; 定时入口 
BCD:       LCALL     INIT_1820 
           JB            FLAG1,S22 ;FLAG1=1,存在DS18B20 转到SS2
           LJMP      BCD ; 若DS18B20不存在则返回 
S22:       LCALL     DELAY1 
           MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
           LCALL     WRITE_1820 
           MOV A,#44H ; 发出温度转换命令 
           LCALL WRITE_1820 
           LCALL DELAY 
CBA:       LCALL INIT_1820 
           JB FLAG1,ABC 
           LJMP CBA 
ABC:       LCALL DELAY1 
           MOV A,#0CCH ; 跳过ROM匹配 
           LCALL WRITE_1820 
           MOV A,#0BEH ; 发出读温度命令 
           LCALL WRITE_1820 
           LCALL READ_18200 ;READ_1820 
           RET 
;******************************************************
;写DS18B20的程序 
;******************************************************
WRITE_1820:MOV R2,#8 
          CLR C 
WR1:      CLR DQ 
          MOV R3,#6 
          DJNZ R3,$ 
          RRC A 
          MOV DQ,C 
          MOV R3,#23 
          DJNZ R3,$ 
          SETB DQ 
          DJNZ R2,WR1 
          SETB DQ 
          RET
;**************************************************************
;读DS18B20的程序,从DS18B20中读出一个字节的数据 
;**************************************************************
READ_1820:MOV R2,#8 
RE1:      CLR C 
          SETB DQ 
          CLR DQ 
          SETB DQ 
          MOV R3,#7 
          DJNZ R3,$ 
          MOV C,DQ 
          MOV R3,#23 
          DJNZ R3,$ 
          RRC A 
          DJNZ R2,RE1 
          RET 
;**************************************************** 
;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
;****************************************************
READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出 
          MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) 
RE00:     MOV R2,#8 
RE01:     CLR C 
          SETB DQ 
          CLR DQ 
          SETB DQ 
          MOV R3,#7 
          DJNZ R3,$ 
          MOV C,DQ 
          MOV R3,#23 
          DJNZ R3,$ 
          RRC A 
          DJNZ R2,RE01 
          MOV @R1,A 
          DEC R1 
          DJNZ R4,RE00 
          RET 
;;;***************************************************************************** 
;*********初始化***********
INITIAL:  MOV A,#38H       
          LCALL  WRITE_COM
          MOV  A,#0CH
          LCALL  WRITE_COM
          MOV  A,#06H
          LCALL   WRITE_COM
          RET
;********写指令**********
WRITE_COM: LCALL  CHECK_BUSY
           CLR  E
           CLR  RS
           CLR  R_w
           SETB  E
           MOV DB0_DB7,A
           CLR  E
           RET
;*********写数据**********
WRITE_DATA:LCALL  CHECK_BUSY
           CLR  E
           SETB RS
           CLR  R_W
           SETB  E
           MOV  DB0_DB7,A
           CLR  E
           RET
;*******清屏幕********
CLS:       MOV A,#01H
           LCALL  WRITE_COM
           RET
;******查询忙********
CHECK_BUSY: CLR   RS
	    SETB  R_W
	    SETB  E	 
	    LCALL  DEL
	    RET
;*****字符串显示*****
DISP:       PUSH  ACC
DISP_LOOP:  CLR A
            MOVC  A,@A+DPTR
            JZ  END_DISP
            LCALL WRITE_DATA
            INC  DPTR
            SJMP DISP_LOOP
END_DISP:   POP ACC
            RET
;******延时********
DEL:       MOV  R6,#10
L1:        MOV  R7,#248
           DJNZ R7,$
           DJNZ R6,L1
           RET
;;;*************************************************************************
;*************************************************
;延时子程序
;*************************************************
DELAY:MOV R6,#250;延时500us
      DJNZ R6,$ 
      RET 
DELAY1:MOV R7,#20H 
      DJNZ R7,$ 
      RET
TAB0: DB 'Welcome Our Car!',00H
TAB1: DB ' TEMPER:   `C! ',00H
ASCII:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
      END

⌨️ 快捷键说明

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