历史上的今天
今天是:2025年01月11日(星期六)
2020年01月11日 | DS18B20函数库建立实验
2020-01-11 来源:eefocus
1.主代码:
/* 温度传感器 */
#include "DS18B20.h"
#include"def.h"
u16 get_temp (void)
{
float tt;
u16 temp;
u8 a,b;
ds_delay(40);
dsic_init();
write_byte(0xcc);
write_byte(0x44);
ds_delay(40);
dsic_init();
write_byte(0xcc);
write_byte(0xbe);
ds_delay(40);
a = read_byte();
b = read_byte();
temp = b;
temp <<= 8;
temp = temp|a;
tt = temp*0.0625;
temp = tt*10+0.5;
return temp;
}
void ds_delay(u16 i)
{
while(--i);
}
void dsic_init (void)
{
ds_dat = 1;
ds_delay (2);
ds_dat = 0;
ds_delay (250);
ds_dat = 1;
ds_delay (100);
}
u8 read_byte (void)
{
u8 i = 0;
u8 dat = 0;
for(i=8;i>0;i--)
{
ds_dat = 0;
_nop_();
dat >>= 1;
ds_dat = 1;
ds_delay(2);
if(ds_dat)
{
dat |= 0x80;
}
ds_delay(11);
}
return (dat);
}
void write_byte(u8 dat)
{
u8 i = 0;
for(i=8;i>0;i--)
{
ds_dat = 0;
_nop_();
ds_dat = dat&0x01;
ds_delay(11);
ds_dat = 1;
dat >>= 1;
ds_delay(2);
}
}
#include
#include"lcd1602.h"
#include"DS18B20.h"
#include"def.h"
void main(void)
{
float temperature ;
lcd_init();
while(1)
{
temperature = get_temp ();
dispy1(temperature);
}
}
2.效果演示:
上一篇:1602液晶显示实验
下一篇:学习单片机的正确方法
史海拾趣
|
该系统采用的是Qt4做的应用程序,供银行排队叫号系统使用,图片上的前端应用,实际还有Qt4编写的后台设置程序(需通过“秘密通道”打开) 外接输入输出设备有: 1. 银联刷卡器 2. USB小键盘 3. 串口打印机(串口控制模块) 4. 超声波触摸屏(串口 ...… 查看全部问答> |
|
最近,想研究一下rc电路,并阅读了不知道谁写的一本书《RC电路及其应用》,有了一点体会,描述如下. RC电路一大应用时消火花电路。产生火花电路大都是应用于感性负载,如电机、继电器线圈等 如图所示,当开关k断开时候,根据楞次定律线圈两端产 ...… 查看全部问答> |
|
使用VxWorks进行串口通信时遇到的诡异问题(基于Vmware) 先说一下环境,使用Vxworks5.5+Tornado2.2,BSP是Pentium4的,因为没有奔四的机器,所以在机器上用Vmware虚拟了一个机器,编译好的自启动vxworks镜像就在虚拟机上运行。一共有3台PC作了这样的设置,现在只拿两台作测试,用串口直连线连接两台PC ...… 查看全部问答> |
|
因为客户需要,我们准备开发A4/A3的车载GPS方案。 现在寻求硬件高手合作,如能提供A4/A3开发平台及相关资源的,可以额外另付一定的现金报酬。 另外,如果有方案公司愿意合作的,可以加我QQ详谈,46317857。… 查看全部问答> |
|
Beaglebone DS18B20 1602LCD(3.3V) 小弟最近在做一个基于Beaglebone的GSM无线温度报警的设计,温度传感器用DS18B20传感器,显示用1602,现在1602能够在正常的显示,但是DS18B20不能正确检测到初始化信号。(接的上拉电阻,一直检测到1,检测不到0)...原因可能因为使用usleep不准确所 ...… 查看全部问答> |




