基于单片机的2.4G无线通信系统_第1页
基于单片机的2.4G无线通信系统_第2页
基于单片机的2.4G无线通信系统_第3页
基于单片机的2.4G无线通信系统_第4页
基于单片机的2.4G无线通信系统_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学《学科基础课群综合训练》报告《单片机应用设计》任务书学生姓名:男神专业班级:指导教师:龙毅宏工作单位:信息工程学院题目:基于单片机的2.4G无线通信系统课程设计目的:1、熟悉单片机应用系统的硬件设计及软件设计的基本方法;将《单片机原理与应用》理论课的理论知识应用于实际的应用系统中;训练单片机应用技术,锻炼实际动手能力提高正确地撰写论文的基本能力。课程设计内容和要求完成硬件电路的设计,其中包括单片机和NRF24L01芯片模块的设计;完成无线通信模块的程序设计与实现,上机运行调试程序,记录实验结果(如图表等),并对实验结果进行分析和总结;

课程设计报告书按学校统一规范来撰写,报告主要包括以下内容:目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等;查阅不少于6篇参考文献。初始条件:STC89C52和NRF24L01模块;先修课程:单片机原理与应用。时间安排:第19周,安排设计任务,完成硬件设计;第20周,完成软件设计、撰写报告,答辩。指导教师签名:年月日系主任(或责任教师)签名:年月日

目录摘要 摘要随着现代信息技术的飞速发展,数据的无线传输在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以数据的无线传输应用的设计与研究有十分重要的意义。本文给出了一种基于单片机的2.4G无线通信系统,主要采用STC89C52单片机与NRF24L01无线通信模块进行半双工通信,通过按键输入数据,LCD1602显示发送和接收到的信息。文中主要介绍了单片机、无线通信模块的工作原理,系统的各模块设计,以及程序设计,硬件电路设计。结果表明该系统结构简单,可靠,功耗较低,成本低,能够满足设计要求。关键词:STC89C52NRF24L01通信

AbstractWiththerapiddevelopmentofmoderninformationtechnology,wirelessdatatransmissioninindustry,agricultureandPeople'sDailylifeplayanincreasinglyimportantrole,ithasagreatinfluenceonpeople'slives,sothedesignofthewirelesstransmissionofdataapplicationandtheresearchhastheveryvitalsignificance.Thispaperpresentsa2.4Gwirelesscommunicationsystembasedonsinglechipmicrocomputer,mainlyadoptsSTC89C52MCUNRF24L01wirelesscommunicationmodulewithhalfduplexcommunication,throughthepressedkeyinputdata,LCD1602displaytosendandreceiveinformation.Thispapermainlyintroducestheworkingprincipleofsingle-chipcomputer,wirelesscommunicationmodule,themoduledesignofthesystem,aswellasprogramdesign,hardwarecircuitdesign.Theresultsshowthatthesystemhassimplestructure,reliable,lowpowerconsumption,lowcost.Tomeetthedesignrequirements

Keywords:STC89C52NRF24L01communication

1绪论随着现代信息技术的飞速发展,数据的无线传输在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,并且已渗透到社会的各个角落,有着广阔的市场和业务需要。它对人们的生活具有很大的影响,所以数据的无线传输应用的设计与研究有十分重要的意义。目前主要的无线技术有:蓝牙(Bluetooth),红外数据传输(IrDA),无线局域网(Wi—Fi)、ZigBee等。Bluetooth是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。由于蓝牙采用无线接口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术功耗低、对人体危害小,而且应用简单、容易实现,所以易于推广。但同时其应用成本升高,普及难度增大,且通信速率较慢;IrDA是一种利用红外线进行点对点通信的技术,是第一个实现无线个人局域网(PAN)的技术,但它对于点对多点的通信显得无能为力,且红外技术只能在视线可以达到的范围内定向传输,中间不能有任何阻挡,同时要求通信设备的位置相对固定,这样就无法应用于移动设备;Wi—Fi是以太网的一种无线扩展,主要目的是提供WLAN接人,但由于其硬件实现需要很大的容纳空间,且往往在商用计算机系统中实现,这就限制了其在工业领域,尤其是在某些不依赖通用计算机的特殊工业场合的应用。ZigBee技术是一种短距离、低功耗的无线通信技术,主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。针对这些问题提出了一种功耗低、成本低且利于在嵌入式系统中实现的基于单片机的无线通信系统,它基于无需申请就可使用的2.4GISM频段,可广泛适用于消费类电子、无线遥控玩具、汽车用自动化、家庭自动化控制及建筑安全装置等领域。

