1、合肥学院第八届电子设计竞赛合肥学院第八届电子设计竞赛报告 设计题目: 无线温度遥测系统 系 别: 电子信息与电气工程系 年级专业: 10级电气类(5)班 小组成员: 汪家乐 1005075039 王鹏飞 1005075038 熊王来 1005075042 2012年 4月 91/27 合肥学院第八届电子设计竞赛 目 录摘要:3关键词:31.引言:32.方案论证42.1设计思路42.2模块方案论证52.2.1控制部分选择52.2.2 温度传感器部分52.2.3无线发送/接收部分62.2.4设置部分72.2.5显示部分72.2.6存储部分82.2.7报警部分83.系统设计与实现93.1系统硬件的设
2、计93.1.1 温度采集电路93.1.2无线传输芯片 nRF24L01及其外围电路103.1.3 主控部分及数据的处理133.2系统软件设计143.2.1从机系统流程图143.2.2主机系统流程图153.2.3 DS18B20流程图163.3各模块电路图163.3.1电源模块163.3.2独立按键173.3.3 LCD1602显示173.3.4 LCD12864显示183.3.5声光报警电路193.3.6发射模块电路图193.3.7AT24C02193.3.8接收模块电路图204系统测试204.1测试条件204.2硬件测试204.3软件测试214.4 实验数据分析224.4.1测试工具:224
3、.4.2测试结果:225.总结226.参考文献227附录程序:22附录2 器材清单30附录3实物图30无线温度遥测系统(C题)摘要:基于对远方环境温度探测设计的无线温度遥测系统。本系统由控制器部分、温度采集部分、无线传输部分、设置部分、报警部分、存储部分和显示部分组成,设计以单片机STC89C52为主控核心器件,采用DS18B20数字温度传感器实时采集温度并通过无线传输芯片NRF24L01将采集到的温度数据发送给监测终端,同时终端AT24C02存储并实时LCD显示当前的温度信息,以及蜂鸣器,独立按键,LED构成报警电路。完成了实时监测环境温遥测的基本要求部分的全部功能指标和发挥部分中绝大部分的
4、功能指标。Abstract: Based on the wireless temperature telemetry system designed to detect distant ambient temperature.The system consists of a controller part, the temperature acquisition part of the wireless transmission part, setting part of the alarm part of the storage part and parts designed to mast
5、er the core devices the microcontroller STC89C52 for using DS18B20 digital temperature sensor real-time acquisition temperature and wireless transmissionchip NRF24L01 collected temperature data sent to the monitoring terminal, terminal the AT24C02 storage and real-time LCD display the current temper
6、ature, and the buzzer, the LED constitute the alarm circuit. Completed all of the features of the basic requirements of the real-time monitoring of environmental temperature telemetry indicators and to play a part in most of the functional parameters.关键词:STC89C52 DS18B20 NRF24L01 LCD1602 LCD12864 AT
7、24C02 LED 蜂鸣器 独立按键1.引言:数字化温度传感器DS18B20可以将环境的温度信号转变为数字信号,以串行方式输出,当其与无线发射芯片NRF24L01相互传输数据,且NRF24L01将数据以无线电磁波的形式发送出去,接受模块则将数据传送给单片机处理。则从被测的环境温度就可以精确地计算出来,当温度达到预先设定温度时便会出现声光报警。本系统正是基于此原理完成具有实时温度检测的无线温度遥测系统的设计。无线发送电路温度数据发生器接收数据信号识别数据显示及上限报警无线接收电路预赛要求:1.基本要求:1.1 测温范围1065,误差2米;1.4可设置温度上限报警;1.5接收点显示测温点数据及声光
8、上限报警信号;2.发挥部分2.1遥测距离5米;2.2误差51是否在工作。ALE/PROG(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80c52是否在工作。EA/VPP(31脚): 当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。当地址超出4KB时,将自动执行片外程序存储器的程序。当EA输入低电平时,CPU
9、仅访问片外程序存储器。在对89C52EPROM编程时,此引脚用于施加编程电压VPP。输入/输出引脚:(1)P0.0P0.7 (39脚32脚)(2)P1.0P1.7 (1脚8脚)(3)P2.0P2.7 (26脚21脚)(4)P3.0P3.7 (10脚17脚)3.2系统软件设计3.2.1从机系统流程图图3-8 从机系统流程图3.2.2主机系统流程图图3-9主机系统流程图3.2.3 DS18B20流程图本作品分别使用了Keil uVision、ISIS 6 Professional等系列仿真器作为编程器件,它是以WINDOWS为设计平台。在使用时先在Keil uVision环境下编辑程序,然后保存程
10、序、建立新项目、设置项目,接着编译程序并生成HEX文件,最后在ISIS 6 Professional上调试和执行,这样一步步来实现仿真。3.3各模块电路图3.3.1电源模块电源MULTISIM仿真图3.3.2独立按键3.3.3 LCD1602显示3.3.4 LCD12864显示3.3.5声光报警电路3.3.6发射模块电路图 PROTUES仿真电路图3.3.7AT24C02 3.3.8接收模块电路图PROTUES仿真电路图4系统测试完成了硬件的设计,制作和软件编程之后,要使系统能够按设计意图正常运行,必须进行系统调试。系统调试包括硬件调试和软件调试两个部分。不过,作为一个计算机系统,其运行是软硬
11、件相结合的。因此,软硬件的调试也是不可能绝对分开的,硬件的调试常常要利用调试软件,软件的调试也可能需要通过对硬件的测试和控制来进行。4.1测试条件采用自制电源为系统提供稳定的5V电压,还要准备高精度的温度计、卷尺、秒表的仪器。4.2硬件测试1、对LCD的测试。在测试LCD1602时连接好电路,但是没有显示,一开始仔细分析1602电路图是否正确。但是没有查出原因,然后分析最小系统板,晶振电路正确,复位电路正确。1602与单片机连接正确,最后花了很久发现我的排阻焊反了,改正后1602得以显现。2、对18B20测试。由于采用单总线协议。焊接比较简单,在采用程序测试时,很快就可以正确显示,二路时,分别
12、对它进行测试。两个DS18B20均能进行正确显示。3、对独立按键的测试。我们发现它不能作用,原因可能是焊错了或者程序原因,焊接使我们认为两个接头随便用,但是听别人将讲解,采用对角接法就能正确使用了4、对蜂鸣器和LED灯的测试。我们发现蜂鸣器的声音太小了,后来采用三极管8050放大,还有就是我们把蜂鸣器外面封口的去除它的声音会跟大,这样硬件就得以解决。5、对无线模块的测试。我们已开始根据郎译开发板配套一系列的典型电路来焊接,ISP下载口。但是用不了。所以后来我们根据NRF24L01上各个点表示来焊接,用两排排阵替代NRF24L01的10个接头。然后该怎么接就用杜邦线连接。6、对AT24C02的测
13、试。一开始我们按照典型电路来焊接,但是程序编好后,在开发板上测试完好,这说明我们的AT24C02焊接错了。经过分析后,我们上网搜索后按照网上给的电路进行焊接,测试后完全正确。7、对12864的测试。我们发现它的显示模糊看不清。后来采用一个10K的电位器调节它的分辨率。这样问题便得以解决。4.3软件测试1、采用1路测量时没有出现问,题程序对了即可。但是改用2路测量时发现,接收部分显示只有一个温度示数,另外一部分会出现乱码现象,最后调节程序,使之能够正确显示二路温度。2、我们发现采用独立按键进行可设置声光报警电路时。每当断电时,我们设置的上下限温度会还原到程序设计的温度。然后我们对它进行程序修改,
14、发现难以解决,后来我们加了断电保护AT24C02使之得以解决。3、在对对蜂鸣器和LED灯进行测试时,我们在程序编好后,发现蜂鸣器不发出声音,LED灯不显示。后来修改程序,蜂鸣器,LED灯始终显示。再后来,修改程序,一波三折,终于成功显示。4、在对无线接收与无线发射进行测试时,我们在焊好板子后,发现接收的数据没有显示,然后确定它是否发射出去开始,发现使用可另外一个NRF24L01接受部分发现乱码。确定是我们设计的板子焊错了。改正后才修改接收乱码现象,唯一的可能就是程序问题,通过询问和自我思考后,修改成功,使之能够很好的显示。5、测试中发现当我们发送温度数据时,在接收的显示器上并不能及时的更新数值
15、,反应的时间相对较缓慢。针对这一情况我们在反复的检查程序的时候发现我们在声光报警的时候消耗的时间较多。这样就延误了温度刷新时间。之后我们想了很多的办法才想到用定时器中断来解决这一问题!这样温度刷新与声光报警两个事件就相互之间互不影响。4.4 实验数据分析4.4.1测试工具:温度计、秒表、卷尺、不同温度的水。4.4.2测试结果:由于温度室内温度本身较高,所以我们设置的温度下限较高,在温度低于下线时,蜂鸣器开始发出声音,伴随着LED灯点亮。上限温度我们用打火机对DS18B20进行加温,达到温度上显示,蜂鸣器和LED灯均发生相应的变化,完成声光报警要求,我们采用了1602,12864分别显示发射时与
16、接收时的温度,显示位数有四位,分辨率达到0.1,也达到要求。 对温度误差的测试(DS18B20与温度计的比较)测试仪器25度水温40度水温50度水温DS18B2024.9340.1249.97温度计25.040.250.1测试结果成功成功成功表4-1距离误差的测试(不同距离接受发射时间误差)测试距离50m100m150m200m时间差0.1s0.1s0.1s0.1s测试结果成功成功成功成功表4-2声光报警的测试(1路达到上下限时是否报警)设定温度值23以下24-3030以上蜂鸣器发声不发声发声LED灯发光不发光发光测试结果成功成功成功表4-3 2路测量时温度报警测试达到报警温度的个数0个达到报
17、警温度1个达到报警温度2个达到报警温度测试结果不报警报警报警 表445.总结电子设计竞赛,一个以前以为对自己很遥远的话题,就在这次与我们来了一个近距离的接触。我们团队三人从对它的陌生到完成我们的第一件作品,一两个月里我们经历了很多,艰辛、汗水、成功后的快乐相互交织。记得,在没有课的时间里,在周末的时间里,我们队三人带着电脑早早的来到电协,依然那几个固定的座位,我们可能有忙焊板子的,可能有查资料的,还有编程的,大家都为了一个共同的目标而一起坚持着,努力着!虽然,我们比不参加比赛的同学少了很多休息娱乐时间,但是我们也得到了从其他地方所学不到得不到的东西,我们相信我们的选择是正确的,我们要做的就是只
18、顾风雨兼程。经过一个多月艰苦不懈的努力。我们终于完成了本次电子设计竞赛复赛作品。电子设计竞赛大学生最具代表性的比赛,当然参加的过程也是艰辛的,从原先完全不知道该怎么办的情况下独立完成本次报告,对于我们也是一次很好的锻炼。本次比赛也是对理论知识的实践,使我们更好的掌握知识技能。最后感谢学校提供本次赛事,相信在今后的比赛中我们一定会更加努力争取做到最好。 6.参考文献1 郭天祥 51单片机C语言教程北京:电子工业出版社,2010年10月2 谭浩强 C程序设计.北京:清华大学出版社,1991年3 杨欣,王玉凤,刘湘黔 电子设计从零开始,2005年10月4 陈光军 数据通信技术与应用.北京邮电大学出版
19、社,2005年六月5 何希才 常用传感器应用电路的设计与实践. 科学出版社,2007年9月6 陈振官,陈宏威 新颖高效率声光报警器,国防工业出版社,2005年4月7附录程序:发射模块部分程序:/*延时部分*/#include delay.hvoid delayus2x(unsigned char t)while(-t);void delayms(unsigned char t)while(t-)delayus2x(245);delayus2x(245);/*1602显示部分*/#include 1602.h#include delay.hbit LCD_Check_Busy(void) /检测
20、忙位void LCD_Write_Com(unsigned char Com)void LCD_Write_Data(unsigned char Data)void LCD_Clear(void)void Init_play() /初始化显示void disp_16021(unsigned int tvaluer) /温度值显示void disp_16022(unsigned int tvaluer) /温度值显示void LCD_Init(void) /显示模式设置void Lcd_User_Chr(void) /自定义字符 /* 18b20驱动 */#include 18b20a.h#in
21、clude delay.hbit Init_DS18b20a(void)unsigned char ReadOneChara(void) /读取一个字节void WriteOneChara(unsigned char dat) /写一个字节read_tempa() /*主函数*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#include 18b20.h#include 1602.h#include delay.h#include NRF24L01.h#include 18b20a.hbit ReadTempFlag;/定义读时间标志voi
22、d Init_Timer0(void);/定时器初始化#define uchar unsigned char#define unint unsigned intint tempe1,tempe2;extern uchar tx_buf4;extern uchar Rx_bufTX_PLOAD_WIDTH;void main()LCD_Init(); /1602初始化Init_Timer0();Lcd_User_Chr();LCD_Clear();Init_play() ;/init_io();tx_buf0=0;tx_buf1=0;tx_buf2=0;tx_buf3=0;while(1)ini
23、t_io();if(ReadTempFlag=1)tempe1=read_temp();tempe2=read_tempa();disp_16021(tempe1);disp_16022(tempe2);tx_buf0=tempe1/256;tx_buf1=tempe1%256;tx_buf2=tempe2/256;tx_buf3=tempe2%256;TX_Mode(tx_buf); /同时发射两个温度ReadTempFlag=0;接收模块部分程序:#include #include #includeNRF24L01.h#includedelay.h#include12864.h#inclu
24、de24c02.hbit ReadTempFlag; /定义读时间标志void Init_Timer0(void); /定时器初始化#define uchar unsigned char#define TX_ADR_WIDTH 5 #define TX_PLOAD_WIDTH 20 uchar const TX_ADDRESSTX_ADR_WIDTH = 0x34,0x43,0x10,0x10,0x05;uchar rx_bufTX_PLOAD_WIDTH = 0;uchar tx_bufTX_PLOAD_WIDTH = 0;int tempH=50,tempL=0;int num1,num2
25、;float distemp1,distemp2;#define uint unsigned int/*无线模块驱动*/uchar bdata sta;void init_io(void)uchar SPI_RW_Reg(BYTE reg, BYTE value)BYTE SPI_Read(BYTE reg)uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)bit RX_Mode(unsigned char *RX_Mode )/*声光
26、报警部分*/void keyscan() /利用按键设置温度上下限void alarm() /蜂鸣器响,灯亮void shengg1(unsigned int num3) /判断T1是否超出温度上下限,并启动相应的命令void shengg2(unsigned int num4) /判断T2是否超出温度上下限,并启动相应的命令/*12864显示部分*/#include 12864.h#include delay.hvoid check_busy() /检测忙位 void write_com(unsigned char com) /写命令void write_dat(unsigned char dat) /写数据void display_12864(unsigned char x,unsigned char y,unsigned char *s) /显示中文汉字void display_wendu1(unsigned int num) /显示温度T1void display_wendu2(unsigned int num) /显示温度T2void display_sxian