版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要本系统由两部分组成,温度采集端和温度显示端,通过温度传感器采集温度显示在液晶屏或者数码管上,并将温度通过红外发送到红外接收头,然后解调解码数据,将温度显示出来,实现温度的无线测量 关键字:STC89C52RC;红外;温度;调制;解调1方案论证与选择1.1控制器的选择方案一:采用SP430来处理Msp430是一种超低功耗的混合信号处理器,采用精简指令集,单个始终走起就可以执行一条指令,速度比51快得多。因此用430来处理比较器返回来的数据是比较快捷的,但价格相对较贵。430供电为3.3V,且操作起来较复杂。方案二:采用51内核单片机单片机操作方便快捷,成本低,开发资源丰富,位寻址方便等,来的
2、数据不需要很大的数据处理过程,51已完全能够胜方便,所以该装置采用STC89c52型的单片机来进行处理,本单片机一个机器一个时钟周期执行一条指令,无法解密,低功耗,超低价,高速,高可靠性。1.2温度显示方式的选择与比较方案一:采用数码管显示数码管是由多个发光二极管封装在一起组成的8字型的器件,引线已在内部连接完成,只需引出他们的各个笔画和公共电极。可以用来显示数字和字母。方案二:采用LCD1602一种专门用来显示字母,数字,符号等的点阵型液晶模块。它由若干个5X7或者5X11等的点阵字符位组成,每个点阵自字符位都可以显示一个字符,每位之间有一个点距的间隔,可以显示两行,每行16位数字或者字符。
3、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度报警器报警是结束否4.3关键程序
7、模块(1)数据采集模块#include"18b20.h"void 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;i>0;i-) DQ = 0; dat>>=1; DQ = 1; / 给脉冲信号/ 给脉冲信号 if(DQ)
9、 dat|=0x80;DelayUs2x(25); return(dat); /*- 写入一个字节-*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; 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 in
10、t t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换DelayMs(20);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位 t = (int)b << 8) + a;return(t);(2)发送模块#include "irsend.h"
11、;#include "math.h"unsigned char IR_CodeIR_CODE_SIZI=0;/#define IR_CODE_SIZI 42发射码个数/*11.0592M晶振下t毫秒延时函数*函数名 :Delay_ms()*参 数 :unsigned int t*功 能 :t毫秒延时*返回值 :无*/void Delay_ms(unsigned int t) /误差 -0.651041666667us unsigned char a,b;for(;t>0;t-) for(b=4;b>0;b-) for(a=113;a>0;a-);/*信号灯
12、闪烁函数*函数名 :SignalFlicker()*参 数 :count闪烁次数,time 闪烁时间*功 能 :信号灯以time ms时间间隔闪烁count次*返回值 :无*/void SignalFlicker(unsigned char count,unsigned int time )for(;count>0;count-)ON_SIG_LED;Delay_ms(time);OFF_SIG_LED;Delay_ms(time);/*定时器0初始化函数*函数名 :CarrierWaveInit()*参 数 :无*功 能 :38K载波信号定时器初始化*返回值 :无*/void Carr
13、ierWaveInit(void)TMOD|= 0X02; /八位自动重装模式TH0 = 0XF4; /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 I
14、rcodeReset()unsigned char i=0;for(i=0;i<IR_CODE_SIZI;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
15、 IR_CODE_SIZI 42 /发射码个数*/void DataConversion(unsigned int num,unsigned char* irdata)unsigned char i=IR_CODE_SIZI-3,n=1,f=1;IrcodeReset(); /存储区初始化for(n=3;n<18;n+=2) /前8个存放校验码10101010 0xAA if(f) irdatan = IR_CODE_1;f=0;else irdatan = IR_CODE_0;f=1;while(num!=0) /数据码存放 十进制转二进制if(num%2) irdatai = IR_
16、CODE_1; else irdatai = IR_CODE_0; num = num/2;i-=2;/*红外波发射函数*函数名 :SendIrWave()*参 数 :储存红外编码数据的首地址irdata*功 能 :以红外的方式发送irdata 的红外波形数据*返回值 :无*/void SendIrWave(unsigned char* irdata)unsigned char count=0;unsigned char i=0;while(1) /发射引导码 校验码 数据码 ON_CARR;for(i=irdatacount; i>0; i-) /载波发射延时 CarrierWave_
17、DELAY; OFF_CARR;IR_SEND_OFF; /低电平保持count+; for(i=irdatacount; i>0; i-) /低电平延时 Low_DELAY; if(count = IR_CODE_SIZI-1) /发射结束 break; count+;(3)接收模块#include "irreceive.h"#include "math.h"idata unsigned char IR_CODEIR_CODE_SIZI=0; /红外数据码存储区unsigned char Ir_Time_count=0;/红外时间计数变量unsi
18、gned char IR_RECEIVE_OK=0;/红外接收完成标志/*红外数据接收初始化函数*函数名 :InitIrReceive*参 数 :无*功 能 :配置红外接收需要的定时器和中断*返回值 :无*/void InitIrReceive(void)/*- 定时器0初始化-*/TMOD|= 0x02;/定时器0工作方式2,TH0是重装值,TL0是初值/8位自动重装 TH0 = 0x00;/重载值 TL0 = 0x00;/初始化值 ET0 = 1;/开中断 TR0 = 1;/定时器/计数器启动/*- 外部中断0初始化-*/IT0 = 1;/指定外部中断0下降沿触发,INT0 (P3.2)E
19、X0 = 1;/使能外部中断EA = 1;/*红外数据时间计数函数*函数名 :IRTimeCount()*参 数 :无*功 能 :记录每两个红外脉冲时间间隔*返回值 :无*/void IRTimeCount() interrupt 1 Ir_Time_count+; /*红外码接收中断函数*函数名: IRReceive(void)*参 数: 无*功能描述:接收红外码,存入IR_CODE*返回值: 无*/void IRReceive() interrupt 0static startflag=0,bitnum=0;if(startflag) if(Ir_Time_count<IR_STAR
20、T_TIEM_MAX && Ir_Time_count>IR_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; startflag=1; /*红外码数据转换函数*函数名: DataConversion()*参 数: 无*功能描述
21、:接收红外码,存入IR_CODE*返回值: 数据区的数据*/unsigned int DataConversion(void) unsigned char i=9; unsigned int num=0; for(i=9;i<IR_CODE_SIZI-1;i+) if(IR_CODEi>IR_CODE_1)num+=pow(2,IR_CODE_SIZI-2-i);/二进制转十进制 return num;/*红外码数据校验*函数名: CheckSucceed()*参 数: 无*功能描述:转换IR_CODE 18的校验码,与事先设定值进行比较判断*返回值: 成功1 失败0*/unsig
22、ned char CheckSucceed(void)unsigned char i=1;unsigned int num=0;for(i=1;i<9;i+) /校验码位于18if(IR_CODEi>IR_CODE_1) num+=pow(2,8-i); /转换 if(num=CHECK_NUM && IR_CODE0>IR_START_TIEM_MIN && IR_CODE0<IR_START_TIEM_MAX)/校验码和引导码均校验 return 1; else return 0; 5.系统测试5.1温度测试测试温度传感器DSl8B20测量的温度是否正确。我们用传感器和商用电子温度计测试常温状态的的水。然后对比我们的传感器是否精确。测量次数123456789测量温度31.130.431.432.331.629.8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总经理助理转正工作总结8篇
- 数学教学工作总结(汇编15篇)
- 小学生读书演讲稿4篇
- 2017年寒假综合实践作业总结
- 将精神抚慰金列入刑事附带民事诉讼
- 做幸福教师演讲稿(4篇)
- 2025年文旅小镇合作协议书
- 停车场地出租合同(2篇)
- 2025年CBZ-5-苯基-L-半胱氨酸项目发展计划
- 个人车辆出租合同
- GB/T 397-2009炼焦用煤技术条件
- GB/T 13384-2008机电产品包装通用技术条件
- 《中考体育项目跳绳》教案
- 增服叶酸预防神经管缺陷理论知识考核试题及答案
- 新业娱乐安全评价报告
- 医保工作自查表
- 小学-英语-湘少版-01-Unit1-What-does-she-look-like课件
- 单证管理岗工作总结与计划
- 安全安全隐患整改通知单及回复
- 国有检验检测机构员工激励模式探索
- 采购部年终总结计划PPT模板
评论
0/150
提交评论