2系统整体方案设计设计要求以STC89C52单片机为主控,NRF24L01模块作为无线通信模块,剩余需要设计的主要有输入和输出显示设备。输入设备常用的主要有按键和串口,按键硬件简单,能够输出的1、0两种电平,传递的信息速度较慢,程序时间简单;串口通过电脑能够一次性发送大量数据,数据传输速率快,程序实现相对较复杂,并且需要电脑来传递数据不利于系统的独立工作。考虑到目前学习的深度以及实现的便捷性,采用按键实现1、0两种信号的输入,根据数字电路的知识,仅通过1、0两种信号就能传递出目前计算机所有的信息,能够实现要求的无线通信系统。输出显示设备主要有小灯、液晶、串口等设备。小灯通过亮灭来代表高低电平,硬件电路简单控制程序简单。液晶主要有LCD1602和LCD12864两种,具有字符显示功能,硬件接口使用较多,程序控制较复杂但现实的信息丰富,能够灵活的显示各种调试的信息,大大加快代码的调试进度。串口通过电脑能够一次性发送大量数据,数据传输速率快,程序实现相对较复杂,并且需要电脑来传递数据不利于系统的独立工作。考虑到系统程序的调试,采用液晶作为显示设备,根据实际需要以及元件价格采用LCD1602作为输出显示设备。系统框图如图1所示。图1系统框图

3基本原理3.1STC89C52微处理器STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有如下基本功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。因此其基本特性表现为:8K字节程序存储空间,512字节数据存储空间,内带4K字节EEPROM存储空间,可直接使用串口下载。STC89C52器件参数如下:1、增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。2、工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。3、工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。4、用户应用程序空间为8K字节。5、片上集成512字节RAM。6、通用I/O口(32个),复位后为:P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。7、ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RXD/P3.0,TXD/P3.1)直接下载用户程序,数秒即可完成一片。8、具有EEPROM功能。9、共3个16位定时器/计数器,即定时器T0、T1、T210、外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。11、通用异步串行口(UART),还可用定时器软件实现多个UART。12、工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)。13、PDIP封装。STC89C52管脚图如图2所示。图2STC89C52管脚图3.2NRF24L01无线通信模块3.2.1NRF24L01芯片概述NRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。其电流消耗极低:当工作在发射模式下发射功率为0dBm时电流消耗为11.3mA,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。其主要应用领域包括:无线鼠标、键盘、游戏机操纵杆、无线门禁、无线数据通讯、安防系统、遥控装置、遥感勘测和玩具等领域,因此应用十分广泛。NRF24L01器件参数如下所示:1、小体积,QFN204x4mm封装。2、宽电压工作范围,1.9V~3.6V,输入引脚可承受5V电压输入。3、工作温度范围,-40℃~+80℃。4、工作频率范围,2.400GHz~2.525GHz。5、发射功率可选择为0dBm、-6dBm、-12dBm和-18dBm。6、数据传输速率支持1Mbps、2Mbps。7、低功耗设计,接收时工作电流12.3mA,0dBm功率发射时11.3mA,掉电模式时仅为900nA。8、126个通讯通道,6个数据通道,满足多点通讯和调频需要9、增强型“ShockBurst”工作模式,硬件的CRC校验和点对多点的地址控制。10、数据包每次可传输1~32Byte的数据11、4线SPI通讯端口,通讯速率最高可达8Mbps,适合与各种MCU连接。12、可通过软件设置工作频率、通讯地址、传输速率和数据包长度。13、MCU可通过IRQ引脚快判断是否完成数据接收和数据发送。NRF24L01芯片共有20个引脚,其管脚图如图3所示:图3NRF24L01管脚图各引脚功能如下:CE:使能发射或接收;CSN、SCK、MOSI、MISO:SPI引脚端,微处理器可通过此引脚配置NRF24L01;IRQ:中断标志位;VDD:电源输入端,+1.8~+3.9V;VSS:电源地;XC1,XC2:晶体振荡器引脚;VDD_PA:为功率放大器供电,输出为1.8V;ANT1,ANT2:天线接口;IREF:参考电流输入。3.2.3工作模式工作模式由CE引脚与PWR_UP、PRIM_RX两寄存器共同控制,可以配置为发送模式、接收模式、待机模式、掉电模式。其中发送模式分为发送模式一和发送模式二。发送模式一:在进入此模式后,只要CSN置高,在FIFO中的数据就会立即发射出去,直到所有数据发射完毕,之后进入待机模式二。发送模式二:正常的发射模式,CE端的高电平应至少保持10us,NRF24L01将发射一个数据包,之后进入待机模式一。待机模式分为待机模式一和待机模式二。待机模式一:用于降低电流损耗,在该模式下晶体振荡器仍然是工作的。待机模式二:在当FIFO寄存器为空且CE=1时进入此模式。待机模式下,所有配置字仍然保留。在掉电模式下电流损耗最小,同时NRF24L01也不工作,但其所有配置寄存器的值仍然保留。具体工作模式转变见图4。图4工作模式3.2.4工作原理发射数据时,首先将NRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入NRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么NRF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TXFIFO中数据保留以便在次重发,MAX_RT或TX_DS置高时,使IRQ变低,产生中断,通知MCU。最后发射成功时,若CE为低则NRF24L01进入空闲模式1,若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。接收数据时,首先将NRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RXFIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则NRF24L01进入空闲模式1。在写寄存器之前一定要进入待机模式或掉电模式。3.3SPI串行外设接口SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(数据输入)、MOSI(数据输出)、SCK(时钟)、CSN(片选)。SPI时序较简单,主要是在SCK时钟的控制下,两个双向移位寄存器进行数据交换,上升沿发送、下降沿接收、高位先发送。上升沿到来的时候,MOSI上的电平将被发送到从设备的寄存器中,下降沿到来的时候,MISO上的电平将被接收到主设备的寄存器中。具体时序图如图5、图6所示。图5SPI读操作时序图6SPI写操作时序NRF24L01与STC89C52单片机采用4线SPI通信协议进行通信,由于STC89C52单片机并没有SPI通信接口,故采用4个IO口进行模拟SPI通信,最大数据传输速度能达到10Mbps。采用特殊的SPI指令快速访问最频繁使用的功能,其指令为8bit,有简单的寄存器配置映射图。其指令如图7所示。图7SPI指令格式3.4LCD1602液晶显示LCD1602也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。1602采用标准的16脚接口,其中:第1脚:GND为电源地。第2脚:VCC接5V电源正极。第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。第6脚:EN端为使能端,高电平时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。LCD1602采用3.3V或5V供电电压,对比度可调,内含复位电路,能够提供各种控制命令如:清屏、字符闪烁、光标闪烁、显示移位等多种功能。其有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM。由于其功耗低、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。实物图如图8所示。图8LCD1602实物图

