标题:
51单片机基于DS18B20的温度检测并显示在lcd1602上
[打印本页]
作者:
deathno2
时间:
2018-1-24 11:51
标题:
51单片机基于DS18B20的温度检测并显示在lcd1602上
我是新人,只是为了下载个程序才来发这个帖子,大家不要欺负我。
由于我现在手头的程序都是我帮我们公司做的项目程序,不敢发上来,只有发个简单的程序了。
仿真如下图:
QQ截图20180124114307.jpg
(131.03 KB, 下载次数: 68)
下载附件
2018-1-24 11:44 上传
程序:(有什么问题都可以来问我)
单片机源程序如下:
#include <reg52.h>
#include <stdio.h>
sbit DQ =P1^3;
sbit RS = P1^5;
sbit RW = P1^6;
sbit EN = P1^7;
void delay(unsigned int i);
void init_DS18B20(void);
unsigned char read_DS18B20(void);
void write_DS18B20(unsigned char dat);
double read_temperature(void);
void init_lcd(void);
void lcd_write_dat(unsigned char dat);
void lcd_write_cmd(unsigned char cmd);
void main(void)
{
double temp;
unsigned char i;
char str[16];
init_lcd();
init_DS18B20();
while(1)
{
temp = read_temperature();
if(temp)
{
sprintf(str,"%f",temp);
for(i=0;i<15;i++)
lcd_write_dat(str[i]);
delay(20000);
init_lcd();
}
}
}
void delay(unsigned int i)
{
while(i--);
}
void init_DS18B20(void)
{
bit flag=1;
while(flag==1)
{
DQ = 1;
DQ = 0;
delay(70);
DQ = 1;
delay(10);
flag=DQ;
delay(20);
}
}
unsigned char read_DS18B20(void)
{
unsigned char i = 0, dat = 0;
for (i=0; i<8; i++)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay(4);
}
return dat;
}
void write_DS18B20(unsigned char dat)
{
unsigned char i=0;
for (i=0; i<8; i++)
{
DQ = 0;
DQ = dat&0x01;
delay(3);
DQ = 1;
dat>>=1;
}
delay(5);
}
double read_temperature(void)
{
unsigned int temp=0;
double d;
init_DS18B20();
write_DS18B20(0xCC);
write_DS18B20(0x44);
init_DS18B20();
write_DS18B20(0xCC);
write_DS18B20(0xBE);
temp=read_DS18B20();
temp=temp+read_DS18B20()*0x100;
if(temp<0xf000)
{
d=temp*0.0625;
}
else
{
temp=~temp+1;
d=-(temp*0.0625);
}
return d;
}
void init_lcd(void)
{
lcd_write_cmd(0x38);
lcd_write_cmd(0x0f);
lcd_write_cmd(0x06);
lcd_write_cmd(0x01);
delay(100);
}
void lcd_write_dat(unsigned char dat)
{
P2 = dat;
RS = 1;
RW = 0;
EN = 1;
delay(100);
EN = 0;
delay(5000);
}
void lcd_write_cmd(unsigned char cmd)
{
P2 = cmd;
RS = 0;
RW = 0;
EN = 1;
delay(100);
EN = 0;
delay(5000);
}
复制代码
作者:
独摇66
时间:
2018-11-5 20:11
错误好多。。。
作者:
chenge
时间:
2018-11-7 12:56
还是很厉害的
作者:
Dremt
时间:
2018-11-7 14:26
还是特别厉害的
作者:
Josie
时间:
2018-11-7 21:42
这个可以用吗?
作者:
Josie
时间:
2018-11-7 21:42
我想拿来做一个实训的参考
作者:
a132a465a
时间:
2019-11-28 23:16
您好,如果我想把D0到D7连接到P0到P7,程序该如何修改,请指点
作者:
河神45454545
时间:
2020-12-19 17:01
为什么会一开始显示85?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1