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

基于ds18b20设计的温度计

发布网友 发布时间:2022-05-24 17:14

我来回答

3个回答

热心网友 时间:2023-09-13 20:27

好吧 今天刚编出来 呵呵 分享给你了哦
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delayms(uint);
uchar temp,tmph,tmpl;

sbit ds18b20=P3^3;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

/////////////////////////////////////////////////////////
/////DS18B20部分////////////
///////////////////////////

//延时部分
void delayus(uint i)
{
while(i--);
}

void delay_600us(void)
{
uchar i;
for(i=0;i<180;i++);
}//延时600us
void delay_400us(void)
{
uchar i;
for(i=0;i<120;i++);
}

void delay_60us(void)
{
uchar i;
for(i=0;i<18;i++);
}//延时60us
void delay_15us(void)
{
uchar i;
for(i=0;i<3;i++);
}//延时15us

//复位脉冲
bit resetpulse(void)
{
ds18b20=0;
delay_600us();
ds18b20=1;
delay_60us();
return ds18b20;
}
//ds18b20初始化
void ds18b20_init(void)
{
while(1)
{
if(!resetpulse()) //收到ds18b20的低电平信号
{
ds18b20=1;
delay_400us();
break;
}
else
resetpulse(); //继续发送复位信号
}
}
void ds18b20_write_byte(uchar date)
{ uchar i;
for(i=0;i<8;i++)
{ds18b20=0;
ds18b20=date&0x01;
delayus(4);
ds18b20=1;
date=date>>1;
}

}

uchar ds18b20_read_byte()
{
uchar i,n,u;
for(i=0;i<8;i++)
{ds18b20=0;
ds18b20=1;
_nop_();
u=ds18b20;
n=(u<<7)|n>>1;
delayus(3);
}
return n;
}

uchar read_temperaturn()
{
ds18b20_init(); //初始化;
ds18b20_write_byte(0xcc); //跳过ram;
ds18b20_write_byte(0x44); //启动温度测量;
delay_600us();

ds18b20_init(); //初始化;
ds18b20_write_byte(0xcc); //跳过ram;
ds18b20_write_byte(0xbe); //采集温度

tmpl=ds18b20_read_byte(); //低位温度数据
tmph=ds18b20_read_byte(); //高位温度数据

tmph<<=4; //左移4位
tmph+=(tmpl&0xf0)>>4;
return(tmph);
}

void display()
{
P0=table[temp/100];
P2=0xfb;
delayms(5);

P0=table[temp%100/10];
P2=0xfd;
delayms(5);

P0=table[temp%10];
P2=0xfe;
delayms(5);
}

void main()
{ while(1)
{
temp=read_temperaturn();

display();
}

}
其实编写并不难 建议还是自己编一下 经过这样一个过程 也许你会学到很多的 (注;此程序只是简单的整数位显示)

热心网友 时间:2023-09-13 20:28

百度一下吧!!一大堆呢!!!

热心网友 时间:2023-09-13 20:28

就是一个1-wire协议,你网上搜一下就能搜到一堆DS18B20的驱动了,你稍微把引脚配置改一下就能直接调用了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
赵玉平名家论坛 赵玉平人物经历 杭州市汽车西站 现在能提前几天售票啊? 请问杭州西站汽车票可以提前几天买? 杭州汽车西站在节假日的时候需要提前买票的吗 散步有助于减肥吗 魑瑟忝箜莫尘读什么 端午送什么 端午节家里要摆放什么东西 龙舟是如何制作的? ARFI、Forns指数、FIB-4和APRI无创诊断慢性乙型病毒性肝炎肝纤维化的... 用AT89C51单片机基于ds18b20的温度采集系统 fib—4评分公式 心理咨询师的需求怎么样 立方尺(cu.ft.)如何换算成升(L)?一立方尺等于多少公斤? 10月17日 出生2002年10月12到20191月5日多少岁了? 2002年10月的现在成年了吗,到现在过17个生日,但平时却被说成18? 2002年农历10月17是公历几月几曰 有没有什么办法可以让电脑只打开固定的几个网页 2002年10月17日出生是什么年什么月什么日 我是2002年农历十一月十七日出生的,请问我今年几岁 有没有什么软件可以做到电脑在指定时间开机,然后进行预设任务 如:在指定时间打开某个网站并且登录 2002年11.22出生10月18生日到现在2020,一月十二成年了吗满17周岁了吗? 我的女儿生日是2002年10月17号,今年在北京可以上小学吗? 笔记本电脑的synaptics定点装置开机自动运行要怎么做? 我的电脑定点开机怎么回事 有没有一款电脑软件可以让某个程序在特定的时刻打开再在运行几小时后自动关闭 新车跑了一万公里后拉高速注意哪些事项。 电脑定点开机 C语言题,麻烦解答一下~O(∩_∩)O~ 求斐波那锲数列的第N项,请问你们可以详细的解释return(fib(n-1)+fib(n-2))这个是怎么去实现返回植的 基于单片机的DS18B20温度检测,要求显示在数码管上精确到小数点两位,温度上下限报警蜂鸣器不响程序如图 急!根据下面程序回答问题! 成都出蓉的范围 对方把我手机号,和一起拉黑了,我还能再加她吗 电脑怎么登录两个 电脑怎么用两个 谁有这张海贼王壁纸的高清原图? 海贼王壁纸,P图,剪辑 救命各位!我用Adobe Premiere Pro不小心将我需要的文件替换了,该怎么恢复?急救急救 壁挂炉时段供暖和无限时供暖是什么意思 滴滴打车新增车辆怎样加入,还有就是行驶证不是自己的名字 爱普特普智能电采暖炉时段3是什么意思 家用壁挂锅炉低温一直运行和分时段运行,那种经济,分段的话怎么设置经济 我妹妹今年21岁,从来没有长过白发,最近右边头上长了很多白发,请问是怎么回事?是不是缺什么营养? 有搞fpga想转做芯片吗,海思招聘 FPGA代替一切芯片的可能性有多高 微信在黑名单里删掉对方还能加入吗? 网上专科和全日制专科有什么区别