行业资讯
你可以参考一下我的程序,18B20中的负温度是以补码表示的!!!!!!
/*******DS18B20程序读取温度******/
uchar ReadTemperature(void)
{
uchar a;
uchar b;
uint t=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共咐斗可读9个寄存器) 前两个就是温度
a=ReadOneChar(); //低8位
b=ReadOneChar(); //高8位
t=b;
t=8;
t=t|a;
if(t=2048)//最高位为一说明是个负温
{
t^=0xffff;
dis_buf[0]=17;//在数码管上显示“-”,你可以用一个程序旦简帆标志位的0,1来表示正温模雹负温
}
else
{
dis_buf[0]=16;
}
t=t4;//*0.0625; //数值转换
return((uchar)t);
}
1、利用串口通讯将单片机采集的温度数据传给上位机,譬如上位机可以用VC++开发
2、上位机在串口接收数据事件中,可参考如下代码:
void
CSCommTestDlg::OnComm()
{
//
TODO:
Add
your
control
notification
handler
code
here
VARIANT
variant_inp;
COleSafeArray
safearray_inp;
LONG
len,k;
BYTE
rxdata[2048];
//设置BYTE数组
An
8-bit
integerthat
is
not
signed.
CString
strtemp;
if(m_ctrlComm.GetCommEvent()==2)
/培掘/配烂核事件值为2表示接收缓冲区内有字历仿符
{
variant_inp=m_ctrlComm.GetInput();
//读缓冲区
safearray_inp=variant_inp;
//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();
//得到有效数据长度
for(k=0;klen;k++)
safearray_inp.GetElement(k,rxdata+k);//转换为BYTE型数组
for(k=0;klen;k++)
//将数组转换为Cstring型变量
{
BYTE
bt=*(char*)(rxdata+k);
//字符型
strtemp.Format("%d",bt);
//将字符送入临时变量strtemp存放
m_strRXData=strtemp;
//加入接收编辑框对应字符串
}
}
UpdateData(FALSE);
//更新编辑框内容
}
void delay_18B20(unsigned int i)
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; /燃哪/DQ复位
delay_18B20(80); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(800); //精确延时 大于 480us
DQ = 1; //拉高总线皮虚码
delay_18B20(140);
x=DQ; delay_18B20(200);
}
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i0;i--)
{
DQ = 0; // 给脉冲信号
dat=1;
DQ = 1; /誉团/ 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(40); //40
}
return(dat);
}
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i0; i--)
{
DQ = 0;
DQ = dat0x01;
delay_18B20(50); //50
DQ = 1;
dat=1;
}
}
unsigned int ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int temp_value=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(1000);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(1000);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp_value = b8;
temp_value |= a;
return temp_value;
}
这两句话是在读取18B20里面的数据,这个温度传感器是将温度已16个字节链雹上传的,高5位表示的时温度的正负,后面启戚12位表示的是无符号悄唤陵数值。最大精度为0.0625度。第一句是将16字节数据的低8位读出来,第二局是将数据的高8位读出来。
如果是模拟的温度传感器,它会把温度转化为对应范围的电压或电流,比如传感器的测温范围是0到100°,那对应输出的电压是0到5V或禅胡碰者4到20mA,如果用单片做吵机识别还要加AD转换器。
如果是数字的温度传感器,它会把温度转化为对应范围的二进制代码,比如传感器的测贺谈温范围是0到100°,那对应输出的二进制代码是0x00到0xFF,因为已经是数字信号,单片机可以直接识别,不需要ADC
上面只是举例而已,具体的参考器件手册
通信者拦
数字式温度传感器(简称SWC),又称集成数字脉冲式感温探头,是一种新型的三端温度变送器件。该器件采用集成模块化设计,可以直接将被测温度信辩兄号转化为数字脉冲信号输出,具有传输距离远,首灶胡抗干扰能力强,转换精度高等优点。它可以方便地与51系列单片机接口,而省去A/D转换集成电路,降低成本,提高可靠性,缩小体积,可广泛应用于军事、医药卫生、食品及自动化测控系统中。
SWC三条引脚的名称分别为控制线(K)、信号线(S)、公共线(G)。其K端实际上也是电源线,其工作方式为加电启动或宽脉冲触发式。当对其控制线加电(或宽脉冲)触发时,经复位时间TQ之后信号线上便输出一串脉冲。该串脉冲的个数即表示被测温度的数字量(见图1)。
中国气象科技世界一流水平,8颗风云卫星在轨运行?2、全身国产风云四号:核心仪器辐射计,连日本都要从美国进口3、中国89式122毫米40管履带式火箭炮火箭炮有哪些...
太阳能热水器传感器问题及解决方案2、色彩传感器的解决方案3、汽车传感器常见故障及其解决方案太阳能热水器传感器问题及解决方案密封问题:在耐高温方面说过,通常的做法...
压力传感器有哪几种2、进气压力传感器脏了会怎样?3、奔驰传感器有显示有脏污怎样处理?4、雷达传感器脏污怎么清理5、进气传感器脏了表现压力传感器有哪几种按不同的测...
传感器里的x和p表示什么意思2、别克凯越p挡挂不上换传感器3、p1930电机温度传感器限功率4、p268b传感器在哪里有什么作用传感器里的x和p表示什么意思保护...
电子汽车衡传感器多少钱?哪个品牌的质量比较好?2、夏利水温传感器在哪里3、夏利a+码表传感器怎么拆4、夏利n5机有几个油压力传感器5、夏利n3后氧传感器自动加热...
深圳市奥亿传感器厂怎么样2、th100温湿度传感器厂家3、深圳市科敏传感器是国家级专精特新“小巨人”吗?4、空调温度传感器价格及厂家推荐5、深圳市科敏传感器有限...
申请高新技术企业补贴2、感知微单元是什么3、触觉传感器对工业机器人有多重要?中国在这领域处于什么水平?4、熊有伦的学术简介申请高新技术企业补贴减按15%税率征收...
光谱共焦传感器生产商哪一家比较好?2、预制构件生产线传感器有哪些3、我国传感器的发展历程你了解多少?4、生产传感器也生产控制器吗5、力传感器厂家6、th100温...
光电转速传感器测速2、光电式转速传感器和霍尔传感器的区别?3、非接触式的转速传感器有哪些?4、想知道速度传感器工作原理?5、光电传感器测转速的具体应用及原理6、...
wedo编程对孩子的好处是什么?2、wedo运动传感器工作原理3、wedo编程和scratch编程的区别wedo编程对孩子的好处是什么?Wedo对孩子主要有以下...
一点销电子网
Yidianxiao Electronic Website Platform