标题:
单片机温度传感器检测
[打印本页]
作者:
123单片机520
时间:
2021-3-8 07:47
标题:
单片机温度传感器检测
1.png
(75.76 KB, 下载次数: 34)
下载附件
2021-3-8 15:16 上传
#include<reg51.h>
#include<intrins.h>
unsigned char code digit[10]={"0123456789"};
unsigned char code Str[]={"Test by DS18B20"};
unsigned char code Error[]={"Error!Check!"};
unsigned char code Temp[]={"Temp:"};
unsigned char code Cent[]={"Cent"};
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80);
}
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInitiate(void)
{
delaynms(15);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x0c);
delaynms(5);
WriteInstruction(0x06);
delaynms(5);
WriteInstruction(0x01);
delaynms(5);
}
sbit DQ=P1^7;
unsigned char time;
bit Init_DS18B20(void)
{
bit flag;
DQ = 1;
for(time=0;time<2;time++)
DQ = 0;
for(time=0;time<200;time++
DQ = 1;
for(time=0;time<10;time++)
flag=DQ;
for(time=0;time<200;time++)
return (flag); //·μ»Ø¼ì2a3é1|±êÖ¾
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat;
for (i=0;i<8;i++)
{
DQ =1;
_nop_();
DQ = 0;
dat>>=1;
_nop_();
DQ = 1; ¸
for(time=0;time<2;time++)
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
for(time=0;time<8;time++)
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=0; i<8; i++)
{
DQ =1;
_nop_();
DQ=0;
DQ=dat&0x01;
for(time=0;time<10;time++)
DQ=1;
for(time=0;time<1;time++)
dat>>=1;
}
for(time=0;time<4;time++)
}
void display_error(void)
{
unsigned char i;
WriteAddress(0x00);
i = 0;
while(Error[i] != '\0')
{
WriteData(Error[i]);
i++;
delaynms(100);
}
while(1)
}
void display_explain(void)
{
unsigned char i;
WriteAddress(0x00);
i = 0;
while(Str[i] != '\0')
{
WriteData(Str[i]);
i++;
delaynms(100);
}
}
void display_symbol(void)
{
unsigned char i;
WriteAddress(0x40);
i = 0;
while(Temp[i] != '\0')
{
WriteData(Temp[i]);
i++;
delaynms(50);
}
}
void display_dot(void)
{
WriteAddress(0x49);
WriteData('.');
delaynms(50);
}
void display_cent(void)
{
unsigned char i;
WriteAddress(0x4c);
i = 0;
while(Cent[i] != '\0')
{
WriteData(Cent[i]);
i++;
delaynms(50);
}
}
void display_temp1(unsigned char x)
{
unsigned char j,k,l;
j=x/100;
k=(x%100)/10;
l=x%10;
WriteAddress(0x46);
WriteData(digit[j]);
WriteData(digit[k]);
WriteData(digit[l]);
delaynms(50);
}
void display_temp2(unsigned char x)
{
WriteAddress(0x4a);
WriteData(digit[x]);
delaynms(50);
}
void ReadyReadTemp(void)
{
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
for(time=0;time<100;time++)
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
}
void main(void)
{
unsigned char TL;
unsigned char TH;
unsigned char TN;
unsigned char TD;
LcdInitiate();
delaynms(5);
if(Init_DS18B20()==1)
display_error();
display_explain();
display_symbol();
display_dot();
display_cent();
while(1)
{
ReadyReadTemp(); ¸
TL=ReadOneChar();
TH=ReadOneChar();
TN=TH*16+TL/16;
TD=(TL%16)*10/16;
display_temp1(TN);
display_temp2(TD);
delaynms(10);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1