标题:
ds18b20 lcd1602显示单片机源代码
[打印本页]
作者:
LJT520
时间:
2017-3-22 19:42
标题:
ds18b20 lcd1602显示单片机源代码
ds18b20 lcd1602显示
0.png
(49.16 KB, 下载次数: 28)
下载附件
2017-3-23 02:31 上传
单片机源代码:
# include <reg52.h>
# include <intrins.h>
# define uchar unsigned char
# define uint unsigned int //宏定义
void delay_50us(uint t); //延时函数
void write_com(uchar com); //LCD写指令函数
void write_data(uchar dat); //LCD写数据函数
void init(void); //LCD初始化函数
void write_one_byte(uchar dat); //向DS18B20写入一个字节
uchar read_one_byte(); //从DS18B20读出一字节
void init_ds18b20(); //DS18b20初始化
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
sbit DQ=P3^7; //定义按键
uchar temph,templ; //申明温度变量
uchar array[4]; //申明数组变量
void delay_50us(uint t) //延时函数
{
uchar j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_com(uchar com) //LCD写指令函数
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
void write_data(uchar dat) //LCD写数据函数
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
void init(void) //LCD初始化函数
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
void init_ds18b20() //DS18b20初始化
{
uint i,q;
DQ=1;
_nop_();
DQ=0;
i=70;
while(i--);
DQ=1;
i=0;
q=DQ;
delay_50us(2);
}
void write_one_byte(uchar dat)//向DS18B20写入一个字节
{
uint i, j;
for(j=0; j<8; j++)
{
DQ=0;
i++;
DQ=dat&0x01;
i=6;
while(i--);
DQ=1;
dat >>= 1;
}
}
uchar read_one_byte()//从DS18B20读出一字节
{
uchar dat;
uint i, j;
for(j=8; j>0; j--)
{
DQ=0; //每写入一位数据之前先把总线拉低1us
i++;
DQ=dat&0x01; //然后写入一个数据,从最低位开始
i=6;
while(i--); //延时68us,持续时间最少60us
DQ=1; //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
dat>>=1;
}
return dat;
}
void main() //主函数
{
int TEMP; //声明温度变量
init(); //液晶初始化
while(1)
{
init_ds18b20(); //ds18b20初始化
write_one_byte(0xcc); //跳过ROM操作命令
write_one_byte(0x44); //温度转换命令
init_ds18b20(); //ds18b20初始化
write_one_byte(0xcc); //跳过ROM操作命令
write_one_byte(0xbe); //发送读取温度命令
templ=read_one_byte(); //读取温度值共16位,先读低字节
temph=read_one_byte(); //再读高字节
TEMP=temph; //高8位赋予返回值
TEMP <<= 8; //左移8位
TEMP|=templ; //与低8位
if((temph&0xf8)==0xf8) //如果高8位为0
{
write_com(0x80+0x00); //写地址 80表示初始地址
write_data('-'); //显示负号
TEMP=TEMP-1;
TEMP=~TEMP; //负数的补码是原码取反,然后再加1。
}
else
{
write_com(0x80+0x00); //写地址 80表示初始地址
write_data('+'); //显示+
}
TEMP=TEMP*0.0625*10+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算由?.5,还是在小数点后面。
array[0]=TEMP/1000; //百位
array[1]=(TEMP%1000)/100; //十位
array[2]=(TEMP%100)/10; //个位
array[3]=TEMP%10; //小数
…………余下代码请下载附件…………
复制代码
下载:
ds18b20显示温度.zip
(22.03 KB, 下载次数: 49)
2017-3-22 19:41 上传
点击文件名下载附件
ds18b20 lcd显示
下载积分: 黑币 -5
作者:
guo1373766226
时间:
2017-12-12 22:30
新人学习,下载看看。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1