显示4小数支持正 温度DJNZ指令,作为双周期指令*/RS BIT P2.4RW BIT P2.5E BIT P2.6
COM数据30HDAT数据31HBAI数据32HSHI数据33HGEX数据34HTH数据35HTL数据36HXI数据37H
0000HSJMP制造商0030HMAIN:MOV SP,40HLCALLINIT_LCD N1:LCALTEMP_18B20N1
TEMP_18B20:LCALL INIT_18B20 MOV COM,#0CCH LCALL WRITE_18B20 MOV COM,#44H LCALL WRITE_18B20 LCALL DELAY200MS LCALL INIT_18B20 MOV COM,#0CCH LCALL WRITE_18B20 MOV COM,#0BEH LCALL WRITE_18B20 LCALL READ_18B20 MOV TL,DAT LCALL READ_18B20 MOV TH,DAT RETINIT_18B20:SETB DQ NOP CLR DQ LCALL DELAY600US//延时600US SETB DQ MOV R0,#20N2:NOP DJNZ R0,N2/Delay 60US JB DQ,$LCALLDelAY600US/等待18B20响应以完成SETB DQ RET
WRITE_18B20:MOV A,COMMOV R2,#8WR1:SETB DQNOP CLR DQNOPRRC AMOV DQ,CMOV R3,#30DJNZ R3,$DJNZ R2,WR1SETB DQ//写完一个数据必须将DQ拉到,因为RET //若最后一位C为低电平超过600US则DS18B20被复位READ_18B20:MOV R2,#8 RE01:SETB DQ NOP CLR DQNOP SETB DQ MOV R3、5 DJNZ R3、$MOV C、DQ MOV R3、23 DJNZ R3、$RRC A DJNZ R2、RE01 MOV DAT、RET
LCD18B20:MOV R0,04 MOV A,TH N8:RL A DJNZ R0,N8 MOV TH,MOV A,TL SWAP A ANL A,0FH ORL A,TH MOV TH,A整数部分MOV A,FH ANL A,TL MOV TL,A小楼部分RET
〔10〕DIV AB MOV SH,MOV GEX,B MOV GEX,B MOV A,TL MOV R0,4×MOV R1,4×MOV R1,X//四个小数,从高到低存储M1:MOV B, 10 MUL AB MOV B, 16 16 DIVAB MOV@ R1,Inc R1,Inc R11,Inc R1,JB,JB,MOV M1,Inc RET。BCD:MOV A,TH MOV B,100×DIV AB MOV BAI,MOV A,B MOV A,B MOV B,
INIT_LCD:MOV COM、00111000B LCALL WRITE_COM MOV COM、000110B LCALL WRITE_COM MOV COM、000110B LCALL WRITE_COM、000110B LCALL WRITE_COM MOV COM、00000000000001B LCALL WRITE_COM、00001B LCALL WRITE_COM RET COM
DISP_LCD:MOV COM,#80H LCALL WRITE_COM MOV DPTR,#TABLE1 MOV R1,#16 MOV R0,#00 M2:MOV A,R0 MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT INC R0 LCALL DELAY1MS DJNZ R1,M2 MOV COM,#0C0H LCALL WRITE_COM MOV DPTR,#TABLE3 MOV R1,#05H MOV R0,#00H M3:MOV A,R0 MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT INC R0 LCALL DELAY1MS DJNZ R1,M3 MOV DPTR,#TABLE2 MOV A,BAI MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT MOV A,SHI MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT MOV A,GEX MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT MOV A,#10 MOV DPTR,#TABLE2 MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT MOV R1,#04 MOV R0,#XI M4:MOV A,@R0 MOVC A,@A+DPTR MOV DAT,A LCALL WRITE_DAT LCALL DELAY1MS INC R0 DJNZ R1,M4 MOV A,#11 MOVC A,@A+DPTR MOVDAT,LCALL WRITE_DAT LCALL DELAY1MS RET
DELAY200MS:错误0usMOVR7、#04HDL6:MOV R6、#74HDL5:MOV R5、#0D6H DJNZ R5、$DJNZ R6、DL5 DJNZ R7、DL6 NOP RET
延迟1MS:错误0usMOVR7,HDL4:MOV R6,8EHDL3:MOV R5,H DJNZ R5,$DJNZ R6,DL3 DJNZ R7,DL4 RET
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
包含.#include.#include.#include.#include..#include..#定义..#定义无符号的uin无符号int..#定义uchar无符号无符号字符..#定义uchar无符号无符号字符字符..#定义uchar无符号字符字符.#无符号字符字符.=P2.^.^4; sbucharRW=P2.^4.^4 4; sbit RW=P2.^4; sbit RW=P2.^5; sbit e.^5;sbit e e e e=P2.^6; sbit e DQ=sbit DQ=P1 DQ=P1.^.=P1.=P1.^.=P1.^.数字表2}%uchar..{temp 3;
空延迟(uchar t)error 0us 1mS延迟{无符号字符a,b;for(t=1;T>0;t--)for(b=142;b>0;b--)for(a=2;a>0;a--)};
****************************************void init_ds18b20(){dq=1;_nop_();dq=0;for(i=0;I dq=1);for(i=0;i.(dq);dq=1表示没有DS18B20(i=0;I dq=1}
Void WriteOne Byte(uchar dat){uchar j;for(j=8;J>0;j--){dq=1;_nop_();至少1mS延迟DQ=0;_nop_();dq=(bit)(dat for(i=0;I DQ=1;/for(i=0;I dat>=1;}
Uchar ReadOneByte() {uchar j,dat;for(j=0;J{dq=1;_nop_();至少1uS恢复周期DQ=0;_nop_();DQ=1;for(i=0;I dat>=1;if(dq=1)dat|=0x80;sedelat|=0x00;for(i=0;i}(dat)}
temp_ds18b20(){uchar th,tl;uint x;浮点p;init_ds18b20();init_ds18b20();init_init_ds18b20();init_ds18b20();init_init_ds18b20();inieOneByte(0xcc);WriteOneOneByte(0xcc);WriteOneOneByte(0xcc);WriteOneByeByte(0xcc);WByte(0xcc);WByte(0xcc);WeByte(0xcc);WeBcc);WByte(0xcc);WByte(0xcc);WeBcc);Wyte;WeByte(0xbe);ReadeByte=ReadeByte();ReadOnxByte(=ReadexByte;ReadOnxxxxx.**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************整数和整数,分数整数从分数中分离出来,并且分数部分,t=(g-t=(g-t=(g-d)*100*.//e=0;e=1;e=0;}
Void init_lcd() {write_com(0x38);write_com(0x0D);write_com(0x06);write_com(0x01);}
Void disp_lcd() {write_com(0x80){write_com(write_com(0x80);for(i=0;I{write_dat(表2{2{i{表2{i}}表2{i}})for (i=0{write_write_dat(表2{i}}}}}}}});.(5);}write_write_write_dat(I=0;I{write_I{write_dat(表2{表2{表2{i}}}}}}}表2{2{i}}}}});.(5)}}}}}}}}}}}}}};.(5)}}}}}}}}}表1{shi};_dat(1{write}});tabledat(表1{write_dat(表1}}}};tabled****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************{temp_ds18b20();datchx();disp_lcd();}}
|