标题:
温度传感器proteus仿真和单片机源代码
[打印本页]
作者:
DAQQ
时间:
2018-5-15 14:38
标题:
温度传感器proteus仿真和单片机源代码
温度传感器的使用,内含proteus仿真和源代码
哪里有错误请大家指教。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(20.89 KB, 下载次数: 28)
下载附件
2018-5-15 17:35 上传
0.png
(50.41 KB, 下载次数: 36)
下载附件
2018-5-15 17:35 上传
#include<reg51.h>
#include<intrins.h>
unsigned char code Str[]={"Temperature Now"};
unsigned char code Error[]={"Error! No DS18B20"};
unsigned char code Temp[]={"Value:"};
unsigned char code digit[10]={"0123456789"};
unsigned char code Cent[]={0xdf,"C"};
sbit DQ=P3^3;
sbit E=P2^4;
sbit RW=P2^3;
sbit RS=P2^2;
sbit BF=P0^7;
void delay1ms()
{
unsigned char i,j;
for(i=0;i<8;i++)
for(j=0;j<40;j++)
;
}
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
bit BusyChek(void)
{
bit busy;
RS=0;//RW=P2^3;RS=P2^2;
RW=1;
E=1;
_nop_();_nop()_;_nop_();_nop()_;
busy=BF;
E=0;
return busy;
}
void WriteCommand(unsigned char dictate)
{
while(BusyChek()==1);
RS=0;
RW=0;
E=0;
_nop_();_nop()_;
P0=dictate;
_nop_();_nop()_;_nop_();_nop()_;
E=1;
_nop_();_nop()_;_nop_();_nop()_;
E=0;
}
void WritePosition(unsigned char x)
{
WriteCommand(x|0x80);
}
void WriteASCII(unsigned char y)
{
while(BusyChek()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();_nop()_;_nop_();_nop()_;
E=1;
_nop_();_nop()_;_nop_();_nop()_;
E=0;
}
void LcdInit(void)
{
delaynms(16);
WriteCommand(0x38);
delaynms(5);
WriteCommand(0x38);
delaynms(5);
WriteCommand(0x0c);
delaynms(5);
WriteCommand(0x06);
delaynms(5);
WriteCommand(0x01);
delaynms(5);
}
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);
}
unsigned char ReadOneByte(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<5;time++)
;
}
void Display_Error(void)
{
unsigned char i;
WritePosition(0x00);
i=0;
while(Error[i]!='\0')
{
WriteASCII(Error[i]);
i++;
delaynms(100);
}
while(1)
;
}
void Display_Explain(void)
{
unsigned char i;
WritePosition(0x00);
i=0;
while(Str[i]!='\0')
{
WriteASCII(Str[i]);
i++;
delaynms(100);
}
}
void Display_Symbol(void)
{
unsigned char i;
WritePosition(0x40);
i=0;
while(Temp[i]!='\0')
{
WriteASCII(Temp[i]);
i++;
delaynms(50);
}
}
void Display_Dot(void)
{
WritePosition(0x49);
WriteASCII('.');
delaynms(50);
}
void Display_Cent(void)
{
WritePosition(0x4c);
i=0;
while(Cent[i]!='\0')
{
WriteASCII(Cent[i]);
i++;
delaynms(50);
}
}
void Display_Decimal(unsigned char x)
{
WritePosition(0x4a);
WriteASCII(digit[x]);
delaynms(50);
}
void Display_Integer(unsigned char x)
{
unsigned char u,v,w;
u=x/100;
v=(x%100)/10;
w=x%10;
WritePosition(0x46);
WriteASCII(digit[u]);
WriteASCII(digit[v]);
WriteASCII(digit[w]);
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;
LcdInit();
delaynms(4);
if(Init_DS18B20()==1)
Display_Error;
Display_Explain;
Display_Symbol;
Display_Dot();
Display_Cent();
while(1)
{
ReadyReadTemp;
TL=ReadOneByte();
TH=ReadOneByte();
TN=TH*16+TL/16;
TD=(TL%16)*10/16;
Display_Integer(TN);
Display_Decimal(TD);
delaynms(10);
}
}
复制代码
温度传感器.zip
(18.55 KB, 下载次数: 38)
2018-5-15 14:34 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
张没名儿
时间:
2018-9-29 15:31
感谢楼主
作者:
zhang961203
时间:
2018-11-10 16:22
想学做一下家庭智能报警系统 但是有些知识点不太懂,请问下这个温度传感器弄出来以后 通过什么方法可以让主机接收到温度传感器的信号呢?
作者:
琦君1999
时间:
2019-6-2 10:02
你的附件里并没有放proteus仿真文件啊?而且这个proteus仿真图明显不对啊,ds18b20都没有连接到单片机上
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1