数字温度计设计说明
1、原理图 D1LED-GREEN321U2VCCDQGNDDS18B20116.039383736353433322122232425262728R2100RR3100RR4100RR5100RR6100RPSENALEEAP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A151011121314151617R1U1ATC52R7100RXTAL1100R191RSTR8100RXTAL2293031 单片机选用ATC52、显示器选用共阴极的LG51AH、传感器用DS18B20;5V电源供电,100欧姆上拉电阻。 2、引脚说明 P1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 P2.0 P2.1 P2.2 P2.3 E D H C G A F B 1 2 3 4 3、编码(共阴极) 十进制 0 1 E D H C G A F B 十六进制 1 1 0 1 0 1 1 1 0D7H 0 0 0 1 0 0 01 1 1H 1 1 0 0 1 1 0 1 0CDH 0 1 0 1 1 1 0 1 5 DH 0 0 0 1 1 0 1 1 1BH 0 1 0 1 1 1 1 0 5EH 1 1 0 1 1 1 1 0 0DEH 0 0 0 1 0 1 0 1 15H 1 1 0 1 1 1 1 1 0DFH 0 1 0 1 1 1 1 1 5FH 0 0 0 0 1 0 0 0 08H 2 3 4 5 6 7 8 9 负号- 4、元件参数 电容 C1 33pF 5、程序
BIT0 EQU 40H;位寻址区28H单元的第0位 BIT1 EQU 41H;位寻址区28H单元的第1位 BIT2 EQU 42H;位寻址区28H单元的第2位 BIT3 EQU 43H;位寻址区28H单元的第3位 A_BIT EQU 20H;存放个位 B_BIT EQU 21H;存放十位 C_BIT EQU 22H;存放百位 D_BIT EQU 23H;存放小数
FLAG EQU 38H;检测18B20存在的标志位 DQ EQU P3.3;设置ds18b20的接线口 ;--------------------------------- ORG 0000H LJMP MAIN ORG 0030H
MAIN: MOV R3,#03H ;亮灭0000数字3次 MAIN0: MOV P1,#0D7H ;送显示0的代码 MOV P2,#00H LCALL DELAY1;延时960ms MOV P2,#0FFH LCALL DELAY1 DJNZ R3,MAIN0 CLR P2.7
MAIN1: ACALL RE_TEMP ACALL TURN ACALL DISPLAY JMP MAIN1
;------------------------读温度子程序--------- RE_TEMP:SETB DQ
ACALL RESET_1820 JB FLAG,ST
SETB P2.7 ;检测DS18B20不存在,点亮P2.7小灯 AJMP BACK ST:MOV A,#0CCH
ACALL WRITE_1820 MOV A,#44H
ACALL WRITE_1820 ACALL RESET_1820 MOV A,#0CCH
C2 33pF C3 10uF ACALL WRITE_1820 MOV A,#0BEH
ACALL WRITE_1820 ACALL READ_1820 BACK: RET
;--------------------复位子程序------------ RESET_1820:SETB DQ NOP CLR DQ MOV R1,#3 DLY:MOV R0,#107 DJNZ R0,$ DJNZ R1,DLY SETB DQ NOP NOP NOP
MOV R0,#25H T2:JNB DQ,T3 DJNZ R0,T2 JMP T4
T3:SETB FLAG JMP T5 T4:CLR FLAG JMP T7
T5:MOV R0,#117 T6:DJNZ R0,T6 T7:SETB DQ RET
;---------------------写18B20子程序--------- WRITE_1820:MOV R2,#8 CLR C WR1:CLR DQ MOV R3,#7 DJNZ R3,$ RRC A
MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP
DJNZ R2,WR1 SETB DQ RET
;------------------读18B20数据寄存器子程序--
READ_1820:MOV R4,#2 MOV R1,#29H RE0:MOV R2,#8 RE1:CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP
SETB DQ
MOV R3,#9;延时18微秒 RE2:DJNZ R3,RE2 MOV C,DQ
MOV R3,#23;延时46微秒 RE3:DJNZ R3,RE3 RRC A
DJNZ R2,RE1;检测八位数据是否传输完毕 MOV @R1,A;数据存放在29H(低字节)、28H单元(高字节) DEC R1
DJNZ R4,RE0 RET
;----------28H、29H单元循环右移四位----------------- TURN:
;MOV A,29H;29H单元低四位(小数)放27H单元 ;ANL A,#0FH ;MOV 27H,A
MOV A,29H;整数部分放至29H单元,最高位为符号位 MOV C,BIT0 RRC A
MOV C,BIT1 RRC A
MOV C,BIT2 RRC A
MOV C,BIT3 RRC A
MOV 29H,A RET
;------------------------------------------------------ DISPLAY:;MOV A,27H ;MOV B,#10 ;MUL AB MOV D_BIT,#8EH MOV A,29H JNB BIT3,DIS1;温度大于0摄氏度转移,否则处理
DEC A CPL A MOV C_BIT,#10 AJMP DIS2
DIS1: MOV B,#100 DIV AB
MOV C_BIT,A MOV A,B DIS2: MOV B,#10 DIV AB
MOV B_BIT,A MOV A_BIT,B MOV DPTR,#TAB MOV R0,#4 DP1:MOV R1,#250
LOOP:MOV A,C_BIT;百位不显示0,数值为11时代表不显示 JNZ LOP1 MOV A,#11
LOP1:MOVC A,@A+DPTR MOV P1,A CLR P2.0
ACALL DELAY SETB P2.0
MOV A,C_BIT;在百位为0或-号时十位不显示0 SUBB A, #1 JZ LOP2
MOV A,B_BIT JNZ LOP3 MOV A,#11 AJMP LOP3 LOP2:MOV A,B_BIT
LOP3:MOVC A,@A+DPTR MOV P1,A CLR P2.1 ACALL DELAY SETB P2.1
MOV A,A_BIT;个位不管是啥都显示 MOVC A,@A+DPTR ADD A, #20H MOV P1,A CLR P2.2
ACALL DELAY SETB P2.2 MOV A,D_BIT MOV P1,A CLR P2.3
ACALL DELAY SETB P2.3 DJNZ R1,LOOP DJNZ R0,DP1 RET
DELAY:MOV R7,#80;延时160微秒 DJNZ R7,$ RET DELAY1: MOV R4,#50;延时960MS M2: MOV R5,#50 M3: LCALL DELAY DJNZ R5,M3 DJNZ R4,M2 RET
TAB: DB 0D7H,11H,0CDH,5DH,1BH,5EH,0DEH,15H,0DFH,5FH,08H,00H ;编码顺序EDHCGAFB共阴极 END