4硬件电路设计4.1STC89C52最小系统设计对于STC89C52单片机电路,主要设计出其最小系统,包括:电源滤波电路,晶体振荡电路,复位电路。单片机采用+5V电源进行供电,由于空气中存在电磁干扰,不利于电压的稳定,需要添加滤波电路。电源滤波电路包括一个100μF电容和几个0.1μF电容进行去耦。复位电路采用按键加电容组合,具备上电复位和手动按键复位的功能。上电复位:RC在通电瞬间的充电过程中,RST引脚会出现一定宽度的正脉冲,只要该正脉冲保持10ms以上,就能保证单片机自动复位。晶振电路加入2个20pF的电容,主要是帮组晶振起振,并维持震荡信号的稳定。电路图如图9所示。图9单片机最小系统电路4.2外设电路设计NRF24L01无线通信模块,由于该模块制作比较复杂,电感等原件不利于焊接等,因此此设计中采用现有的模块,其电路如图10所示。图10NRF24L01通信模块电路采用3个按键加上拉电阻构成输入设备,电路图如图11所示。图11按键输入设备电路由于NRF24L01无线通信模块采用1.9~3.9V电压进行供电,一旦超出3.9V电压极可能出现烧毁现象,而STC89C52单片机采用+5V电压供电,因此需要一个电压转换电路。采用ASM1117芯片进行5V转3.3V对无线通信模块进行供电,根据ASM1117芯片数据手册,在输入和输出之间均需要加入滤波电容。其电路如图12所示。图12ASM1117电压转换电路采用LCD1602进行接收和发送数据的显示,由于STC89C52单片机P0口无上拉电阻,不能输出高电平,故在与P0口连接的DB0~DB7接入上拉电阻,使P0口能够正常输出高电平。V0引脚为背光对比度调节电阻,接一个10K的可调电阻以保证液晶能够正常显示。电路如图13所示。图13LCD1602原理图4.3系统整体电路系统整体电路如下所示,各引脚之间没有采用线直接连接,而是通过net进行连接。图14系统整体电路图

