[信息与通信]基于nrf24l01无线收发模块的无线输入密码锁毕业设计.docx
占科皱丈W中以染t工“,=GafidinCSsiaiiSdUfuJsckly/fCnuuZivutiyumuiUUluU)毕业设计(论丈)小区智能密码锁设计姓名李兴华学号28010202160专业班级集成电路(Ie)设计08所在学院电子信息学院指导教师(职称)王红航(讲师)完成时间2021年4月电子科技大学中山学院教务处制发电子科技大学中山学院毕业设计论文任务书题目名称小区智能密码锁设计论文的主要内容和要求1、密码输入:键盘输入:每按下一个数字键,就输入一个数值,并在显示器上显示出该数值,同时将先前输入的数据依次左移一个数字位置。无线输入:采用2.4G蓝牙频率进行无线通信,输入密码时发射端与接收端以特定的协议进行频率跳变。提高保密性。2、密码去除:按下去除键可以去除前面所有的输入值,去除成为“0000。该操作可通过键盘或遥控进行。3、密码更改:按下更改键可将目前的数码设定成新的密码。该操作可通过键盘或遥控进行。4、密码上锁:按下上锁键可将密码锁上锁。该操作可通过键盘或遥控进行。5、密码解除:按下确认键首先检查输入的密码是否正确,密码正确即开锁。推荐参考文献1、潘永雄.新编单片机原理与应用M.西安电子科技大学出版社.20032、荣政C语言程序设计M.西安电子科技大学出版社.2006预期目标和成果形式学会如何查阅资料,掌握电子电路设计并熟练掌握单片机设计流程,熟练C语言软件设计平台KEIL的使用。以及熟练掌握无线收发芯片NRF24L01的应用。成果形式:实物加论文。起止时间2021年9月20日至2021年4月30日指导单位电子信息学院指导教师王红航2021年9月25日审核意见审核签名年月日电子科技大学中山学院毕业设计论文成绩评定表设计撰写过程评语:指导教师:年月日成绩评语:评阅教师:年月日成绩,x,w评语:辩论组长:年月日成绩总分审核人:年月日小区智能密码锁设计摘要随着科学技术的不断开展,人们对日常生活中的平安保险器件的要求越来越高。为满足人们对锁的使用要求,增加其平安性,用密码代替钥匙的密码锁应运而生。密码锁具具有平安性高、本钱低、功耗低、易操作等优点。本次设计使用STC89C52单片机为主体芯片,采用AT24C02为掉电存储芯片。设计了一款可以屡次修改密码、具有密码错误报警功能和无线开锁功能的无线遥控密码锁。本系统主要包括:矩阵键盘输入模块、LCD液晶显示模块、错误报警模块、掉电存储模块,无线开锁模块,所采用的编程语言是C语言。整机电路稳定性高,本钱低,还能扩展很多功能。关键词:STC89C52;AT24C02;电子密码锁;矩阵键盘;掉电保护;无线收发TheDesignofResidentialIntelligentCipherLockAbstractWiththecontinuousdevelopmentofscienceandtechnology,people,sdemandsforsafeandsecureddevicesincreasehighlyindailylife.Inordertomeettherequirementsofthelockandtoincreasethesecurityofit,thekeywithpasswordsinsteadofthelockcomesintobeing.Thekeywithpasswordshastheadvantageofsafety,lowcost,lowpowerconsumptionandeasyoperation.ThedesignuseSTC89C52MCUforthemainchipandAT24C02chipforstorageofthepower-down.Awirelessremotecontrollockwasdesigned,whichcanrepeatedlychangethepassword,alsoenjoypassworderroralarmfunctionsandwirelessunlockfunction.Thesystemincludes:matrixkeyboardinputmodule,LCDdisplaymodule,erroralarmmodules,power-downmemorymodule,wirelessinputmodule.TheprogramminglanguageadoptedisClanguage.Thewholecircuitnotonlypocesseshighstabilityandlowcost,butalsoextendsalotoffunctions.Keywords:STC89C52;AT24C02;Electroniccodelock;Matrixkeyboard;Power-offprotection;Wirelesstransceiver1绪论O工程背景O工程的主要任务O2方案论证2主控芯片的选择2无线模块的选择2键盘的选择2液晶模块的选择23小区智能密码锁硬件设计4系统硬件的总体设计4元器件的选择5各功能模块的介绍与设计5主控芯片的介绍5无线模块的介绍与设计8N0KIA5110模块的介绍与设计9串行EEPROM存储电路设计10键盘电路设计H报警电路设计12电源转换电路设计12遥控电路设计13主机整体电路134小区智能密码锁系统软件设计15系统软件整体设计15键盘输入密码开锁程序设计16液晶显示程序设计18NRF24L01无线收发程序设计24遥控局部程序设计265小区智能密码锁系统调试28无线收发模块NRF24L01的调试28矩阵键盘的调试28NOKIA5110液晶的调试28AT24C02的调试28整机联调296结论30致谢32参考文献33附录34作品实物图:34主机程序清单:39无线键盘程序:711.1 工程背景目前,国内最常用的锁是20世纪50年代意大利人设计的机械锁,其结构简单、使用方便、价格廉价。但在使用中暴露了很多缺点:一是机械锁是靠金属制成的钥匙上的不同齿形与锁芯的配合来工作的。据统计,每4000把锁中就有两把锁的钥匙齿牙相同或类似,平安性低。二是钥匙一旦丧失,无论谁捡到都可以将锁翻开。三是机械锁的材料大多为黄铜质地较软,容易损坏。四是机械钥匙容易被复制。由于人们对锁的平安性,方便性等性能有更高的要求,许多智能锁如指纹区分、IC卡识别)也相继问世,这类产品针对特定的指纹或有效卡,能适用于保密要求高且仅供个别人使用的箱、柜、房间,但其本钱一般较高,在一定程度上限制了这类产品的普及和和推广。随着人们生活质量的提高和平安意识的加强,如何更好的防盗这一问题也变得尤为重要,传统的机械锁具由于其构造简单,带有锁孔,被撬的事件屡见不鲜,已远远不能满足人们的需要。于是各种密码锁具广泛进入人们的生活和工作,因而密码锁的平安可靠性就变得至关重要。电子式的密码锁,它具有本钱低,密码量大,不易破译的优点,但是目前的电子密码锁系统大都采用的是固定式的键盘,键盘外漏很容易导致密码被窃。而汽车电子锁是一键式开锁,开锁遥控一旦丧失将会导致任何持有该遥控的人都可以开锁。论文针对目前市场上的密码锁具存在的缺点,设计出一款既能够通过无线键盘输入密码又带有键盘输入功能的密码锁,该产品具有很好的实用意义。无线密码锁具能够在提高平安性的同时又能减少佩戴钥匙的重量。能够做到一个遥控开多个锁,方便实用。1.2 工程的主要任务本系统的设计主要是为了解决当前市面上传统锁具所存在的缺乏,而设计出一款无线遥控密码锁,本系统的具体功能实现如下:1 .设置密码用户将想设置的密码通过密码修改键进行修改,首先按下密码修改键,然后再逐个输入旧密码,最后按下确认键,旧密码正确,即可进入新密码输入状态。密码可以由用户自己任意设定(只支持8位及8位以下密码),在输入新密码时候需要二次确认,以防止误操作。另外,带无线输入键盘,可以进行输入、修改密码等操作。2 .密码显示为了帮助用户确认是否输入成功,特在电路中设置了液晶显示电路;而为了防止密码外泄,显示时,并不是显示用户按下的数字信息,而是以一个特定的字母符号提醒用户是否输入成功。有键按下,就会显示出字符。假设无键按下,那么不会显示字符。这样既巧妙的提醒了用户又保护了用户密码不被外泄,此乃本设计可靠性优点之一。3 .本机键开锁当用户键入正确密码后,再按确认键,便会自动开锁,如果键入完密码后不按确认键,默认放弃开锁。4 .密码错误报警当用户键入错误密码时,系统就会报警,液晶上会有错误提示。由蜂鸣器发出报警声。当连续三次出现密码错误时,那么系统会长期报警不止。这时必须按复位方可停止。此乃本设计平安可靠性之二。5 .遥控解锁当有特殊情况发生时,或怕有人偷窥到密码时,或不想用键盘开锁时,可选用遥控器来解锁。此乃本设计平安可靠性之三。该设计使用AT24C02保存密码,支持复位保存,掉电保存功能。在遇到突发情况,导致设备突然断电时,密码也不会丧失。此乃本设计平安可靠性之四。2方案论证2.1 主控芯片的选择在本系统设计中所需要的I/O口为23个,综合各方面的因素考虑,本控制系统设计的硬件选用STC89C52作为主控中心。STC89C52是一个低功耗,高性能的CMOS8位单片机,片内含8kBytesISP(In-systemPrOgrammabIe)的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM)0兼容标准MCS-51指令系统及80C52产品引脚结构。其芯片内部集成了8位中央处理器和ISPFlaSh可反复擦写的存储单元。STC89C52具有的特点如下:40个引脚,FIaSh片内程序存储器8k字节,内部RAM256字节,32个双向输入/输出(I/O)口,1个6向量两级中断结构,具有16位可编程定时计数器3个,全双工串行通信口1个,片内振荡器及时钟电路。2.2 无线模块的选择在本系统中采用遥控方式来进行开锁的主要目的就是使锁的平安性更高,确保数据在传输过程中的准确无误,更加方便人们使用。方案一在最初设计本系统时首先想到的遥控开锁器件是红外开锁。红外,作为无线通信方式的一种,具有实现简单、价格廉价等优点。但通讯过程中不能改变要对准的方向,且中间不能有障碍物,遇障碍物通讯会中断,也就是说红外不能穿墙而过。由于红外线的波长较长,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通讯的场合,进行点对点的直线通信。红外通讯技术的主要目的是取代线缆连接进行无线数据传输,功能单一,扩展性差。另外,红外通信的保密性相对较差。但本设计在保密性方面要求很高所以本方案不可行。方案二采用NRF24L01了作为无线通信器件。NRF24L01单片无线收发器工作的载波频率为2.4GHz,因此在无线传输中具有传输速度快,无线信号空中停留时间短的优点。既节省收发能量又能提高收发速度。同时保密性方面也得到了极大的提高。其通信协议以及数据的承载方式都极具加密性。可以在一定范围内选择载波频率,且具有125个频点。对于通信的加密性方面有极大帮助。另外,NRF24L01模块性价比相对较高。2.3 键盘的选择由于本系统要使用13个按键,其中数字键10个(0-9),特殊功能键3个,假设使用独立式按键连接方式需要13个DO口,这样一来I/O口的占用量太大,浪费I/O资源,所以选用4*4的矩阵键盘,这样可以省下5个I/O资源。2.4 液晶模块的选择在设计本系统显示模块时首先想到的用来显示的器件是LCD1286或LCD1602,LCDI2864液晶显示器可以显示数字、汉字和图形,但价格比拟高。LCDI602虽然价格比拟廉价,但只能用于符号显示或数字的显示,不能显示汉字。经过多方了解,查找。最终定下了NoKlA5110液晶。能够显示汉字,并且价格与LCDl602相当。除此之外,该液晶具有所需I/O口少,体积小,编程方便等优点。3小区智能密码锁硬件设计3.1系统硬件的总体设计本系统主要使用无线技术来实现无线开锁的设计,但是仍然保持了原有密码锁的根本功能,系统主要的两大局部分别为:无线密码开锁局部和根本密码锁开锁局部。其中根本密码开锁包括:键盘输入模块、LCD液晶显示模块、报警模块、存储模快、电源转换电路模块、无线接收模块、开锁模块。无线密码开锁局部包括:电源转换电路模块、无线发送模快、矩阵键盘模块。无线遥控密码锁的根本密码锁开锁局部硬件框图如图3-1所示:图3-1无线密码锁的根本密码锁开锁局部硬件框图各功能模块的具体功能如下:1、键盘输入模块:用一个4*4的矩阵键盘,通过键盘输入的正确与否来执行相应的操作。2、LCD液晶显示模:同样是针对键盘输入的正确与否来执行相应的提示信息。3、报警模块:当用户出现输入密码不正确时发出报警信息。4、存储模快:主要实现对初始密码的存储和修改后密码的存储,防止掉电后密码丧失。5、电源转换电路模块:由于单片机的工作电压为5V,但无线模块的最好工作电压为3.3Vo那么这时就需要搭一个电源转换电路。6、无线发送模块:将遥控模块中键盘输入的值传送给无线接收模块。7、无线接收模块:将对无线发送模块传过来的数据在接收端进行相应的处理。无线遥控的系统框图如图3-2所示:图3-2无线密码锁的发射硬件框图3.2 元器件的选择经过对市场的了解,综合各方面的因素考虑,本系统的设计主要采用以下几款元器件:1、主控芯片:STC89C522、无线模块:NRF24L013、EEPROM:AT24C024、LCD液晶:NOK1A51105、报警器:1个蜂鸣器6、键盘:4*4矩阵键盘3.3 各功能模块的介绍与设计3.3.1 主控芯片的介绍STC89C52带8K字节闪烁可编程可擦除只读存储器(FPERe)M-FlaShProgramableandErasableReadOnlyMemory)。低电压,高性能。兼容工业标准的MCS-51输出管脚和指令集。单片机总控制电路如图3-3所示:图3-3单片机总控制电路这个电路可以作为单片机的程序下载电路,可以从PC机通过该电路将.HEX程序文件下载进单片机。还可以作为单片机与PC机的串口通信接口电路。1.振荡电路STC89C52内部有一个高增益反相放大器,XTAL2与XTALl分别是它的输入与输出端。当该两个引脚与定时元件相连时内部振荡器就产生自激振荡从而产生定时信号带动单片机工作。定时用的并联谐振回路通常由石英晶体和电容组成。晶体振荡器频率范围为1.212MHz,电容值范围为530pF,电容值的大小可对频率起微调的作用。内部时钟电路方式如图3-4(a)外部时钟电路方式如图3-4(b)所示,XTALl接地,XTAL2与外部振荡器相连。对于外部振荡器信号,需要保证脉冲宽度在特定范围内,一般采用频率低于12MHZ的方波。内部与外部时钟电路如图3-4所示:三Lp一I三三图3-4a)内部时钟电路方式图3-4b)外部时钟电路方式图3-4时钟电路(1)复位操作复位是单片机的初始化操作。复位操作中把PC初始化为000OH,使单片机从000OH单元开始执行程序。在单片机上电时一般会进行上电复位。当程序运行失常,导致单片机死机时,复位操作可以使系统重启,单片机便能进入正常工作状态。除PC之外,复位操作还对其他一些存放器有影响,它们的复位状态如表3-1所示。表3-1一些存放器的复位状态存放器复位状态存放器复位状态PCOOOOHTCONOOHACCOOHTLOOOHPSWOOHTHOOOHSP07HTLlOOHDPTROOOOHTHlOOHP0-P3FFHSCONOOHIPXXOOOO(X)BSBUF不定IEOXOOOOOOBPCONOXXXOOOOBTMODOOH(2)复位信号及其产生RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。假设使用频率为6MHz的晶振,复位端需要有4us以上的高电平才能使系统进入复位状态。STC89C52具体介绍如下:1、主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源。GND(Pin20):接地线。2、外接晶振引脚(2根)XTAL1:片内振荡电路的输入端或接片外时钟信号时接地。XTAL2:片内振荡电路的输出端或外部时钟的输入端。3、控制引脚(4根)RST/VPP:复位引脚,两个机器周期的高电平可使单片机复位。ALE/PROG:地址锁存允许信号。PSEN:外部存储器的读选通信号。EA/VPP:程序存储器选择端,接低电平使用外部程序存储器,接高电平那么使用内部程序存储器。4、可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位PO、Pl、P2、P3口,每个口有8位(8根引脚),共32根。PO:8位双向I/O口线,名称为P0.0-P0.7oPl口:8位准双向UO口线,名称为PLoP1.7。P2:8位准双向I/O口线,名称为P2.0P2.7。P3:8位准双向I/O口线,名称为P3.0P3.7。STC89C52内部主要硬件:1、两个外部中断。2、一个串口。3、3个定时器。本设计用到的复位电路与晶振电路如图3-5所示:图3-5 a)复位电路图3-5b)晶振电路图3-5复位电路与晶振电路3.3.2无线模块的介绍与设计NRF24L01模块的原理图如图3-6所示:图 3-6 NRF24L01 模块NRF24L01模块的主要特点:2.4GHz全球开放ISM频段,最大OdBm发射功率,免许可证使用;低工作电压:正常工作电压3.6V;高速率:最高2Mbps,这样使得信号空中停留时间极短,减小了无线碰撞的可能(软件设置IMbps或者2Mbps的空中传输速率);多频点:125频点,可以应用于多点通信以及跳频的实现;超小型:天线内置,体积小巧,规格:15x29mm(包括天线);低功耗:快速的传输速率也降低了收发功耗。很低的应用本钱:NRF24L01集成了RF。NRF24L01应用的是SPl接口,可以与单片机的SPl接口直接相连。没有SPl接口的单片机可以利用单片机的I/O口进行模拟,内部有FIFO,用于数据缓存,因此NRF24L01可以与各种上下速微处理器接口,便于使用低本钱单片机。便于开发:由于链路层完全集成在模块上,非常便于开发。能自动检测到数据丧失并重新发送数据,重发间隔时间以及重发次数由软件控制。在收到数据后会向发送方自动发送应答信号。3.3.3 NOKlA5110模块的介绍与设计NOKlA5110模块如图3-7所示:GNDU6CLK VCCMDl D/C LCSVCCO-GNDIT C7 IlLCDRST 1042 3. A6 JL 9VDD CLK DIN D/C CS OSC GNDVOUT RSTLXELLELECQN AKNXLLD1D1LED2ALED2K Sp* L 丝丝。 U-LLNR5 Ik-4a11. lIedJ213.1GNDNoKlA511。LCD9 卜QO图3-7NoKIA5UO模块它与单片机六个I/O口相连。NoKlA5110液晶模块具有以下特点:84x48的点阵LCD,可以显示4行汉字,(3) (2)采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9条。支持多种串行通信协议(如AVR单片机的SPI、MCS51的串口模式O等),4Mbps传输速率。(4) 1.CD控制器以及驱动器芯片已集成到LCD晶片上,使得模块的体积很小。(4)采用低电压供电,正常显示时的工作电流在200A以下,且具有掉电模式。它与主控制芯片的接口电路如图3-8所示:图3-8NOKlA5110接口电路该原理图对应于电路板上的一个8孔插槽。只需将5110模块插入该排座就完成连接。3.3.4 串行EEPROM存储电路设计(1)管脚图AT24C02管脚图如图3-9所示:AodbVccAIq27LlWPA2y36SCLVSSqSDA图3-9AT24C02管脚图简介AT24C02是一个2K位串行CMOSE2PROMoAT24C02有一个16字节的页写缓冲器。该器件通过c总线接口进行操作,有一个专门的写保护功能。(3)特性:1、数据线上的看门狗定时器2、可编程复位门栏电平3、高数据传送速率为400KHZ和IC总线兼容4、2.7V至7V的工作电压5、低功耗CMe)S工艺6、16字节页写缓冲区7、片内防误擦除写保护8、上下电平复位信号输出9、100万次擦写周期10、数据保存可达100年11、商业级、工业级和汽车温度范围(4)管脚描述SCL串行时钟:SCL数据发送或接受的基准时钟,为输入引脚。SDA串行数据/地址:SDA数据或地址的串行输入与输出端,可进行线或。AO、Al、A2存储器地址输入端:用于存储器的级联。WP写保护:接高电平时存储器为只读。GND、VCC:电源弓I脚。(5)AT2402与单片机的电路连接如图3-10所示:图3-10AT2402与单片机的连接3.3.5 键盘电路设计矩阵键盘原理图如图3-11所示:图3-11矩阵键盘原理由于本设计只用到了13个按键,所以最后一列按键只有一个。矩阵键盘原理:每个按键都有两个对应的1/0口与之相连,按键按下前,其两端的I/O口分别输出一高一低电平。当按键按下时,高电平被拉低,利用这个原理我们就能通过程序判断出具体是哪个按键按下。3.3.6 报警电路设计报警电路原理图如图3-12所示:图3-12报警电路报警电路原理:PNP三极管的开关特性是当基极为低电平时导通,基极为高电平时截止,所以要使蜂鸣器鸣叫,只需使单片机在P2.7口输出一个低电平即可。反之,输出高电平那么停止鸣叫。3.3.7 电源转换电路设计5V与3.3V之间的电源转换电路如图3-13所示:由于NRF24L01模块的正常工作电压不得超过3.6V,而单片机必须要4.5V以上才能正常工作。所以必须要有一个电源转换电路使它们之间到达电平兼容。二极管的正向压降为0.7V,如图3-15,在RF24L01模块的电源两端串联了两个二极管后,该模块上的电压为(VCC-0.7*2)Vo当VCC为5V时加在该模块的电源电压为3.6V0而5V电压也正好能够适合STC89C52单片机电压。在I/O口之间加上IK的限流电阻是为了防止由于两芯片的电平压差过大而导致I/O间电流过大,导致芯片烧毁。3.3.8 遥控电路设计为了适应遥控要求体积小,轻便易携的特点。我把遥控的主控制芯片改成了只有20引脚的STCl2C2052芯片。该芯片具有体积小,功能强大,价格低廉的特点。其指令系统与52单片机几乎完全相同。遥控局部整体原理图如图3-14所示:图3/4遥控原理图该遥控是以STC12C2052为核心控制芯片,带矩阵键盘输入,无线收发模块NRF24L01以及LED指示灯电路。3.3.9 主机整体电路主机的整体电路图如下3-15所示:图3-15整机原理图4小区智能密码锁系统软件设计4.1 系统软件整体设计在本系统中软件设计是整个系统设计的重要局部,在保证硬件电路正确无误的根底上,加上软件编程才可以实现整个系统预期的功能。系统软件运行总体设计流程包括:系统初始化,判断是否有按键按下,识别相应按键,如果条件满足执行开锁并在液晶上显示提示信息,条件不满足报警并在液晶上显示相应的出错的提示信息。在本系统中,软件的设计主要包括:无线数据的发送和接收程序设计、数据存储程序设计、液晶显示程序设计、键盘输入程序设计、密码比拟程序设计、开锁程序设计、报警程序设计等。本系统的层次方框图如图4-1所示。无线遥控密码锁键盘输入掉电存储图4-1无线遥控密码锁的层次方框图主程序主要任务是协调各个模块之间的功能,使指定的模块在特定的状态下工作。如:单片机检测到按键按下操作,就会调用按键子程序读取键值,以判断是哪个按键出现按键动作。如果是数字键按下那么认为输入的是密码,此时调用密码处理函数进行处理。如果按下的是确认键,那么调用相应函数对密码进行比照,如果按下的是模式切换键,那么调用相应的模式显示函数以及涉及到该模式的所有模块函数。主函数就是通过这种判断、调用的方式来完成子程序间各个功能模块的协调。系统整体流程图如图4-2所示:图4-2整机流程图4.2 键盘输入密码开锁程序设计密码程序流程图如图4-3所示,当程序运行时,会判断键盘是否有按键被按下,当有按键被按下时,系统会判断是数字键09,还是功能键。假设是数字键,那么将按键值存入到密码数组里,然后将输入的密码与本身的密码做比拟,假设相同,那么执行开门并在液晶上显示正确的提示信息。假设不相同,那么执行报警并在液晶上显示错误的提示信息。图4-3密码处理程序流程图矩阵键盘扫描程序ucharkeyscan()ucharscan1,scan2,keycode,j;P3=0xfD;scanl=P3;if(scanl&OxfD)!=OxfO)/判键是否按下delayms1(80);scanl=P3;if(scanl&0xfD)!=0xf0)/延时30ms二次判键是否按下P3=0x0f;scan2=P3;keycode=scan1scan2;/组合成键编码for(j=O;j<=15;j+)(if(keycode=key-codej)查表得键值(key=j;retum(key);返回键值)/elsePl=Oxff;return(16);)4.3 液晶显示程序设计液晶显示程序的主要功能是对当前锁的状态进行提示,在使用液晶时,首先要对液晶进行初始化,然后还要设置字符的显示位置,只有将前期的准备工作设置完后才能在相应位置显示相应的提示信息,当没有人进行操作时,显示一串提示字符,当开锁正确时,在液晶上也会显示相应的正确信息提示,当开锁错误时,在液晶上也会显示相应的错误信息提示。液晶显示程序设计流程图如图4-4所示:图4-4显示子程序流程图显示程序核心程序代码如下所示。1.CDJnit:5IlOLCD初始化*/voidLCDJnit(Void)res=O;delay_lms();res=l;1.CD_write_byte(0x21,0);初始化Led,功能设定使用扩充指令LCD_write_byte(OxdO,O);设定液晶偏置电压1.CD_write_byte(0x20,0);使用根本指令1.CD_write_byte(OXOC,0);/设定显示模式,正常显示1.CD_set_XY:设置LCD坐标函数输入参数:X:0-83Y:0-5*/voidLCD_set_XY(unsignedcharX,unsignedcharY)(1.CD_write_byte(0x40Y,0);/column1.CD_write_byte(0x80X,0);/row)1.CD_clear:LCD清屏函数*/voidLCD_clear(void)(unsignedchart;unsignedchark;1.CD_set_XY(0,0);for(t=0;t<6;t+)for(k=0;k<84;k+)(1.CD_write_byte(OxOO,1);1.CD_write_shu:显示8(宽)*16(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;*/voidLCD_write_shu(unsignedcharrow,unsignedcharpage,unsignedcharc)row:歹Upage:页dd:字符unsignedchari;1.CD_set_XY(row*8,page);/歹J,页for(i=0;i<8;i+)1.CD_write_byte(shuzic*16+i,l);1.CD_set_XY(row*8,page+1);/歹IJ,页for(i=8;i<16ji+)(1.CD_write_byte(shuzic*16÷i,l);)1.CD_write_hanzi:显示16(宽)*16(高)点阵列汉字等半角类输入参数:c:显示的字符;*/voidLCD_write_hanzi(unsignedcharrow,unsignedcharpage,unsignedcharc)row:歹IJpage:页dd:字符(unsignedchari;1.CD_set_XY(row*8,page);/列I,页for(i=0;i<16;i+)1.CD_write_byte(hanzic*32+i,1);)1.CD_set_XY(row*8,page+1);/歹J,页fbr(i=16;i<32;i+)(1.CD_write_byte(hanzic*32+i,1);)AT24C02程序设计本设计中数据的存储芯片选用的是AT24C02,该芯片是串行的EEPROM,支持I2C总线数据传送协议。在本系统中主要用来做掉电存储器,能将输入的数据存入AT24C02,也能从AT24C02中读出,程序流程图如图4-5所示:图45存储和读出程序流程图AT24C02的读写是应用的I2C总线。所以要对它进行操作,最核心的是要懂得I2C总线。一下是以I2C总线时序为根底对AT24C02进行操作的最底层函数。voidstart()/开始位SDA=1;SCL=1;delayNOP();SDA=0;delayNOP();SCL=O;voidstop()/停止位(SDA=0;delayNOP();SCL=1;delayNOP();SDA=1;ucharshin()/从AT24C02移出数据到MCUuchari,read_data;for(i=0;i<8;i+)SCL=1;read_data«=1;read_data=SDA;SCL=O;)return(read_data);)bitshout(ucharwrite_data)/从MeU移出数据到AT24C02(uchari;bitack_bit;for(i=0;i<8;i+)/循环移入8个位(SDA=(bit)(write_data&0x80);_nop_();SCL=1;delayNOP();SCL=O;write_data«=1;)SDA=1;读取应答delayNOP();SCL=1;clelayNOP();ack_bit=SDA;SCL=O;returnack_bit;返回AT24C02应答位)4.4 NRF24L01无线收发程序设计NRF24L01属于SPI时序芯片。而52单片机并不带有SPl接口。所以我们只能在软件中模拟SPI时序。uchar status, i;CSN = 0;status = SPI_RW(reg);for(i=0; i<bytes; i+)SPLRW(pBufi);CSN= 1;retum(status);图4-6NRF24LoI程序流图以下是NRF24L01最核心的SPl读写程序,用于其指定存放器的读写。函数:SPI_Write_Buf()描述:把PBUf缓存中的数据写入到nRF24L01,通常用来写入发射通道数据或接收/发送地址ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)CSN置低,开始传输数据/选择存放器,同时返回状态字/逐个字节写入nRF24L01CSN拉高,结束数据传输/返回状态存放器函数:SPI_Read_Buf()描述:从reg存放器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes)ucharstatus,i;CSN=0;status=SPI_RW(reg);for(i=0;i<bytes;i+)pBufi=SPLRW(O);CSN=1;retum(status);CSN置低,开始传输数据/选择存放器,同时返回状态字/逐个字节从nRF24L01读出CSN拉高,结束数据传输/返回状态存放器函数:SPI_Read()描述:从reg存放器读一字节ucharSPI_Read(ucharreg)ucharreg_val;CSN=0;SPI_RW(reg);reg_val=SPI_RW(0);CSN=1;retum(reg_val);CSN置低,开始传输数据/选择存放器/然后从该存放器读数据CSN拉高,结束数据传输/返回存放器数据函数:SPI_RW_Reg()描述:写数据value至Jreg存放器uchar status;CSN = O;status = SPI_RW(reg);SPLRW(value);CSN= 1; retum(status);uchar SPLRW(UChar byte)(uchar i;for(i=0; i<8; i+)(MOSI = (byte