《无线温度测量设计报告(完整源代码)(共25页).docx》由会员分享,可在线阅读,更多相关《无线温度测量设计报告(完整源代码)(共25页).docx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上摘要本系统由两部分组成,温度采集端和温度显示端,通过温度传感器采集温度显示在液晶屏或者数码管上,并将温度通过红外发送到红外接收头,然后解调解码数据,将温度显示出来,实现温度的无线测量 关键字:STC89C52RC;红外;温度;调制;解调1方案论证与选择1.1控制器的选择方案一:采用SP430来处理Msp430是一种超低功耗的混合信号处理器,采用精简指令集,单个始终走起就可以执行一条指令,速度比51快得多。因此用430来处理比较器返回来的数据是比较快捷的,但价格相对较贵。430供电为3.3V,且操作起来较复杂。方案二:采用51内核单片机单片机操作方便快捷,成本低,开发资
2、源丰富,位寻址方便等,来的数据不需要很大的数据处理过程,51已完全能够胜方便,所以该装置采用STC89c52型的单片机来进行处理,本单片机一个机器一个时钟周期执行一条指令,无法解密,低功耗,超低价,高速,高可靠性。1.2温度显示方式的选择与比较方案一:采用数码管显示数码管是由多个发光二极管封装在一起组成的8字型的器件,引线已在内部连接完成,只需引出他们的各个笔画和公共电极。可以用来显示数字和字母。方案二:采用LCD1602一种专门用来显示字母,数字,符号等的点阵型液晶模块。它由若干个5X7或者5X11等的点阵字符位组成,每个点阵自字符位都可以显示一个字符,每位之间有一个点距的间隔,可以显示两行
3、,每行16位数字或者字符。1602采用标准的16脚借口,相比数码管,同样引脚的情况下,显示的内容更多,焊接更加方便快捷,所以我们选用显示部分选用LCD1602.1.3红外的编码和解码采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下图所示。上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。编码数据,载波,发射,接收解码如下图所示2.系统
4、设计温度传感器控制器温度显示红外发射红外接收温度显示控制器本系统的温度传感器使用DS18b20,控制器选用stc89c51,温度显示模块用LCD1602。(1)对温度采集电路采集的温度进行编码后,红外发射管发射数据。(2)红外一体化接收头接收到红外信号后,对红外进行解调,因为红外接收头接收到信号后就对信号进行了解调,所以我们就不用设计解调电路。3.电路设计3.1单片机最小系统上图是比较常用的单片机最小系统3.2温度采集发射电路红外发送模块温度传感器模块液晶显示模块温度传感器DS18B20采集的温度,通过单片机处理显示在液晶上,然后对温度数据进行编码,通过红外发射电路将温度信息发射出去。3.3温
5、度接收显示电路接收头液晶模块红外接收头对接收到的信号解调,然后送到单片机处理,判断高低电平的时间来解码,将温度数据显示在液晶上。4.软件设计4.1概述:此次用的是DSl8B20作为温度传感器进行温度采集,然后将温度数据转化为电信号,通过红外线发射,再让接受端收到温度信息,并显示出来。因为是我们焊接的是单片机最小系统,所以,我们用的就是无线红外发射管和无线红外接收管来实现发送端与接收端数据的传输,基本可以实现五米以上距离的信息传输。接收端主循环一直检测红外是否接收完成,如果完成清除完成标志,并进行数据校验,校验通过则对红外数据进行转换,temperature为全局,将在display.c由定时器
6、扫描数码管进行显示。信号灯的闪烁则利用ledcount变量自减进行控制发送端主循环以一定间隔进行18B20温度读取,再将温度数据转换为红外数据码,进行红外发射,伴随信号灯闪烁定时器0进行38K载波的产生。红外数据存入IR_Code数组,前两位为引导码 318为校验码 1941数据具体编码0 和1 的表示参考NEC红外协议,对0 1的编码时间适当增大了,以避免其他红外遥控的干扰。4.2 程序流程图发射端计算温度值并进行存储显示在lcd显示器上将温度值转化为电信号,用红外发射端发射出去结束接收端是否有红外信号初始化开始错误显示error将信息以数字形式显示在数码管显示器上否是温度是否高于x度报警器
7、报警是结束否4.3关键程序模块(1)数据采集模块#include18b20.hvoid DelayUs2x(unsigned char t) while(-t); void DelayMs(unsigned char t) /延时tms while(t-) DelayUs2x(245);DelayUs2x(245); /大致延时1mS /*- 18b20初始化-*/bit Init_DS18B20(void) bit dat=0;DQ = 1; /DQ复位 DelayUs2x(10);DQ = 0; /稍做延时 /单片机将DQ拉低 DelayUs2x(200); DelayUs2x(200);
8、 /精确延时 大于 480us 小于960us DQ = 1; DelayUs2x(50); /拉高总线 /1560us 后 接收60-240us的存在脉冲 dat=DQ; DelayUs2x(25); /如果x=0则初始化成功, x=1则初始化失败 /稍作延时返回 return dat;/*- 读取一个字节-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; dat=1; DQ = 1; / 给脉冲信号/ 给脉冲信号 if(DQ) dat|=0x80;
9、DelayUs2x(25); return(dat); /*- 写入一个字节-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; DelayUs2x(25); DQ = 1; dat=1; DelayUs2x(25);/*- 读取温度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteO
10、neChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换DelayMs(20);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位 t = (int)b 0;t-) for(b=4;b0;b-) for(a=113;a0;a-);/*信号灯闪烁函数*函数名 :SignalFlicker()*参 数 :count闪烁次数,time
11、 闪烁时间*功 能 :信号灯以time ms时间间隔闪烁count次*返回值 :无*/void SignalFlicker(unsigned char count,unsigned int time )for(;count0;count-)ON_SIG_LED;Delay_ms(time);OFF_SIG_LED;Delay_ms(time);/*定时器0初始化函数*函数名 :CarrierWaveInit()*参 数 :无*功 能 :38K载波信号定时器初始化*返回值 :无*/void CarrierWaveInit(void)TMOD|= 0X02; /八位自动重装模式TH0 = 0XF4
12、; /1111 0100 /38k载波信号TL0 = 0XF4;ET0 = 0; /关闭TR0 = 0;/*定时器0中断函数载波发生*函数名 :CarrierWave()*参 数 :无*功 能 :定时器中断产生38KHZ载波信号*返回值 :无*/void CarrierWave(void) interrupt 1 IR_SEND_IO = IR_SEND_IO;/*红外数据复位函数*函数名 :IrcodeReset()*参 数 :无*功 能 :将红外发射码数据进行复位*返回值 :无*/void IrcodeReset()unsigned char i=0;for(i=0;iIR_CODE_SI
13、ZI;i+)IR_Codei=IR_CODE_0; IR_Code0 = IR_CODE_START; IR_Code1 = IR_CODE_START/2;/*数据转换函数*函数名 :DataConversion*参 数 :待转换的数值num,红外码存放地址 irdata*功 能 :将数值转换为红外发射码*返回值 :无#define IR_CODE_0 20 /发射码的0#define IR_CODE_1 50#define IR_CODE_START 240 /发射码起始#define IR_CODE_SIZI 42 /发射码个数*/void DataConversion(unsigned
14、 int num,unsigned char* irdata)unsigned char i=IR_CODE_SIZI-3,n=1,f=1;IrcodeReset(); /存储区初始化for(n=3;n0; i-) /载波发射延时 CarrierWave_DELAY; OFF_CARR;IR_SEND_OFF; /低电平保持count+; for(i=irdatacount; i0; i-) /低电平延时 Low_DELAY; if(count = IR_CODE_SIZI-1) /发射结束 break; count+;(3)接收模块#include irreceive.h#include m
15、ath.hidata unsigned char IR_CODEIR_CODE_SIZI=0; /红外数据码存储区unsigned char Ir_Time_count=0;/红外时间计数变量unsigned char IR_RECEIVE_OK=0;/红外接收完成标志/*红外数据接收初始化函数*函数名 :InitIrReceive*参 数 :无*功 能 :配置红外接收需要的定时器和中断*返回值 :无*/void InitIrReceive(void)/*- 定时器0初始化-*/TMOD|= 0x02;/定时器0工作方式2,TH0是重装值,TL0是初值/8位自动重装 TH0 = 0x00;/重
16、载值 TL0 = 0x00;/初始化值 ET0 = 1;/开中断 TR0 = 1;/定时器/计数器启动/*- 外部中断0初始化-*/IT0 = 1;/指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1;/使能外部中断EA = 1;/*红外数据时间计数函数*函数名 :IRTimeCount()*参 数 :无*功 能 :记录每两个红外脉冲时间间隔*返回值 :无*/void IRTimeCount() interrupt 1 Ir_Time_count+; /*红外码接收中断函数*函数名: IRReceive(void)*参 数: 无*功能描述:接收红外码,存入IR_CODE*返回值:
17、无*/void IRReceive() interrupt 0static startflag=0,bitnum=0;if(startflag) if(Ir_Time_countIR_START_TIEM_MIN) /引导码判断 bitnum=0; IR_CODEbitnum=Ir_Time_count; /引导码 TC9012的头码,9ms+4.5ms Ir_Time_count=0; bitnum+; if(bitnum=IR_CODE_SIZI) /接收完成 IR_RECEIVE_OK=1; bitnum=0; else /第一个触发信号Ir_Time_count=0; startfla
18、g=1; /*红外码数据转换函数*函数名: DataConversion()*参 数: 无*功能描述:接收红外码,存入IR_CODE*返回值: 数据区的数据*/unsigned int DataConversion(void) unsigned char i=9; unsigned int num=0; for(i=9;iIR_CODE_1)num+=pow(2,IR_CODE_SIZI-2-i);/二进制转十进制 return num;/*红外码数据校验*函数名: CheckSucceed()*参 数: 无*功能描述:转换IR_CODE 18的校验码,与事先设定值进行比较判断*返回值: 成功
19、1 失败0*/unsigned char CheckSucceed(void)unsigned char i=1;unsigned int num=0;for(i=1;iIR_CODE_1) num+=pow(2,8-i); /转换 if(num=CHECK_NUM & IR_CODE0IR_START_TIEM_MIN & IR_CODE0IR_START_TIEM_MAX)/校验码和引导码均校验 return 1; else return 0; 5.系统测试5.1温度测试测试温度传感器DSl8B20测量的温度是否正确。我们用传感器和商用电子温度计测试常温状态的的水。然后对比我们的传感器是否
20、精确。测量次数123456789测量温度31.130.431.432.331.629.829.332.831.4实际温度31.230.431.432.231.629.829.432.631.45.2传输测试测试红外线传输是否能正确传输温度数据。测试端温度显示31.130.431.432.331.629.829.332.831.4接收端温度显示31.130.431.432.331.629.829.332.831.4测试结果:两次的测试结果还是比较理想,温度测试中我们的传感器大致能测的和商用的电子温度计一致,极少出错,误差很小。传输测试则能百分之百的正确传输和接收显示。6.电子设计收获本次的无线温
21、度测量项目我们小组在自己测试下是成功的做出来了,感觉我们小组做的还是比较不错,毕竟东西是做出来了,并且能够实现我们所需要的功能。在这之前我们小组的人也没怎么去实际的动手做过一个成品,这次的机会让我们三个自己动手做完了一个小项目,虽然使用的只有单片机的最小系统,但是我们自己感觉还是挺不错的,因为我们毕竟在这个方面有了更深一点的认知。在写程序时,有些程序对于我们来说还是比较难弄,所以我们参照了网上的一些相近教程,然后消化做出我们需要的。这种一边查资料一边自己做东西的感觉真的是很不一样,同时也觉得这是一个非常重要的技能。在我们焊接单片机最小系统时,我们参照了单片机的原理图,但是由于没有认真的安排布线,所以我们在第一次是搭了很多的飞线,虽然功能实现了,但是很不好看。于是我们决定重新焊接。第二次焊接时我们好好的规划了一下布线,我们的接收模块没有一根飞线,由于时间关系,我们的发射模块没有来的及重新焊接。但是感觉接收模块确实比第一个好看多了。最后就是这次比赛的整个过程中我们小组都合作的很开心,大家都有很多的收获,都为这次比赛做了努力,不管最后结果怎么样,我们都不会觉得遗憾。专心-专注-专业
限制150内