1、;DS18B20 温度传感器和 7 个 LED 数码显示程序(原创程序,请支持)ORG 0000H;LED 数码管采用动态,P0 口接八个数据口,P2.0-P2.2 采用 3-8 译码器控制七个 LEDTX BIT P2.3 ;DS18B20 数据口接 P2.3FLAG BIT 10HTEMH EQU 50H ;整数部分TEML EQU 51H ;小数部分MOV SP,#60HCLR EAAJMP MAINORG 0200HMAIN:;MOV R0,#10LCALL TMP;温度传感器设置LCALL CHANG;温度转换为十进制STR:LCALL DISPLAY;温度显示;DJNZ R0,ST
2、RAJMP MAIN;/TMP:;温度传感器 DS18B20LCALL RESERTMOV A,#0CCHLCALL WRITEMOV A,#44HLCALL WRITE;LCALL DELAY750;延时 750MsLCALL RESERTMOV A,#0CCHLCALL WRITEMOV A,#0BEHLCALL WRITELCALL READMOV 30H,ALCALL READMOV 31H,ARETDELAY750:;750USDELAYSETB RS0MOV R0,#20MS2:MOV R1,#20MS1:MOV R2,#20DJNZ R2,$DJNZ R1,MS1DJNZ R0,
3、MS2CLR RS0RET;/CHANG:;温度转换为十进制PUSH APUSH BMOV A,31HANL A,#07HSWAP AMOV B,AMOV A,30HANL A,#0F0HSWAP AADD A,BMOV TEMH,AMOV A,30HANL A,#0FHMOV TEML,AMOV A,31HJNB ACC.3,POSI;区分正负温度;/负温度转化MOV A,TEMLSWAP ACPL AANL A,#0F0HADD A,#10HSWAP AMOV 1FH,CMOV TEML,AMOV A,TEMHCPL ASUBB A,#80HMOV C,1FHADDC A,#0MOV 70
4、H,#20AJMP NEGPOSI:MOV A,TEMHMOV B,#100DIV ABMOV 70H,AMOV A,BNEG:MOV B,#10DIV ABMOV 71H,AMOV A,BADD A,#10MOV 72H,A;整数部分分离MOV A,TEMLMOV B,#5MUL ABMOV B,#10DIV ABMOV 76H,BMOV 75H,AMOV A,TEMLMOV B,#2MUL ABADD A,75HMOV B,#10DIV ABMOV 75H,BMOV 74H,AMOV A,TEMLMOV B,#6MUL ABADDC A,74HMOV B,#10DIV ABMOV 74H,
5、BMOV 73H,A;小数部分分离POP BPOP ARET;/DISPLAY:;温度显示 70H-76H XXX.XXXX;采用默认的 12 位,精度 0.0625,-55+125SETB RS0MOV R0,#70HMOV R1,#7MOV R2,#0MOV DPTR,#TABLEDIS:MOV A,R0MOVC A,A+DPTRMOV P2,R2MOV P0,AINC R2INC R0LCALL DELAY1MSDJNZ R1,DISCLR RS0RET;/DELAY1MS:SETB RS1MOV R0,#100MS:MOV R1,#20DJNZ R1,$DJNZ R0,MSCLR RS
6、1RET;/RESERT:;DS18B20 初始化;SETB RS0SETB TXNOPCLR TXMOV R0,#240;RST:CLR TXDJNZ R0,$;DELAY480USSETB TXMOV R1,#30;DELAY 60USDJNZ R1,$JNB TX,RE1CLR FLAGSETB TXRETRE1:SETB FLAGMOV R2,#200DJNZ R2,$ ;DELAY 400usSETB TXRET;/WRITE:;DS18B20 写字节;SETB RS0CLR CMOV R0,#8WW:MOV R1,#6MOV R2,#23RRC ACLR TXDJNZ R1,$;D
7、ELAY 12USMOV TX,CDJNZ R2,$;DELAY 46USSETB TXNOPDJNZ R0,WWSETB TX;CLR RS0RET;/READ:;DS18B20 读字节;SETB RS0CLR CMOV R0,#8;八位RE:SETB TXMOV R1,#10;延时 20usMOV R2,#15 ;延时 30usCLR TXNOPSETB TX;此句最重要,读取数据的时候一定要释放总线,否则读不出暂存器数据DJNZ R1,$MOV C,TXDJNZ R2,$RRC ADJNZ R0,RESETB TX;CLR RS0RET;/TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9 需要加点应用 ADD 80H 即可DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;0.-9.DB 40H ;-END