问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用245驱动DS18B20的程序

发布网友 发布时间:2022-07-20 03:16

我来回答

1个回答

热心网友 时间:2023-10-18 20:18

//本人亲自调试过,包你没问题
//外部晶振11.0592M
#include<stc12c5a60s2.h>
bit B20DIRCTR=P3^7; //245方向控制端 H=A->B,L=B->A
sbit DQ=P2^7; //DS18B20数据口
void DS18B20_delayms(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void DS18B20_delayus(unsigned int us)
{
while(--us);
}
/*-------------------------
*****DS18B20 operation*****
-------------------------*/
/*initialization*/
bit DS18B20_reset()
{
bit presence=0;
B20DIRCTR=1;
DQ=1;
DS18B20_delayus(10);
DQ=0;
DS18B20_delayus(500);
DQ=1;
DS18B20_delayus(60);
B20DIRCTR=0;
DS18B20_delayus(2);
if(DQ)
presence=0;
else
presence=1;
B20DIRCTR=1;
return presence;
}
#if 0
/*read a bit*/
bit DS18B20_readbit()
{
bit dat;
B20DIRCTR=1;
DQ=0;
DS18B20_delayus(1);
DQ=1;
DS18B20_delayus(5);
B20DIRCTR=0;
dat=DQ;
DS18B20_delayus(100);
B20DIRCTR=1;
return dat;
}
/*read byte*/
unsigned char DS18B20_readbyte()
{
unsigned char i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
j=DS18B20_readbit(); //The lowest bit at front
dat=(j<<7)|(dat>>1); //The positive preface arranges a word knot potential
}
return dat;
}
#endif
unsigned char DS18B20_readbyte()
{
unsigned char i,temp;
for(i=1;i<=8;i++)
{
temp>>=1;
B20DIRCTR=1;
DQ=0;
DS18B20_delayus(1);
DQ=1;
B20DIRCTR=0;
if(DQ)
temp|=0x80;
DS18B20_delayus(45);
}
B20DIRCTR=1;
return temp;
}
/*write byte*/
void DS18B20_writebyte(unsigned char dat)
{
unsigned char j;
// B20DIRCTR=1;
DQ=1;
for(j=1;j<=8;j++)
{
DQ=0;
DS18B20_delayus(10);
if(dat&0x01)
DQ=1;
else
DQ=0;
DS18B20_delayus(40);
DQ=1;
DS18B20_delayus(1);
dat>>=1; //right move a bit
}
}
/*read scratchpad,return actual temperature*/
int DS18B20_gettemp()
{
float f_temp;
int temp;
unsigned char hdata=0,ldata=0;
/*change temperature*/
if(!DS18B20_reset()) //DS18B20 reset function
return;
DS18B20_delayms(1); //need delay 1ms
DS18B20_writebyte(0xcc); //skip ROM command
DS18B20_writebyte(0x44); //start convertion temperature command
DS18B20_delayms(5000); //上电转换需要延时足够长时间,否则会读出默认值85
if(!DS18B20_reset()) //DS18B20 reset function
return;
DS18B20_delayms(1);
DS18B20_writebyte(0xcc); //skip ROM command
DS18B20_writebyte(0xbe); //read Scratchpad command
ldata=DS18B20_readbyte(); //read high byte
hdata=DS18B20_readbyte(); //read low byte
temp=hdata;
temp<<=8; //high byte left move eight bit
temp=temp|ldata; //high byte and low byte OR
f_temp=temp*0.0625; //multiplicative precision
temp=f_temp*10+(temp>0 ? 0.5 : -0.5);
// f_temp+=0.05;
if(temp==0xffff)
return 0;
return temp;
}void main()
{
unsigned int i;
int Temp_T1=0;
LCD1602_Init(); //液晶初始化
while(1)
{
Temp_T1=DS18B20_gettemp(); //读温度值
Ttable[0]=Temp_T1/100%10+0x30;
Ttable[1]=Temp_T1%100/10+0x30;
Ttable[2]='.';
Ttable[3]=Temp_T1%10+0x30;
Ttable[4]='C'; //温度单位
Ttable[5]='\0';
LCD1602_Write_Str(0,0,Ttable); //液晶显示温度值
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
茶映人生:苦尽甘来 海尔冰箱冷藏室和冷冻室都是空空的通上电工作会更耗电吗? 上菱冰箱用过7年了,1米5高有点大,我每天冰箱里面只冻半斤肉,冷藏室其它... 结婚前个人的保险结婚后转成存单是属于个人财产还是夫妻双方的财产_百 ... 六个月宝宝大便水样蛋花怎么办 宝宝拉蛋花样便怎么办 ...张仙亲送玉麒麟,一家老少皆欢喜,祖德宗功信可凭。 我见青山多妩媚,料青山见我应如是意思 料青山见我应如是的意思_百度知... 电脑导航用哪个比较好电脑用什么网址导航哪个更好用 电脑看地图哪个好电脑上的哪个地图软件好 微信因自身原因崩溃了怎么找回? 春去秋来又十年什么生肖 你好,健康人能喝转移因子口服液吗? 请问老年人喝转移因子好吗 什么人可以服转移因子 跖疣冷冻后可以洗澡吗 请问有没有人保寿险盛世富贵保险产品 有一种爱叫永远歌词歌谱- 问一问 如果没有钱,怎么做微商 4S锂电池多少算过放 洗河蟹的水有寄生虫吗?如果溅到眼睛里,眼睛会有寄生虫吗 不小心将杀鱼的脏水溅到眼睛里,会不会感染 我在清洗锅时,不小心把那个脏水溅到眼睛里面去了:现在眼睛好痛:应该怎么办? 洗鱼的时候不小心将水弄到眼睛里会不会有寄生虫啊?该怎么办?还有水沾到衣服上还可以继续穿吗?谢谢。 洗虾子水溅到眼睛了,过敏怎么办 尼康d850在AF-C对焦模式时蜂鸣器为什么不响- 问一问 米醋和白醋治疗跖疣到底哪个好? 柯南剧场版一共有多少部?分别是什么?分别首映时间是什么? 《无价的奖赏》赏析200字 题目&lt;无价的奖赏&gt;的含义 拜托大家 很急! 请教52单片机使DS18B20程序问题 丨这是什么花? 关于绣线菊的小故事 中华绣线菊的介绍 红牛饮料集团的老总是谁? 喉咙痛咽炎怎么治 像【表】(不要)【酱紫】(这样子)这样的因为普通话连读合音而成的网络流行词(流行语)还有那些? 不锈钢被洁厕灵腐蚀了怎么办 不锈钢被洁厕灵腐蚀后怎么处理 红牛老板是哪里人 红牛饮料公司的董事长叫什么? 燃气开关怎么是开怎么是关 燃气开关的开关解析 怎么分辨狗狗公母 红牛维他命饮料有限公司的老总是谁? F1大红牛、小红牛的老板是不是同一人? 红牛老总严彬是山东哪的 哈弗m6上坡怎么起步,老是熄火一档无力 盛世投资的管理团队 红牛总裁是谁 新编卡尔卡西古典吉他教程 二练习提高篇(六线谱).pdf 求新编卡尔卡西古典吉他教程1的电子书版