关于ds18b20
这是我的程序 求指点啊
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P2^5;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit DQ=P2^2;
uchar num;
uint temp;
void delay1(uint t) //延时函数
{
while(t--);
}
void init_ds18b20(void) //ds18b20初始化
{
uchar n;
DQ=1;
delay1(8);
DQ=0;
delay1(80);
DQ=1;
delay1(8);
n++;
delay1(4);
}
void write_byte(uchar dat) //ds18b20写数据
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay1(4);
DQ=1;
dat>>=1;
}
delay1(4);
}
uchar read_byte(void) //ds18b20读数据
{
uchar i,value;
for(i=0;i<8;i++)
{
uint n;
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay1(4);
}
return value;
}
uchar read_temperature(void) //返回ds18b20温度数值
{
uint a,b;
init_ds18b20();
write_byte(0xcc);
write_byte(0x44); //启动温度测量
delay1(300);
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);//读取温度
a=read_byte();//读取低8位
b=read_byte();//读取高8位
b<<=4;
b+=(a&0xf0)>>4;
return (b);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //写指令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //lcd初始化
{
lcdrw=0;
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0C);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
}
void main()
{
init();
init_ds18b20();
while(1)
{
temp=read_temperature();//temp=11;
for(num=0;num<2;num++)
{
write_com(0x80+0x00);
write_data(48+temp/10);
write_data(48+temp%10);
delay(20);
}
}
}
你keil里咋调试的?
调试状态下查看参数的变化呀
调试好了没 小编
之前跳过好像是读数据哪里出错了 换成其他子函数就可以 这个就不可以 你找到了吗?
真心看不懂啊 呵呵
我的目的是为了多搞点钱,啊哈哈
谢谢谢谢谢谢谢谢谢谢谢谢谢谢
谢谢谢谢谢谢谢谢谢谢谢谢谢谢
可以。