找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

DS18B20+1602LCD显示

[复制链接]
admin 发表于 2012-9-2 14:39:28 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
typedef bit BOOL ;
sbit rs=P2^6;
sbit rw=P2^5;
sbit ep=P2^7;

sbit DQ=P1^0;
uchar tempH=0;
uchar tempL=0;
uchar temperature;

sbit flag=P1^2;//用于标记dS18b20有没有初始化成功




BOOL lcd_bz(void){ // 测试LCD忙碌状态
uchar result;
rs=0;
rw=1;
ep=1;
result=(BOOL)(P0&0x80);
ep=0;
return result;
}

void delay(uchar i){ //延时程序
uchar j,k;
for(j=0;j<i;j++)
for(k=0;k<125;k++){}
}


void lcd_wcmd(uchar cmd){ // 写入指令数据到LCD
while(lcd_bz());
rs=0;
rw=0;
ep=0;
P0=cmd;
ep=1;
ep=0;
}

void lcd_wdata(uchar dat){ // 写入字符显示数据到LCD
while(lcd_bz());
rs=1;
rw=0;
ep=0;
P0=dat;
ep=1;
ep=0;

}


void lcd_init(void){
lcd_wcmd(0x38);
delay(15);
lcd_wcmd(0x0c);
delay(15);
lcd_wcmd(0x06);
delay(15);
lcd_wcmd(0x01);
delay(15);
}

void lcd_pos(uchar pos){
lcd_wcmd(pos|0x80);
}
//==================================================================================

void delayms(uchar i){ //延时程序
while(i--);
}

void Init_DS18B20(void){ //DS18B20初始化
uchar x=0;
DQ=1;
delayms(4);
DQ=0;
delayms(50);
DQ=1;
delayms(12);
if(DQ==0)
flag=1;
else
flag=0;
delayms(20);
DQ=1;


}


uchar ReadOneChar(void){ //DS18B20读一个字节
uchar i;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=1;
delayms(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat=dat|0x80;
delayms(5);
}
return(dat);
}



void WriteOneChar(uchar dat){ //DS18B20写一个字节
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delayms(5);
DQ=1;
dat>>=1;
}

delayms(5);
}

uchar ReadTemperature(void){ //向DS18B20读温度值
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
delayms(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
tempL=ReadOneChar();
tempH=ReadOneChar();

temperature=((tempH&0x0f)<<4 )|((tempL&0xf0)>>4);

delayms(200);
return(temperature);
}
//================================================================================================

void main(){
uchar i;
uchar j;
lcd_init();
while(1){
i=ReadTemperature();
j=i&0x80;
if(j)
{lcd_pos(0x00);lcd_wdata('-');}
else
{lcd_pos(0x00);lcd_wdata('+');}

lcd_pos(0x01);
lcd_wdata(i/100+0x30);
lcd_pos(0x02);
lcd_wdata((i%100)/10+0x30);
lcd_pos(0x03);
lcd_wdata(i%10+0x30);
delayms(1000);
}
}




我是个初学者。请
大家帮我看看这个程序DS18B20,1602LCD显示,我忽略了小数点后的数据,也就是tempL的低四位。 让我很不解的是总是显示-255,我怀疑BS18B20初始化没成功,我有用LED灯测试flag,一直为低电平,也就是没成功,但是程序我看不出有什么问题,请大家帮我看看,不胜感谢。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 04:36 , Processed in 0.048899 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表