单片机如何将DS18B20温度传感器的数据采集后,通过无线串口发送至PC端的无线串口?串口通信程序怎么写?
串口是可以发送16进制的数的。我常用的简单方法是,在单片机里这样写:
int t;
float tt; //温度值
char i;
unsigned char *p;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
delay(40);//delay(4);
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625; 转换成温度.可用
p= (unsigned char *) (&tt);
for(i=3;i>=0;i--)
{
TI = 0;
SBUF = p[i];
while(TI==0);
}
到计算机这边,在把他转换回来就好了;
例如:
BYTE RECV[4]; // 这是计算机收到的字符串;
float *fp = (float*)RECV;
float t = *fp; //t里就是收到的18B20的温度了
答案是能够实现。方案是:
1、利用电脑自身蓝牙功能,这时候单片机要控制蓝牙模块严格按照计算机蓝牙功能协议(配对、密码验证、数据格式)发送数据,电脑端要编制PC端接收程序,实现接收和显示。
2、电脑端使用USB转232模块配接HC-06蓝牙串口,PC机运行串口助手,实现对HC-06蓝牙串口的控制和接收数据的显示。
答:void tmpwritebyte(uchar dat) //write a byte to ds18b20 向1820写一个字节数据函数 { uint i;uchar j;bit testb;for(j=1;j<=8;j++){ testb=dat&0x01;dat=dat>>1;if(testb) //write 1 { DS=0;i++;i++;DS=1;i=8;while(i>0)i--;} else { DS=0; //writ...
答:DS18B20与单片机连接一个IO口就够了,只需要满足相应的时序就能读到温度数据。至于1602显示,只要能读到温度数据,将数据转为字符串发送给1602就可以了
答:温度传感器可以选用ds18b20 我把电路图发上来了这是程序,希望对你有用```include <reg52.h> define uchar unsigned char define uint unsigned int sbit DS=P2^2; //define interface uint temp; // variable of temperature uchar flag1; // sign of the result positive or negative ...
答://假定温度值整数放在变量tint,小数放在变量tflo里 //发送 Sendone('0'+tint); //发送整数 Sendone('.'); //发送小数点 Sendone('0'+tflo); //发送小数 SendLineEnd(); //发送回车换行符 delay(60000); //适当延时以免发送数据过量 //连接好电脑和单片机,打开串口调试助手...
答:随着温度升高,金属管(材料A)长度增加,而不膨胀钢杆(金属B)的长度并不增加,这样由于位置的改变,金属管的线性膨胀就可以进行传递。反过来,这种线性膨胀可以转换成一个输出信号。液体和气体的变形曲线设计的传感器 在温度变化时,液体和气体同样会相应产生体积的变化。多种类型的结构可以把这种膨胀的...
答:include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4; //ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共阴数码管字码表unsigned char code str1[]={0x0bf,0x86,...
答:Init_DS18B20();// WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x55); //匹配ROM命令 for(i=0;i<8;i++) { WriteOneChar(RomCode[x][i]); } WriteOneChar(0xBE); //读取温度寄存器 temp_data[0] = ReadOneChar(); //温度低8位 temp_data[1] = ReadOneChar(); //温度...
答:DS18B20是1-Wire总线的温度传感器,单片机要和DS18B20通信,就要严格按照18B20手册中给出的时隙打出通信时序,手册中让你把总线拉低多久你就要拉低多久,让你释放多久你就释放多久。我截个手册上的时序图:
答:void display(uint k)//显示温度 { uchar ge,shi,bai;ge=k%10;shi=k/10%10; //shiwei bai=k/100;if(!flag)//温度为负数 { P2=seg[0];P0=0xbf;//负号 显示"-"delay1(4);P2=0xff;P2=seg[1];P0=tab[k/10%10];delay1(4);P2=0xff;P2=seg[2];P0=tab[k%10];//DIN=0...
答:用一个带USB的MCU就搞定了,你可以参考一下申矽凌微电子的一个Demo board。 是USB口的。我给一段例程,你参考一下:但是要注意DS18B20的Reset延迟时间,温度一直不变,应该是出错了,Check一下是不是Reset的延时时间是否不够,因为其转换速度慢?申矽凌微电子的CT1820的速度较快(近21倍的转换速度)。...