2014--2015学年第一学期计算机学院期末考试卷《感知技术课程设计》(课程论文试卷样式)学号:姓名:班级:成绩:评语:(考试题目及要求)考试题目:基于RFID的射频识别应用演示系统设计与实现,论文中可以加副标题考试要求:1.基于RFID相关技术规范实现2.基本内容1)具体应用环境、情景自行设定2)基于教9-C506实验室已有的实验箱、手持数据终端、服务器等设备完成3)演示系统要体现出RFID技术、网络数据库技术和应用软件开发三个方面的内容3.考试结果由系统实现工程文件、论文和其它文档三部分构成1)课程论文要求完成对系统设计实现总体思路的分析,完成对系统硬件核心组成和关键代码的分析2)基本格式:参见下一页课程报告内容参考格式。4.本封面要求必须作为课程论文的第一页,。学号、姓名、班级由同学填写,成绩和评语处留空。5.工程文件、论文电子文档和其它文档以EMAIL附件的形式发送到教师信箱:suogr@foxmail.com。EMAIL主题:2012物联网班同学的射频识别技术考试试卷。空白处填提交报告的同学的名字。6.除上述内容外,课程论文另添加两部分内容:1)对本学期该课程学习的总结。2)对教师的教学建议。7.每个同学独立完成自己的课程论文,各文档尽量以同学的学号_名字形式命名。同学之间不得出现论文相同的情况。装订线以下内容是论文参考格式样例,可以有添加、改动。本页不作为论文页保留。请注意字体和字号:论文题目摘要:约100字以内,以反映论文核心技术内容为准。关键词:2-5个关键词汇,以反映论文核心技术内容为准1.设计要求2.系统设计基本思路3.硬件设计3.1硬件核心组成或者硬件电路图,含必要的原理介绍和过程分析,原理部分可以简略叙述3.2元件清单4.软件设计4.1程序功能模块图4.2程序整体流程图4.3数据库设计4.4程序清单。含必要的注释,程序清单可以作为附件在论文最后提供。5.关键问题的解决6.运行验证效果7.需要讨论的问题8.本学期学习总结9.对教师的教学建议10.结束语11.参考文献[1].作者姓名,书名,出版社,出版年份,版次[2].作者姓名,文章名称,刊文杂志名称,出版日期stm32的温度感知姓名:袁芝丰学号:201271060135班级:12级物联网摘要:本文旨在介绍基于STM32的温度感知,是以stm32微控芯片为硬件支持,stm32主要功能是采集来自温度传感器的数据加以处理然后发送到上位机,上位机软件将发送上来的数据实时显示在上位机软件中。关键词:STM32、温度感知、温度传感器。1.设计要求:本次设计主要的目的实现利用STM32对外界温度进行感知并对应用进行探索。2.系统设计基本思路本系统的主要目的是实现对外界温度的感知,用户可以通过上位机软件对温度进行查看。利用STM32的高性能先实现对温度的探测,然后对于其他传感器的拓展进行讨论。3.硬件设计STM32F103温度传感器上位机其他传感器为什么使用STM32:STM32厂家提供代码函数库,减少开发难度和开发时间;网上很多资源,在实现中,我们在论坛上得到了有关温度传感器的有关驱动代码段。STM32能方便接各种接口模块,如gps模块,wifi模块,gprs模块等。对于以后的拓展也有很好的硬件支持。3.1温度传感器我们在具体的设计中使用了DS18B20温度传感器,该传感器由3.0V~5.5V供电,9~12位可调分辨率。他的感温范围宽在-55℃~+125℃。输出引线:红色(VCC电源),黄色(DATA信号),黑色(GND地线)3.2元件清单stm32微控芯片温度传感器软件设计4.1程序功能介绍接收来自串口的数据,并且将温度传感器采集的温度其实时显示在上位机程序中。4.2程序整体流程图4.3硬件部分流程图温度传感器感受外界温度并传送至STM32开发板STM32接来处理自温度传感器的数据,并通过串口传送至上位机上位机接收信息并将数据处理完毕后显示在上位机程序中。温度传感器感受外界温度STM32采集处理温度传感器数据上位机是否发送停止中断将数据发送至上位机4.4上位机程序5.1实时获取温度代码软件设计中为了实时获取温度,我们通过委托和多线程来实现。具体代码如下:privatevoidserialPort1_DataReceived(objectsender,SerialDataReceivedEventArgse){ss=sfc.ReadLine();Threadthread=newThread(newThreadStart(dowork));thread.Start();}publicstringss;publicdelegatevoidmyinvoke(stringstr);privatevoidUpdatText(stringstr){this.textBox1.Text=str;this.ss=str;}privatevoiddowork(){myinvokemi=newmyinvoke(UpdatText);this.BeginInvoke(mi,newobject[]{ss});}5.2串口操作的过程分析与代码实现串口通过调用C#中的串口函数实现,具体代码段如下:privatevoidbutton1_Click(objectsender,EventArgse){sfc.Close();sfc.PortName=COM3;sfc.BaudRate=9600;sfc.DataReceived+=newSerialDataReceivedEventHandler(serialPort1_DataReceived);sfc.Open();byte[]data=System.Text.Encoding.ASCII.GetBytes(a);sfc.Write(data,0,data.Length);}privatevoidbutton2_Click(objectsender,EventArgse){sfc.Close();sfc.PortName=COM3;sfc.BaudRate=9600;sfc.DataReceived+=newSerialDataReceivedEventHandler(serialPort1_DataReceived);sfc.Open();byte[]data=System.Text.Encoding.ASCII.GetBytes(b);sfc.Write(data,0,data.Length);}5.3下位机通过无线模块向上位机发送信息的部分代码实现voidNRF_RX_Mode(void){NRF_CE_LOW();SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址//SPI_NRF_WriteReg(FLUSH_RX,0xff);SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);//使能通道0的自动应答SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,0);//马:“把这个CHANAL改成0就OK了!NRF_WRITE_REG+RF_CH就等于2.4了。//设置RF通信频率SPI_NRF_WriteReg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x07);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启SPI_NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式/*CE拉高,进入接收模式*/NRF_CE_HIGH();}/**函数名:NRF_TX_Mode*描述:配置发送模式*输入:无*输出:无*调用:外部调用*/voidNRF_TX_Mode(void){NRF_CE_LOW();SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//设置TX节点地址,主要为了使能ACKSPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);//使能通道0的自动应答SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址SPI_NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us+86us;最大自动重发次数:10次SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,0);//马:“把这个CHANAL改成0就OK了!NRF_WRITE_REG+RF_CH就等于2.4了。//设置RF通道为CHANALSPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x07);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启SPI_NRF_WriteReg(NRF_WRITE_REG+CONFIG,0x0e);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,发射模式,开启所有中断/*CE拉高,进入发送模式*/NRF_CE_HIGH();Delay(0xffff);//CE要拉高一段时间才进入发送模式}/**函数名:NRF_Check*描述:主要用于NRF与MCU是否正常连接*输入:无*输出:SUCCESS/ERROR连接正常/连接失败*调用:外部调用*/u8NRF_Check(void){u8buf[5]={0xC2,0xC2,0xC2,0xC2,0xC2};u8buf1[5];u8i;/*写入5个字节的地址.*/SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5);/*读出写入的地址*/SPI_NRF_ReadBuf(TX_ADDR,buf1,5);/*比较*/for(i=0;i5;i++){if(buf1[i]!=0xC2)break;}if(i==5)returnSUCCESS;//MCU与NRF成功连接elsereturnERROR;//MCU与NRF不正常连接}/**函数名:NRF_Tx_Dat*描述:用于向NRF的发送缓冲区中写入数据*输入:txBuf:存储了将要发送的数据的数组,外部定义*输出:发送结果,成功返回TXDS,失败返回MAXRT或ERROR*调用:外部调用*/u8NRF_Tx_Dat(u8*txbuf){u8state;/*ce为低,进入待机模式1*/NRF_CE_LOW();/*写数据到TXBUF最大32个字节*/SPI_NRF_WriteBuf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);/*CE为高,txbuf非空,发送数据包*/NRF_CE_HIGH();Delay(0xffff);/*等待发送完成中断*/while(NRF_Read_IRQ()!=0);/*读取状态寄存器的值*/state=SPI_NRF_ReadReg(STATUS);/*清除TX_DS或MAX_RT中断标志*/SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,state);SPI_NRF_WriteReg(FLUSH_TX,NOP);//清除TXFIFO寄存器/*判断中断类型*/if(state&MAX_RT)//达到最大重