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

ds18b20

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

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

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

×
写的一个驱动18b20的程序,但是显示不正常,数字总是在闪,而且还看不清,显示的和温度的值也不一样;
接线是P2接数码管的是段选,P3接的是数码管位选,P1.0接的ds18b20;没有接其他的任何元件;
各位大神帮我看看,小弟感激不尽;
#include<reg51.h>
#include<intrins.h>
int i;
sbit dq=P1^0;
int temp[3];
int weima[3]={0xfe,0xfd,0xfb};
void delay_10us(int x)
{ while(x--)
{
_nop_();
}
}
void init()
{
dq=0;
delay_10us(50) ;
dq=1;
delay_10us(8);
dq=1;
delay_10us(400) ;
}
void write_ds18b20(char x)
{
int i;
delay_10us(1);
for(i=0;i<8;i++)
{
dq=0;

if(x&0x01) dq=1;
x>>=1;
delay_10us(6);
dq=1;
_nop_();
}
}
int read_ds18b20()
{
int i,value;

for(i=0;i<8;i++)
{
dq=0;
_nop_();
_nop_();
dq=1;
value>>=1;
if(dq) value|=0x80;
delay_10us(6);
dq=1;
_nop_();
}
return value;
}
unsigned int chuli1()
{
int th,tl;
unsigned int t;
init();
write_ds18b20(0xcc);
write_ds18b20(0x44);
init();
write_ds18b20(0xcc);
write_ds18b20(0xbe);
th=read_ds18b20();
tl=read_ds18b20();
t=(th<<8)|tl;
return t;
}
void chuli2()
{
unsigned int tdat;
float tem;
int flag;
tdat=chuli1();
if(tdat&0xf800)
{
flag=1;
tdat=~tdat+1;
}
tem=tdat*0.0625;
tdat=tem*10;
temp[0]=tdat/100;
temp[1]=tdat/10%10;
temp[2]=tdat%10;
}
void time_init()
{
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
IE=0x82;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
P3=weima[i];
P2=temp[i];
delay_10us(10);
P2=0xff;
i++;
if(i==3) i=0;
}
void main()
{
time_init();
while(1)
{
chuli2();

}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-24 18:36 , Processed in 0.053944 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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