5软件程序设计5.1编程软件KEIL简介KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。在使用C语言编程时,那么Keil几乎就是不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会事半功倍。KeilC51单片机软件开发系统工具包的整体结构,μVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.obj)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.abs)。abs文件由OH51转换成标准的hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立的Keil仿真器时,注意事项:1、仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。2、仿真器上的复位按钮只复位仿真芯片,不复位目标系统。3、仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。采用Keil具有众多优点:KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。5.1主程序设计主程序main.c运行时,先进入main();函数进行运行。首先,开总中断,初始化LCD1602,初始化NRF24L01无线通信模块,设置相应的通信参数。接着配置定时器0为工作方式1定时2ms。进入while(1)主循环,使用KeyDriver()函数判断按键是否按下,如果按下则调用KeyAction()函数执行相应的操作(包括无线发射模块的发送,液晶清屏)。接着设置进入接收模式,如果接收到数据,判断数据并在液晶上显示。同时每2ms进入中断对按键状态进行扫描,将状态值写入KeySta[]数组当中,在主循环中判定按键是否按下和弹起。程序流程框图如图15所示。图15程序流程图5.2外设程序设计外设驱动程序主要包括LCD1602.c、SPI.c、NRF24L01.c。LCD1602.c文件当中包括初始化函数InitLcd1602();设置显示起始RAM地址函数LcdSetCursor(uint8x,uint8y);清屏函数LcdClearScreen();向LCD1602写一字节数据函数LcdWriteDat(uint8dat);LCD1602写命令函数LcdWriteCmd(uint8cmd);以及查询LCD1602是否就绪的LcdWaitReady()函数;最后在主函数或其他需要的地方调用LcdShowChar(uint8x,uint8y,uint8chr)函数来显示单个字符;调用LcdShowStr(uint8x,uint8y,uint8*str)函数来显示字符串。LCD1602初始化程序如下。voidInitLcd1602(){LcdWriteCmd(0x38);//16*2显示,5*7点阵,8位数据接口LcdWriteCmd(0x0C);//显示器开,光标关闭LcdWriteCmd(0x06);//文字不动,地址自动+1LcdWriteCmd(0x01);//清屏}SPI.c文件当中主要包含读写函数。SPI_RW(uint8num)函数、SPI_Read(uint8reg)函数、SPI_RW_Reg(uint8reg,uint8value)函数、SPI_Read_Buf(uint8reg,uint8*pBuf,uint8nBytes)函数、SPI_Write_Buf(uint8reg,uint8*pBuf,uint8nBytes)函数。通过spi这些函数完成单片机与NRF24L01无线通信模块之间的通信。NRF24L01.c文件主要包括:模块初始化函数Init_NRF24L01(void);数据发送函数NRF24L01_TxBuffer(uint8*tx_buf);接收模式设置函数SetRX_Mode(void);数据接收函数NRF24L01_RxBuffer(uint8*rx_buf);其中初始化函数如下所示。voidInit_NRF24L01(void){Delay_us(100); CE=0;//chipenable CSN=1;//SPIdisable SCK=0;// SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写发送地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址,数据通道0 SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//数据通道0自动应答 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允许接收地址频道0 SPI_RW_Reg(WRITE_REG+RF_CH,0);//设置信道工作频率为2.4GHz,收发必须一致 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); //设置发射速率为1MHz,发射功率最大值为0dB}按键驱动扫描在中断中完成,通过定时器0定时2ms,将连续5次的扫描值记录在KeySta[]数组中,在主程序中判断是否按下弹起。其中按键0按下发送数据1并在液晶显示1,;按键1按下发送数据2,并在液晶显示0;按键2按下发送数据3,并且液晶清屏。当接收端接收到数据1时液晶显示数据1,接收端接收到数据2时液晶显示数据0;当接收端接收到数据3时清除液晶屏幕。KeyScan()函数如下所示。voidKeyScan(){ staticuint8keybuf[3]={0xFF,0xFF,0xFF}; uint8i; keybuf[0]=(keybuf[0]<<1)|KEY1; keybuf[1]=(keybuf[1]<<1)|KEY2; keybuf[2]=(keybuf[2]<<1)|KEY3; for(i=0;i<3;i++) { if((keybuf[i]&0x1F)==0x00) //按下10ms消抖 { KeySta[i]=0; } elseif((keybuf[i]&0x1F)==0x1F)//弹起 { KeySta[i]=1; } }}

6实物制作电路板正面如图16所示,电路板反面如图17所示。图16电路板正面图图17电路板反面图通信设备1发送数据10101111001并显示在LCD1602第一行t:之后,接收端显示接收的数据在r:之后,如图18所示。可以看见通信正常。图18设备1发送设备2接收通信设备2发送数据100111101并显示在LCD1602第一行t:之后,接收端显示接收的数据在r:之后,如图19所示。可以看见通信正常。图19设备2发送设备1接收

7总结分析本次课程设计设计了一个基于单片机的2.4GHz无线通信系统,采用STC89C52单片机作为主控制器,采用低功耗的NRF24L01无线通信模块作为通信设备进行无线通信,以按键作为输入设备,LCD1602作为输出设备,成功的实现了信号的输出,数据传输以及信息的显示,系统运行稳定,取得了预期的效果。基于51系列单片机的无线收发系统对低成本、低功耗、功能强等特点的要求得以充分体现,从而使得高性价比的无线收发系统能够实现向日常应用和工业检测等更广领域的快速推广成为可能。在电路设计中查阅了大量资料,确保电路设计的正确性,并通过硬件的焊接以及检测并结合简单的软件测试将硬件成功的制作出来。在进行软件程序编写时,采用了模块化编写方式,首先对简单的按键程序进行编写与调试,接着对LCD1602显示设备进行调试,以方便接下来的程序调试。最后,对无线通信模块进行编写,先根据数据手册写出SPI程序,再编写NRF24L01的发送接收程序,逐步测试。测试过程中出现接收方接收状态标志位RX_DR一直为1的情况,经过长时间的调试以及相应资料的查询,终于解决的此问题。在硬件设计的过程中,使我感到标准的52系列的单片机的数据通信能力开始显得捉襟见肘,并难以与许多新型数据接口直接连接。这主要是因为标准52系列单片机本身提供的数据传输接口只有8位并行数据和全双工串行数据接口两种,而没有以硬件的形式提供其他各类新型数据传输接口。采用标准52系列单片机的应用系统必需通过软件或硬件方式对数据传输接口进行扩展,才能满足数据通信速率和各种新型数据接口的需要。例如在本设计中单片机与NRF24L01之间的通信采用的是SPI通信接口协议,而STC89C52并没有提供相应的接口,只能通过IO口模拟的方式模拟SPI通信。通过本次课程设计,使我对单片机和无线通信模块又了更深的理解,对KEIL和AD等软件进一步熟悉了。同时通过自己编写程序,对C51的编程风格有了进一步的理解,在编写程序的时候通过查阅数据手册以及相应的资料锻炼了相应的能力。本系统是从硬件和软件两方面来设的,目的性强,对自己所学知识的一个综合能力的很好的考验,也是发挥自我创新能力的挑战。

8参考文献[1]刘岚尹勇等,单片计算机基础及应用(第1版),武汉理工大学出版社,2016年[2]尹勇撒继铭等,单片计算机原理及应用(第1版),科学出版社,2013年[3]谢自美.电子线路设计·实验·测试(第3版),华中科技大学出版社,2014年[4]刘教瑜.单片机原理及应用.武汉理工大学出版社,2011年[5]陈小中,黄宁,赵小侠编著.单片机接口技术使用子程序.人民邮政出版社,2005年[6]常敏,王涵,范江波等编著.51单片机应用程序开发与实践.电子工业出版社,2009年[7]白延敏编著.51单片机典型系统开发实例精讲.电子工业出版社,2009年

9附录9.1附录1元件清单表见表1。表1元件清单表元件清单表元件板一板二合计单片机最小系统112LCD1602112按键336AMS111711210μF电容11222μF电容1124.7k排阻1124.7k电阻331排10k滑阻112NRF24L01模块112排针225排杜邦线224排电源线112排针对应的插孔112排万用板1129.2附录2主要代码如下:*****************************************************************************************************main.c********************************************************************************************************#include<reg52.h>#include"config.h"#include"Lcd1602.h"#include"main.h"#include"Nrf24l01.h"#include"spi.h"uint8KeySta[3]={1,1,1};//按键状态标志uint8T0RH=0; //T0重载值的高字节uint8T0RL=0; //T0重载值的低字节uint8x1=2,x2=2; //液晶显示位置bitRx_flag=0; //接收数据标志位externuint8bdatanrf_sta;externuint8idataRxBuf[2]; //接收缓存存入idata区externuint8idataTxBuf[2]; //发送缓存voidmain(){EA=1;//开总中断InitLcd1602();//初始化液晶Init_NRF24L01(); //初始化NRF24L01ConfigTimer0(2); //配置定时器0LcdShowStr(0,0,"t:");LcdShowStr(0,1,"r:");while(1){ KeyDriver(); SetRX_Mode(); Rx_flag=NRF24L01_RxBuffer(RxBuf);//接收数据 if(Rx_flag)//判定接收到数据 { Rx_flag=0; if(RxBuf[1]) { if(RxBuf[1]==1) { LcdShowChar(x2,1,'1'); x2++; } elseif(RxBuf[1]==2) { LcdShowChar(x2,1,'0'); x2++; } elseif(RxBuf[1]==3) { LcdClearScreen(); LcdShowStr(0,0,"t:"); LcdShowStr(0,1,"r:"); x1=2; x2=2; } } }}}/*按键动作函数,执行相应的按键动作*/voidKeyAction(uint8i){ if(i==0) //按键0按下,发送1 { LcdShowChar(x1,0,'1'); x1++; TxBuf[1]=1; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0x00; Delay(2000); } elseif(i==1) //按键1按下,发送0 { LcdShowChar(x1,0,'0'); x1++; TxBuf[1]=2; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0x00; Delay(2000); } elseif(i==2) //按键2按下,清屏 { LcdClearScreen(); LcdShowStr(0,0,"t:"); LcdShowStr(0,1,"r:"); x1=2; x2=2; TxBuf[1]=3; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0; Delay(2000); }}/*按键驱动函数,判定那个按键按下*/voidKeyDriver(){ uint8i; staticuint8pdatabackup[3]={1,1,1}; for(i=0;i<3;i++) { if(backup[i]!=KeySta[i])//检测按键动作{if(backup[i]!=0)//按键按下时执行动作{KeyAction(i);//调用按键动作函数} backup[i]=KeySta[i];//刷新前一次的备份值 } }}/*按键扫描函数*/voidKeyScan(){ staticuint8keybuf[3]={0xFF,0xFF,0xFF}; uint8i; keybuf[0]=(keybuf[0]<<1)|KEY1; keybuf[1]=(keybuf[1]<<1)|KEY2; keybuf[2]=(keybuf[2]<<1)|KEY3; for(i=0;i<3;i++) { if((keybuf[i]&0x1F)==0x00) //按下10ms消抖 { KeySta[i]=0; } elseif((keybuf[i]&0x1F)==0x1F)//弹起 { KeySta[i]=1; } }}/*延时函数*/voidDelay(uint16s){ uint16i; for(i=0;i<s;i++); for(i=0;i<s;i++);}/*配置并启动T0,ms-T0定时时间*/voidConfigTimer0(uint16ms){uint32tmp;tmp=(SYS_MCLK*ms)/1000;//计算所需的计数值tmp=65536-tmp;//计算定时器重载值tmp=tmp+34;//补偿中断响应延时造成的误差T0RH=(uint8)(tmp>>8);//定时器重载值拆分为高低字节T0RL=(uint8)tmp;TMOD&=0xF0;//清零T0的控制位TMOD|=0x01;//配置T0为模式1TH0=T0RH;//加载T0重载值TL0=T0RL;ET0=1;//使能T0中断TR0=1;//启动T0}/*T0中断服务函数,实现系统定时和按键扫描*/voidInterruptTimer0()interrupt1{TH0=T0RH;//重新加载重载值TL0=T0RL;KeyScan();//执行按键扫描 }*********************************************************************************************************NRF24L01.c**************************************************************************************************************#include"NRF24L01.H"uint8bdatanrf_sta;sbitRX_DR=nrf_sta^6;sbitTX_DS=nrf_sta^5;sbitMAX_DS=nrf_sta^4; uint8idataRxBuf[2]={0}; //接收缓存存入idata区uint8idataTxBuf[2]={0}; //发送缓存uint8constTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uint8constRX_ADDRESS[RX_ADR_WIDTH]={

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论