标题:
18B20测温原理图和单片机源程序
[打印本页]
作者:
木子灵晋
时间:
2017-7-13 09:06
标题:
18B20测温原理图和单片机源程序
利用18B20测试温度(在P1口上,自己看原理图和源程序),LCD1602显示(P0和P2)温度和警告,继电器(P1口)当温度达到一定时,会报警。具体的看原理图和源程序(没有最基础的单片机系统)。
0.png
(54.56 KB, 下载次数: 63)
下载附件
2017-7-13 16:24 上传
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar m,n;
uchar table[]={" ce shi wen du "};
uchar table1[]={"LZH temp= C "};
uchar table2[]={" WARNING "};
uchar table3[]={" "};
sbit dq=P1^0;
sbit jidianqi=P1^1;
sbit lcdrs=P2^5;
sbit lcdrw=P2^6;
sbit lcden=P2^7;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay1(uint n)
{
int i;
for(i=0;i<n;i++);
}
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
uchar num;
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0X40);
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay(5);
}
}
uchar init_18b20()
{
uchar flag,tt;
dq=1;
for(tt=0;tt<2;tt++);
dq=0;
for(tt=0;tt<200;tt++);
dq=1;
for(tt=0;tt<10;tt++);
flag=dq;
for(tt=0;tt<200;tt++);
return flag;
}
uchar read_bit()
{
uchar i;
dq=0;
dq=1;
for(i=0;i<3;i++);
return(dq);
}
void write_bit(uchar dd)
{
dq=0;
if(dd==1)
dq=1;
if(dd==0)
dq=0;
delay1(5);
dq=1;
}
uchar read_18b20()
{
uchar i,m,date;
date=0;
for(i=0;i<8;i++)
{
m=1;
if(read_bit())
{
date=date+(m<<i);
}
delay1(6);
}
return date;
}
void write_18b20(uchar value)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=value>>i;
temp=temp&0x01;
write_bit(temp);
}
}
void main()
{
dq=0;
init();
while(1)
{
uchar temp,TMPH,TMPL,i;
init_18b20();
write_18b20(0xcc);
write_18b20(0x44);
init_18b20();
write_18b20(0xcc);
write_18b20(0xbe);
TMPL = read_18b20();
TMPH = read_18b20();
temp = TMPL / 16 + TMPH * 16;
m = temp/10%10;
write_com(0x80+0x40+11);
write_date(0x30+m);
n = temp%10;
write_date(0x30+n);
if(temp>=30&&temp<40)
{
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(table2[i]);
}
delay(10);
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(table3[i]);
}
delay(10);
}
else if(temp>=40)
{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(50.59 KB, 下载次数: 77)
下载附件
2017-7-13 16:25 上传
所有资料51hei提供下载:
18B20.zip
(40 KB, 下载次数: 6)
2017-7-13 09:05 上传
点击文件名下载附件
原理图和程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1