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

管理员大哥,你给看看这个DS18B20程序问题出在哪儿了

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

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

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

×
/*
*******************************************************************************
问题:为什么老是显示095,好赖显示个85也行啊,也知道是85现象。
*******************************************************************************
*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
sbit dula=P2^6;
sbit wela=P2^7;
//sbit beep=P2^3;
sbit led=P1^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint temp;
float f_temp;
void delayms(uint z)
{
uchar i,j;
for(i=z;i>0;i--)
for(j=125;j>0;j--);
}
void delay(uint z)
{
uchar i;
for(i=z;i>0;i--);
}
//***************************DS18B20初始化函数*********************************************
void dsinit()
{
ds=0;
delay(75);//延时750微妙
ds=1;
delay(3);
if(ds==0)
{
ds=1;
led=0;//如果led亮说明有应答脉冲
}
}
//**************************写字节函数**********************************************
void writebyte(uchar dat) ??
{
uchar i;
for(i=8;i>0;i--)
{
ds=1;
_nop_();_nop_();
ds=0;
_nop_();_nop_();_nop_();_nop_();
ds=dat;//将dat的最低位给ds
delay(7);
dat=dat>>1;
}
ds=1;
}
//**************************读字节函数**********************************************
uchar readbite()
{
uint i;
bit dat;
ds=1;_nop_();_nop_();
ds=0;_nop_();_nop_();//开始一个读过程
ds=1;_nop_();_nop_();
delay(6);
dat=ds;
return(dat);
}
uchar readbyte()//用uchar直接返回,这样在主函数里面就会很清楚是哪个函数的值了?
{
uchar i,j,dat;
dat=0;
for(i=8;i>0;i--)
{
j=readbite();
dat=(dat>>1)|(j<<7);
}
return (dat);
}
//**************************串口初始化函数**********************************************
void serinit()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
PCON=0x00;
SCON=0x50;
ES=1;
EA=1;
}
//**************************温度转换函数**********************************************
void tempchange()
{
dsinit();
delayms(1);
writebyte(0xcc);//跳过ROM
writebyte(0x44);//温度转换命令
}
uchar getwendu()
{
uchar b;
dsinit();
writebyte(0xcc);//跳过ROM
writebyte(0xbe);//温度读取命令
b=readbyte();
temp=readbyte();
temp=temp<<8|b;
f_temp=temp*0.0625;
temp=f_temp+0.5;//实现四舍五入
return (getwendu);
}
void display(uchar bai,uchar shi,uchar ge)?
{
?? P0=table[bai];
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delayms(3);
P0=0xff;
wela=1;
wela=0;


?? ? ?
P0=table[shi];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delayms(3);
P0=0xff;
wela=1;
wela=0;



P0=table[ge];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delayms(3);
P0=0xff;
wela=1;
wela=0;
}
void main()
{
uchar bai,shi,ge;
serinit();
while(1)
{
dsinit();
tempchange();
while(!ds);
getwendu();
bai=temp%1000/100;
shi=temp/10%10;
ge=temp%10;
display(bai,shi,ge);
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-25 00:31 , Processed in 0.057437 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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