DS18B20温度传感器、LCD1602液晶显示的代码;XRF多功能51单片机开发板;DS18B20测温程序(液晶显示,可测量0-99度);************************************************************************** ;************************************************************** TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区TEMPER_H EQU 35H ;TEMPER_NUM EQU 60H;温度值存储TEMPER_GE EQU 61HTEMPER_SHI EQU 62HTEMPER_SAVE EQU 63HFLAG1 BIT 00HFLAG2 BIT 01HRS BIT p2.0;液晶控制接口RW BIT p2.1E BIT p2.2DQ BIT p3.5;单总线口 ORG 0000H AJMP MAIN ORG 0030HMAIN: MOV SP,#70H LCALL GET_TEMPER LCALL TEMPER_COV LCALL LCDDISP lcall d100ms lcall d100ms LJMP MAIN NOP ;**************************************************;读出转换后的温度值 ;**************************************************GET_TEMPER: SETB DQ ; 定时入口 BCD: LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ; 若DS18B20不存在则返回 S22: LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配------0CC命令 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL D100MS 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的程序,从DS18B20中读出一个字节的数据 ;**************************************************************READ_1820: MOV R2,#8 RE1: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE1 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 NOP DJNZ R2,WR1 SETB DQ 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 NOP NOP CLR DQ NOP NOP NOP 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 ;;**************************************************** ;将从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 BIN_BCD RET;;**************************************************** ;将16进制的温度数据转换成压缩BCD码 ;;****************************************************BIN_BCD: MOV A,TEMPER_NUMMOV B,#10DIV ABMOV TEMPER_SHI,AMOV TEMPER_GE,BRET;****************************************************;DS18B20初始化程序 ;;****************************************************INIT_1820: SETB DQ NOP CLR DQ MOV R0,#250TSR1: 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 ;*************************************************;数码显示程序;*************************************************;*************************************************;液晶显示程序;*************************************************LCDDISP: mov p1,#01h;清屏 call enrw mov p1,#38h;设为8位,5*7字 型两行 call enrw mov p1,#0Ch call enrw mov p1,#06h call enrw mov p1,#80h call enrw mov dptr,#yjtab call rwram mov p1,#0C0h call enrw mov dptr,#yjtab1 call rwramW_TEM: mov p1,#0CCh call enrw MOV DPTR,#ASCII MOV A,TEMPER_SHI MOVC A,@A+DPTR MOV P1,A setb rs clr rw clr e call D500us setb e MOV DPTR,#ASCII MOV A,TEMPER_GE MOVC A,@A+DPTR MOV P1,A setb rs clr rw clr e call D500us setb e RETenrw:clr rs clr rw clr e call D500us setb e retrwram:mov r1,#00ha1: mov a,r1 movc a,@a+dptr call rwram2 inc r1 cjne a,#00h,a1 retrwram2:mov p1,a setb rs clr rw clr e call D500us setb e ret;**************R***********************************;延时子程序;*************************************************D500us:MOV R6,#250;延时500usDJNZ R6,$ RET DELAY1:MOV R7,#20H DJNZ R7,$ RET D100MS: MOV R6,#200D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 RETyjtab: db ' XRF MCS-51 ',00hyjtab1:db 'temperature:**`C',00hASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H end