温度传感器是ds1621的
多点测温是ds18B20的
希望对大家有所帮助
另外,求ds1621的多点测温
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机汇编语言源程序如下:
- 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 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
复制代码
所有资料51hei提供下载:
rogerjordan-5028051-多点测温.rar
(50.47 KB, 下载次数: 41)
hs07zdhgj-3012459-24 DS1621温度传感器实验.rar
(40.63 KB, 下载次数: 35)
|