【基于51单片机包柜密码锁设计11000字】_第1页
【基于51单片机包柜密码锁设计11000字】_第2页
【基于51单片机包柜密码锁设计11000字】_第3页
【基于51单片机包柜密码锁设计11000字】_第4页
【基于51单片机包柜密码锁设计11000字】_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机包柜密码锁设计摘要随着工业产业的不断发展,人们生活的质量水平不断提高,例如超市、大型卖场,需要进行临时的箱包寄存,若采用人工寄存,效率较低,也不方便,存在失误的可能,所以,目前研发自动的包柜密码锁拥有良好的市场前景。本文可以将包柜密码锁主要分为硬件电路和软件设计两部分。系统的硬件电路主要由键盘输入电路作为主要的输入部件,为了能够实现良好的人机交互,将键盘分别编号为数字为0-9,以及“退格”、“存”、“取”、“确定”、“设置手机号码”五个功能按钮,键盘输出经过总线传输至单片机,用户可以按照LCD液晶显示器中实时显示的内容进行选择,单片机与LCD液晶显示器之间通过并行数据传输,单片机I/O引脚通过上拉电阻与LCD连接,从而实现对密码输入以及功能选择;另外,系统还具有密码正确,自动开柜功能,通过对比输入的密码与原先自动生成的随机密码结果,当二者匹配时,自动启动开启箱柜门,系统自动生成的密码会通过GSM模块发送短信至手机。关键词:包柜密码锁;硬件设计;设备选型;AT89C51目录1绪论 11.1研究背景 11.2功能要求 11.3研究现状 11.4设计方案与创新点 22设备选型 32.1单片机设备选型 32.1.1AT89C51单片机 32.1.2DSP数字信号处理器 32.1.3MSP430F249单片机 32.1.4PIC单片机 42.1.5综合分析 42.2显示屏选型 52.3总体设计方案 63硬件设计 73.1硬件电路总原理图 73.2主要硬件模块原理图及相关说明 73.2.1单片机最小系统 73.2.2LCD液晶显示电路 83.2.3继电器控制电路 93.2.4键盘输入模块 94软件设计 114.1仿真软件简介 114.1.1Proteus仿真软件 114.1.2Keiluvision4软件 114.2主程序流程及相关说明 124.3子程序流程图 134.3.1按键功能流程图 134.3.2LCD驱动程序设计 155测试结果与分析 176结论 19参考文献 20附录 211绪论1.1研究背景随着如今自动控制技术的逐渐成熟,以单片机为代表的微控制器,影响着工业现场以及人类日常生活的方方面面,越来越多的电力电子设备通过加入了微控制器,变得更加智能,更加高效。随着科学技术不断发展与提升,单片机控制系统已经成为当今世界最具发展潜力和背景的研究方向之一,它出现的主要动机在于,方便人们的日常生产劳作,如今的市面上也出现了各种密码锁方面的产品,例如家庭密码锁,商场或超市的箱包寄存柜等。综上所述,可以发现,单片机技术经过几十年的发展,如今已经十分成熟,在程序员的手中,能够将其实现多种功能,本设计采用低功耗的8位单片机AT89C51作为主控芯片,利用键盘输入电路作为输入,通过对密码的检测,能够对应用箱柜的开关进行控制,同时通过继电器控制电路,能够实现箱柜的自动开关,从而大大提高了本设计的实用性和可靠性。1.2功能要求基于51单片机的包柜密码锁系统要实现的具体任务如下:(1)通过LCD1602液晶实时显示当前的操作箱柜名称以及密码;(2)能够通过按键实现对密码、手机号的输入;(3)当密码与随机生产的密码匹配时,能够触发继电器,实现自动开锁。1.3研究现状由于电子设备的限制,以前开发的储物柜控制系统不是很实用,并且密封性差。最基本的是依靠最简单的模拟电子开关来实现这一目标。生产简单,但不安全。它基于EDA,电路结构复杂,电子元件很多,有些使用2051系列20针脚单片机实现,但密码简单易破解[4]。随着电子元件的发展,各种类型的储物柜控制系统应运而生,它们的功能越来越强大,使用更方便,安全性和隐私性得到了提高。为了实现从以前的一次性密码输入到当前密码和感应元件的更真实的电子加密,用户只能使用无法解锁的相同密码或加密狗。随着电子元件的发展以及人们对隐私的日益增长的需求,越来越多的储物柜控制系统应运而生[5-7]。数字,字母,图形图像,人体生物学特征和时间等因素都可以是电子信息,因此一起使用这些信息可以使电子防盗密码检查更加机密。例如,对于受到严格保护的保险箱,应使用复杂信息密码,电子防盗密码控制系统。结合信息的使用,电子防盗密码控制系统可以具有无限的可扩展性。可以看出,电子信息的结合是未来储物柜控制系统的发展趋势。孙鹏宇,魏立明设计的智能密码锁采用STC89C52芯片,该芯片由电源模块,单片机最小系统模块,显示模块,显示模块,报警模块和矩阵键盘组成。模块。该设计实现了一系列基本功能,例如液晶显示屏上的汉字显示,开关状态,输入多个错误密码后的自动锁定功能,根据需要更改单词密码的功能以及在输入时自动报警的功能。密码错误。操作方便,气密性强,具有良好的应用价值[8]。江宁等人设计了基于51单片机的智能指纹密码锁。指纹模块收集数据并将其发送到单片机,以在显示屏12864上实时处理和显示信息。可以通过程序重置来设置密码锁定状态,该产品可以注册100多个指纹信息,相比之下通用机械锁,快速,准确,安全的解锁,扩展性强,不易断裂,使用更方便[9]。郭阳光使用51台单片机作为指纹识别电子密码锁的检测和控制核心,使用矩阵键盘输入设置的密码,并使用预指纹-添加了两种方法的解锁。系统使用LCD12864液晶显示器实时显示通过矩阵键盘执行的功能信息,并设置功能以更正密码。同时,在解锁或更改原稿时,如果不小心输入了错误的密码,则输入密码即可执行退格操作。如果不想输入密码或防止其他人窃取,可以结束输入,这进一步提高了指纹密码锁定的安全性[10]。1.4设计方案与创新点(1)本方案在设计中利用单片机控制技术,将密码通过键盘输入电路进行设置,并将数值实时显示在LCD液晶显示屏上。(2)此包柜密码锁系统通过增加软件的功能,使得系统的硬件结构简单,降低了系统成本,并且增加了系统的可靠性,实用性更强。(3)此系统软件部分全部采用C语言编写,提高了程序的可读性和可移植性,整个单片机系统简单、稳定、可靠,具有广阔的应用前景。(4)该系统的原理、结构简单,设计中充分考虑了电磁兼容的问题,使得系统在使用中对信号能够有更精确的采集,运行上更加稳定。2设备选型2.1单片机设备选型2.1.1AT89C51单片机单片机在控制领域已经发展了近半个世纪,其应用广泛在如今已经可为是家喻户晓。对于AT89C51单片机来说,它内置了8位片内flash,运行时钟最高可以达到12兆赫兹,包含的SRAM容量大小为6K,并且内置了2个16位的定时器,另外它具有32个IO引脚。从工业控制的视角来看,单片机拥有了无法替代的位置[11]。本文选取AT89C51单片机,其具体参数如下表2.1所示:表2.1AT89C51单片机的基本参数表额定电压ADC定时器5V10通道12位ADC三个16位定时器SRAMIO引脚额定频率2.1.2DSP数字信号处理器对于DSP来说,它的功能要比单片机强大的多,通过它字面的数字信号处理器含义就能明显看出,它可以认为是升级版的单片机。C2000这个系列的DSP是德州仪器在工业控制领域的代表产品,该系列中最为代表性的是32位的TMS320F2812芯片,它在工业控制领域应用非常广泛,其最高工作频率高达150MHz,芯片每秒处理任务指令高达150万条,内置一个12位的ADC,片内flash为12位,在实际操作过程中需要任何存储扩容就可以非常方便的应用于工业工业控制领域[12]。与单片机相比,DSP的IO引脚更多,所以说使用它能够大部分用户的需求,不过DSP的造价相对较高,本文所用芯片具体参数如表1-2所示:表2.2TMS320F2812的基本参数表额定电压ADC定时器3.3V12位三个32位定时器ROMIO引脚额定频率128K56个150MHz2.1.3MSP430F249单片机对于MSP430F249这款超低功耗控制器来说,它是美国TI公司专门为简单应用设计的,在设计的过程中采用低功耗外设,以求进一步降低电池更换频率。该芯片内部包含的CPU是16位的,并且包含2个的定时器和1个12位的AD转换器,这些配置能够保证它可以满足大部分应用需求,常用封装具有48个引脚,I/O口数量的增加使之能够适应一些更为复杂的应用场合。对于这款芯片来说,它内置了32kz晶振,能够支持的额定频率达到了16MHz,内部还拥有3个16位的计时器,该计时器不同于传统51单片机的定时器,具有DSP定时器的捕获以及比较功能,同时还有7个带寄存功能的16位定时器Timer_B。该芯片功耗只有0.3uA,如果需要只需要1us时间就可以将其从待机状态唤醒[13]。该芯片具体参数如下表2.1所示:表2.1MSP430F249单片机的基本参数额定电压3-5.5V额定频率16MHzROM128KIO引脚56个定时器三个16位定时器ADC无2.1.4PIC单片机PIC24E单片机是美国微芯(microchip)公司自主研发生产的低功耗、集约型单片机,其与8051单片机相比,具有运算速度快的优势,其一条指令周期在160-200ns左右,同时,对于单片机内部的数据存储器和程序存储器可以进行并行访问,因此,除了个别指令,每条指令的执行周期都只需要一个指令周期,同时,PIC单片机的另外一个特点是其IO接口为双向的,其输出电路为CMOS互补推挽,因此,其IO接口数量也相对较少。但是PIC单片机的内部专用寄存器分为四个不同部分,在进行程序编制时,需要考虑的问题较多,因此,对于新手而言并不算友好,编制难度较大[14]。PIC24E单片机的基本参数如下表2.4所示:表2.4PIC24E单片机的基本参数额定电压3-5.5V额定频率150MHzROM128KIO引脚28个定时器三个16位定时器ADC无2.1.5综合分析为了更好全面的对比分析四种微控制器,将上面四个小节介绍的四款芯片的优缺点进行归纳,具体如表2.5所示。表2.5四种微控制器的多维度对比表类型最高运行频率数据处理位数制造成本引脚数量编程难度AT89C5112MHz8位低32简单TMS320F2812150MHz32位以上高64简单MSP430F249150MHz8位低48较难PIC24E150MHz8位低28较难从表中可以看出。TMS320f2812制造成本较高。虽然其运行频率处理位数。引脚数量均最好,但是由于本文的密码锁并非复杂的控制系统,所以使用DSP控制芯片性价比较低;MSP430与PIC单片机其制造成本低、引脚数量丰富、运行频率也相对适合,不过其编程难度较高,对于新手十分不友好,在进行程序设计时可能会遭遇相当的困难;而AT89C51单片机制造成本低、编程难度不高,器件内部结构简单,没有复杂的寄存器、引脚调用要求,十分适用于一些简单的控制系统,因此选取其作为本文的控制核心。2.2显示屏选型(1)LCD液晶显示屏LCD显示器目前主流设备是2.4寸240*320分辨率(像素)的LCD1602显示器,其具有8位并行接口,由5V电源供电,可以进行背光模式,该型号LCD液晶屏的显示亮度,可以由滑动变阻器RV2进行调节,为了实现其并行数据传输,需要使用8个I/O引脚进行数据传输[17]。(2)OLED液晶显示屏OLED是有机发光二极管的英文缩写,其与普通LCD的区别在于,其能够进行自发光,因此,不需要专门的背光源,同时,由于其厚度较薄、反应速度快、对比度较高,显示更加清晰,因此已经被业内广泛认为是未来的平面显示器主流器件[18]。另外,该屏幕具有以下特点:(1)本器件分辨率为128*64。(2)该器件支持多种接口,目前其主要支持6800以及8080两种并行接口,此外,还支持SPI接口方式,并且支持3线或4线两种模式,此外,若需要减少硬件规模,还支持2线的IIC接口模式,对于以上接口模式,只需要对OLED屏上的BS0-BS2引脚进行设置即可。(3)目前市场上主流的OLED开发板主要使用两种接口模式,分别是7针的SPI/IIC兼容模式以及4针的IIC模式,两种接口模式都能够实现数据的高效显示。(4)目前OLED屏幕可以有三种颜色模式进行选择,分别是黄蓝色、白色以及蓝色。其中黄蓝色模式是屏幕的上25%显示黄光,其余部分显示蓝光,在该演示模式下,颜色以及其区域大小均无法修改;白光模式就是传统的黑底白字模块;蓝色模式就是黑底蓝字。(3)真空荧光显示屏真空荧光显示器VFD(真空荧光显示器)是由真空管开发的一种显示设备,它的基本特性与电子管的工作特性基本相对应。它由发射电子的阴极(直接加热的普通灯丝),加速和控制电子流动的栅极,在玻璃基板上印刷有电极和荧光粉的阳极,栅极和玻璃组成[8-9]。它具有多色显示,高亮度和低压驱动等特点,这使它易于适应集成电路,并广泛用于各种领域,例如家用电器,办公自动化设备,工业设备和汽车[19]。首先,VFD显示器显示效果好,但是本文应用较为简单,所以首先排除,之后,OLED液晶显示屏和LCD液晶显示器对比,本设计由于功能较为简单,因此,若使用OLED液晶显示屏,成本过高,性价比较低,LCD液晶显示器虽然像素较低,但是完全能够满足本设计中对于密码以及手机号等数字的显示需要,因此,本设计选用LCD1602LCD液晶显示屏作为显示界面。2.3总体设计方案根据上文的分析,可以将包柜密码锁主要分为硬件电路和软件设计两部分。系统的硬件电路主要由键盘输入电路作为主要的输入部件,为了能够实现良好的人机交互,将键盘分别编号为数字为0-9,以及“退格”、“存”、“取”、“确定”、“设置手机号码”五个功能按钮,键盘输出经过总线传输至单片机,用户可以按照LCD液晶显示器中实时显示的内容进行选择,单片机与LCD液晶显示器之间通过并行数据传输,单片机I/O引脚通过上拉电阻与LCD连接,从而实现对密码输入以及功能选择;另外,系统还具有密码正确,自动开柜功能,通过对比输入的密码与原先自动生成的随机密码结果,当二者匹配时,自动启动开启箱柜门,系统自动生成的密码会通过GSM模块发送短信至手机。整个柜密码锁的结构框图如图2.1所示。单片机处理单元单片机处理单元按键设置继电器控制GSM短信发送LED指示灯显示电路LCD1602显示图2.1系统总体结构图3硬件设计3.1硬件电路总原理图包柜密码锁系统的硬件设计部分包括了单片机最小系统、LCD液晶显示电路、继电器控制模块以及键盘输入电路等基本结构,接下来就按照上述顺序对相关硬件设计部分进行介绍。图3.1硬件系统总电路图3.2主要硬件模块原理图及相关说明3.2.1单片机最小系统单片机最小系统是能够维持单片机正常运行的最小硬件结构,由于AT89C51单片机内置晶振模块,所以,本文主要设计了复位电路以及晶振电路。(1)复位电路单片机复位电路的功能主要是对单片机芯片进行复位,通过复位功能,能够重置单片机内部的存储器,从而使得CPU恢复初始状态,AT89C51的RST引脚能够提供复位功能,只需要输入一个高电平,且持续时间超过24个机器周期,单片机则认为系统应被强制复位。若复位成功,则所有单片机I/O引脚都应输出高电平,若复位失败,则单片机会从一个位置状态随机开始工作。为了能够实现对单片机的精准控制,设置复位电路是必要的[20]。复位电路如下图3.2所示图3.2复位电路(2)晶振电路由于在程序编制时各类定时器,延时程序需要精准的时间控制,所以,在本文的单片机的包柜密码锁系统中增设了晶振时钟电路,其中晶振选择12MHz,其电容选择30pF,同时,在电路制作时需要注意将晶振时钟电路装设在靠近单片机的位置,才能够将电路之间的寄生电容充分降低,使得晶振电路能够提供稳定的时钟,其具体电路图如下图3.3所示。图3.3晶振电路3.2.2LCD液晶显示电路本设计中的LCD液晶显示电路主要使用并行接口进行数据传输,硬件设计图如下图3.2所示,从图中可以看出,LCD1602的D0-D7引脚与单片机P0口的8个引脚相连,另外RS、RW以及E引脚与P2.5、P2.6、P2.7引脚相连[14],由于LCD的D0-D7口为集电极开路门,故需要在P0引脚与LCD8位数据口之间加入上拉电阻,才能够保证数据的正确传输。图3.4LCD驱动电路3.2.3继电器控制电路为了能够实现自动解锁控制,本文特别设置了继电器控制电路,其主要组成部件有:PNP型三极管Q1、LED液晶指示灯D1,继电器RL1,其主要工作原理描述如下:若密码符合设定值,则P3.6引脚给PNP型三极管Q1一个低电平信号,使其导通,此时LED液晶指示灯D1点亮,同时,继电器RL1励磁,其常开节点吸合,完成状态切换。其具体电路如下图3.5所示。图3.5继电器控制电路图3.2.4键盘输入模块本文为了能够实现良好的人机交互,同时充分考虑硬件设计的难度,充分降低系统的硬件成本,经过思考,本设计中在Proteus采用了一个4×4点阵,将分别编号为数字为0-9,以及“退格”、“存”、“取”、“确定”、“设置手机号码”五个功能按钮,键盘输出经过总线,至单片机P1.0-P1.7引脚。这样的设计能够减少引脚的使用,若采用“一对一”的设计方法,即一个按钮对一个单片机引脚,将极大的造成引脚资源的紧张。另外,为了消除按键抖动的影响,本设计中并未使用传统的增加电阻的设计方案,而是在软件编制过程中增加了一个短暂的延时函数,由程序实现消抖的功能,这样在保证消抖功能的同时,能够降低系统的硬件制造成本。键盘输入模块电路图如下图3.6所示。图3.6键盘输入模块电路图4软件设计系统的软件部分类似人体的大脑,其通过良好的逻辑顺序,能够通过调用各种功能函数,使得硬件电路中的各个元件得以发挥其预想的功能。现如今的软件设计思想通常采用模块化思路,将系统中各个功能编织成独立的功能函数模块,此后,能够在需要时,自动触发或调用,从而实现节约系统程序存储空间,优化系统逻辑的目的。本课题在包柜密码锁设计的硬件结构上,主要分为单片机最小系统、LCD显示电路、键盘输入电路以及继电器控制模块四部分,为了使得各个硬件的主要功能能够正常实现。首先,该软件应主要实现键盘输入的采集,LCD液晶显示屏,继电器控制电路以及单片机最小系统的实现。键盘输入采集模块可以对当前运行环境的键盘输入信息进行采样,将其直接传输到不带AD转换器的单片机内存中,采集到的信号可以通过软件读取,实时值会显示出来。在LCD显示屏上获取当前环境下的功能以及控制指令。根据按键输入的命令,当输入密码与原始密码一致时,自动启动继电器控制装置。4.1仿真软件简介4.1.1Proteus仿真软件Proteus嵌入式仿真开发软件是英国Labcenter公司开发的嵌入式系统仿真平台。它是嵌入式系统仿真中最强大、最方便的电路设计和仿真软件之一。通过Proteus软件,可以方便地进行模拟电路、数字电路等仿真。同时,Proteus提供了丰富的组件库,通过它可以方便地进行系统软硬件仿真。目前Proteus软件已经更新值8.9版本,本设计中使用Proteus8.6,其能够为电路测试提供极其丰富的测试信号。现已广泛应用于教学、实验设计、课程设计、毕业设计、电子设计和初步产品开发。通过内置电机、发光二极管、液晶显示器等虚拟仪器,如内置示波器和逻辑分析仪,可以很容易地观察到系统仿真的效果。4.1.2Keiluvision4软件Keiluvision4软件是美国Keil软件公司生产的51系列微控制器兼容的C语言软件开发系统。它是通过使用一种接近传统的C语言的语法来开发的。与汇编语言相比,C语言在功能、结构、可读性以及可维护性方面具有明显优势,易于学习以及使用,大大提高了工作效率以及项目开发周期。他还可以嵌入汇编,允许用户嵌入关键位置,使程序达到接近汇编的工作效率。它具有以下特点:完全支持Cortex-R4、ARM7、微控制器系列ARM9设备、业界领先的ARMC/C编译工具链、μvision4IDE、调试器以及仿真环境、KEILRTX的确定性、占地面积小。实时操作系统(源代码),TCP/IP网络套件提供各种协议以及各种应用程序,USB设备以及USB主机栈提供标准驱动程序类,ULINKpro支持运行应用程序并记录所执行的每条微控制器指令的实时分析,完成程序执行代码覆盖的信息,通过SQL以及性能分析器实现程序优化,以及众多示例项目。帮助用户快速熟悉MDK-ARM强大的内置功能,并与CMS的皮层微控制器软件接口标准兼容。4.2主程序流程及相关说明系统主程序主要能够实现全局变量定义、功能函数调用,本文通过中断的方式实现对包柜密码锁系统的响应,因此,在上电伊始,需要完成程序的初始化,将各个寄存器设置为初始状态,之后,通过while函数实现循环,在while函数中,可以对各个功能子函数进行调用(如下图4.1所示),实现其功能,本文主函数所调用的子函数主要有LCD液晶显示子函数,键盘检测,中断服务子程序,以及继电器控制子程序。主程序流程如图4.1所示。图4.1主程序软件流程图4.3子程序流程图4.3.1按键功能流程图如图4.2为按键功能流程图,在按键当中,有与输入、开锁、、设置、确认的程序相对应的按键,(运用矩阵键盘逐行逐列扫描法,一次检测各个按键)键盘是单片机常用输入设备,在按键数量较多时,为了节省I/O口等单片机资源,一般采取扫描的方式来识别到底是哪一个键被按下。即通过确定被按下的键处在哪一行哪一列来确定该键的位置,获取键值以启动相应的功能程序。查找哪个按键被按下的方法为:一个一个地查找。先第一行输出0,检查列线是否非全高;否则第二行输出0,检查列线是否非全高;否则第三行输出0,检查列线是否非全高;如果某行输出0时,查到列线非全高,则该行有按键按下;根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。键盘是单片机中常用的输入设备。为了节省单片机的资源,例如I/O端口,通常会采用扫描方法来识别所按下的键。即,通过确定所按下的键的行和列,确定键的位置并且获得键的值以启动相应的功能程序。找出按下哪个按钮的方法是一个一个地搜索。第一行的第一个输出0,请确保列行未满高。否则,在第二行中打印0,并确保列行未满高。否则,在第三行中打印0,然后检查是否有一列。行未满高。如果该行返回0,则如果该列的行不是全高,则在该行上按下按钮。可以根据输出为0的行和出处为0的列来确定按钮的位置。按本文中键盘输入电路的软件流程图如下图4.2所示。键功能程序键功能程序键值=储存?键值=确定键值=取消键值=取件?返回手机号码输入程序重新输入输入密码发送短信随机密码图4.2按键功能识别流程图4.3.2LCD驱动程序设计LCD液晶显示程序流程并不复杂,首先,需要对该期间的工作模式进行设置:将rs引脚置0,使得LCD在工作模式下,另外,需要给功能引脚“E”一个下降沿的脉冲,完成整个功能设定工作,由于LCD1602分为两行进行显示,所以上下两行的地址位是不一样的,第一行是0x80+0x40,第二行数据地址为0x80,在显示“Welcme”以及第二行的“PleasepressKEY”时,由于其位置固定不变,所以,需要精确计算出其位置。以密码显示为例,介绍其显示流程,如下图4.3所示。首先设置光标以及输入方式,清屏后,对初始化显示的数据以及其位置进行设定,之后函数进入循环,判断是否调用显示子程序,若需要显示数据,则显示程序获得需要显示的数据以及显示位置两个变量,之后调用显示函数,将结果通过P0引脚并行输出完成数据显示。开始开始液晶显示器初始化延时检查忙信号BF=0?获取RAM地址写入相应数据显示完毕?返回NYYN图4.3LCD液晶显示流程图

5测试结果与分析为了验证包柜密码锁系统功能正确性,在Proteus系统中进行了仿真测试。系统仿真打开,可以看到,LCD显示如下图5.1,从上之下第一行为“Welcome”即欢迎,第二行为PleasepressKEY。图5.1系统上电后的初始化图这时候电机功能按钮“存”,LCD液晶显示下图5.2所示。从图中可以看见,系统自动增加第13号箱柜,并且继电器导通触发,箱门打开,如下图5.3所示。图5.2存功能测试图图5.3继电器导通励磁此时,再继续点击“设置手机号码”仿真测试结果如下图5.3所示。图5.4设置手机号码图此时可以通过键盘输入手机号,其中如果输入位数不正确(非11位),则无法通过“确认”按钮保存,若输错号码,则可以通过退格功能按钮实现更改,摁下“确认”按钮后其结果如图5.5所示。图5.5自动生成的密码图在初始界面摁下“取”按钮,则进入如下图5.6所示的取用界面,此时,需要输入上文所示的正确密码,既可以实现取出功能。图5.6取出功能测试图

6结论随着如今自动控制技术的逐渐成熟,以单片机为代表的微控制器,影响着工业现场以及人类日常生活的方方面面,越来越多的电力电子设备通过加入了微控制器,变得更加智能,更加高效。随着科学技术不断发展与提升,单片机控制系统已经成为当今世界最具发展潜力和背景的研究方向之一,它出现的主要动机在于,方便人们的日常生产劳作,如今的市面上也出现了各种密码锁方面的产品,例如家庭密码锁,商场或超市的箱包寄存柜等。本文主要设计了一款基于单片机的包柜密码锁系统,其以单片机为控制核心,利用键盘输入电路,实现人机交互功能,利用LCD液晶显示屏LCD1602进行显示,系统自动生成的密码与输入密码一致时,自动驱动继电器开门。整个设计以模块化思想贯穿始终。在硬件电路上分为四大模块,分别是单片机最小系统、LCD显示电路、键盘输入电路以及继电器控制模块四部分。与此对应的软件设计中分别对各个模块进行了对应的程序编制,为了降低软件的开支,分别编制了独立的函数,在功能需要时进行调用,从而降低了编程的复杂性,在程序上的这一调整使得系统能够很好的满足功能需要,能够在不对硬件电路进行大幅改造的同时提升系统功能。

参考文献[1]孙鹏宇,魏立明.基于MCU的智能密码锁控制系统[J].北方建筑,2021,6(02):53-56.[2]黄楚,张艳杰.基于光伏发电供电的指纹锁的设计[J].太阳能,2021(03):75-79.[3]黄怡龙,毛丽莎,卢丙芳.一个简易的校园智能门禁系统的设计[J].电脑知识与技术,2021,17(08):69-70+76.[4]姜宁,裴若男,孟萧振,宁秋月,谢印庆.基于AT89s51控制的指纹密码锁[J].电子世界,2021(03):148-149.[5]王海军.一种单片机和云平台的电子密码锁设计[J].电子世界,2020(24):146-147.[6]吕添,陈鹏,甄灏,彭梓桓.基于51单片机及蓝牙模块通讯的动态密码锁设计[J].电子世界,2020(23):135-138.[7]李国涛.基于51单片机的立体车库存取车控制器的设计[D].齐鲁工业大学,2020.[8]韩燕楚,余宏.基于51单片机的电子密码锁设计与应用研究[J].漯河职业技术学院学报,2020,19(06):21-23.[9]马花萍.基于STC15F2K60S2单片机的电子密码锁设计[J].机电信息,2020(30):99-100.[10]韩旭,吴华,杨岱霖,邓昕.基于STC89C52的电子密码锁设计[J].电子技术,2020,49(10):10-11.[11]黄田,杨婷婷,姜少维,李佳康,董莉霞.基于单片机的电子密码锁设计[J].软件,2020,41(10):102-104.[12]何利民.单片机应用系统设计[M].北京:北京航空航天大学出版社,2017:33-35[13]王兆安,黄俊等.电力电子技术[M].北京:机械工业出版社,2014:61-73.[14]ApplicationReport.SLVA057:UnderstandingBuckPowerStagesinSwitchmodePowerSupplies.,March2016[15]ApplicationReport.SLVA061:UnderstandingBoostPowerStagesinSwitchmodePowerSupplies.,March2018.[16]SalmonJ,LipingWang,NoorN,etal.ACarrier-BasedUnipolarPWMCurrentControllerThatMinimizesthePWM-CycleAverageCurrent-ErrorUsingInternalFeedbackofthePWMSignals.IEEETransactionsPowerElectronics.2017.[17]沈德明.基于STC89S52单片机的电子密码锁设计[J].现代信息科技,2020,4(16):20-23.[18]黄方.基于单片机控制的电子密码锁设计探讨[J].电子制作,2020(16):17-18+40.[19]刘锦玉,于海霞.红外遥控密码锁[J].电子世界,2020(18):34-35.

附录#include"common.h"#include"lcd1602.h"#include"keyboard.h"#include"uart.h"#include"gsm.h"#definerandom(x)(rand()%x)#defineMAX_STORAGE32//快递柜最大存储数sbitRELAY=P3^6;//继电器volatilebitFlagKeyPress=0;//有键按下标志,处理完毕清0unsignedcharkeycode;//按键值变量unsignedintrandom_count=0;unsignedcharDotPos;//记录你数字键按下的次数unsignedcharxdataPassword[MAX_STORAGE][5];//定义二维数组,用于存放取号密码unsignedcharExpressNum=0;//存快递的个数unsignedintRandomPassword=0;unsignedcharPassword_Tab[4];//用户输入密码缓存区charPhoneNum[11];//存储手机号码unsignedcharConfirmCont=0;//确认按键按下的次数unsignedcharRELAY_TIME=0;unsignedcharSmsContent[]="Yourpickupcode:0000";//短信内容bitStorageFlag=0;//存物变量bitTakeThings=0;//取物变量bitsetFlag=0;//设置手机号码的变量voidTimer0Init(void)//11.0592M,定时50ms{ TMOD|=0x01;//定时器0,工作方式1 TL0=0x00;//50ms TH0=0x4C; ET0=1;//定时器0中断开启 TR0=1;//定时器0开始计时 EA=1;//总中断开关开启}voidsim800_send(unsignedchar*phonenum,unsignedchar*content){ bitsend_error=0; uintsend_count=0; gsm_rev_okflag=0; lcd_write_str(0,0,"SendSms...");//显示发送短信中 lcd_write_str(0,1,"");//第二行清屏 gsm_send_englishmsg(phonenum,content);//发送短信 delay_ms(2000);//延时2秒 delay_ms(2000);//延时2秒 delay_ms(2000);//延时2秒 while(gsm_rev_okflag==0)//等待返回OK指令 { if(send_count++>8000) { send_count=0; send_error=1; break; } delay_ms(1); }; gsm_rev_okflag=0; if(send_error==1) lcd_write_str(0,0,"SendFail!");//显示发送超时 else lcd_write_str(0,0,"SendOK!");//显示发送成功 lcd_write_str(0,1,""); delay_ms(2000);//延时2秒 delay_ms(2000);//延时2秒 delay_ms(2000);//延时2秒}intrandom_num()//产生随机数,用于产生不同密码{ srand(random_count);//随机种子 returnrandom(9999);}voidDisplayHome()//显示主页面信息{ setFlag=0; StorageFlag=0; TakeThings=0; ConfirmCont=0; DotPos=0; lcd_write_com(0x0c);//关闭光标 lcd_write_str(0,0,"====Welcome==="); lcd_write_str(0,1,"PleasepressKEY");}voidStorageHandle()//存快递{ unsignedchar Surplus=MAX_STORAGE-ExpressNum;//获取剩余可存储的空柜数 if(Surplus>0)//当空闲柜大于0时,才能存 { StorageFlag=!StorageFlag; if(StorageFlag) { lcd_write_str(0,0,"StorageItems"); lcd_write_str(0,1,"Surplus:"); lcd_write_char(9,1,Surplus/10+0x30); lcd_write_char(10,1,Surplus%10+0x30); RELAY=0; } else { DisplayHome(); } } else//否则显示满 { lcd_write_str(0,0,"Full!"); delay_ms(1000);delay_ms(1000);delay_ms(1000); DisplayHome(); }}voidExpressHandle()//取快递{ TakeThings=!TakeThings; if(TakeThings) { lcd_write_str(0,0,"ExpressItems"); lcd_write_str(0,1,"input:"); lcd_write_com(0x80+0x40+7); lcd_write_com(0x0F); } else { DisplayHome();//回到主页面 }}voidSetPhoneNumber()//设置手机号码{ if(setFlag==0&&StorageFlag) { setFlag=1; memset(PhoneNum,'',11);//每次设置手机号码前,先把数组清空 lcd_write_str(0,0,"SetPhoneNumber"); lcd_write_str(0,1,""); lcd_write_com(0x80+0x40+3); lcd_write_com(0x0F);//开启光标 }}voidBackspace(ucharaddr,ucharlen)//退格{ unsignedchari=0; if(DotPos>0) { DotPos--; for(i=0;i<len-DotPos;i++) { lcd_write_com(addr+DotPos); lcd_write_data(''); } lcd_write_com(addr+DotPos); lcd_write_com(0x0F); }}//按键响应程序,参数是键值//返回键值://123A(存)//456B(确定)//789C(取)//*(退格)0#(未定义)D(设置手机号码)voidKeyPress(ucharkeycode){ ucharadd=0;switch(keycode){case0:case1:case2:case3:case4:case5:case6:case7:case8:case9: if(setFlag==1)//在设置手机号码状态下 { if(DotPos<11)//手机 { PhoneNum[DotPos]=keycode+'0';//转换成字符数字 lcd_write_data(keycode+'0'); DotPos++;//次数加1 if(DotPos==11)lcd_write_com(0x0C);//关闭光标 }elseDotPos=11; } if(TakeThings==1)//在输入取件码的状态下 { unsignedchari=0; bitFind=0; if(DotPos<4) { Password_Tab[DotPos]=keycode; lcd_write_data(keycode+'0');//显示取件码 DotPos++; if(DotPos==4) { lcd_write_com(0x0c);//光标光标 delay_ms(1000); for(i=0;i<MAX_STORAGE;i++)//从32存储空间中扫描 { if(Password[i][0]==Password_Tab[0]&&Password[i][1]==Password_Tab[1]&& Password[i][2]==Password_Tab[2]&&Password[i][3]==Password_Tab[3]&& Password[i][4]==0xFF) { Password[i][4]=0x00;//0x00表示释放位置 if(ExpressNum>0)ExpressNum=ExpressNum-1;//快递数减1 if(Find==0)lcd_write_str(0,1,"Open"); RELAY_TIME=5;RELAY=0;//继电器开启,赋值5秒 Find=1; break; } delay_ms(1); } if(Find==0)lcd_write_str(0,1,"Error!"); delay_ms(1000);delay_ms(1000);delay_ms(1000); DisplayHome(); } }elseDotPos=4; }break;case10://存物键 if(TakeThings==0)StorageHandle();//必须是没在取物的状态下,才能存break;case11://确定键if(DotPos==11&&setFlag==1) { ConfirmCont++; if(ConfirmCont==1) { unsignedchari=0; add=0; lcd_write_com(0x0c); lcd_write_str(0,0,"NUM:");//第一行显示手机号码 lcd_write_str(0,1,"Password:");//第二行显示用户取件码 RandomPassword=random_num();//获取随机取件码 for(i=0;i<MAX_STORAGE;i++)//从32空闲位置中扫描 { if(Password[i][4]==0x00)break;//找到空闲位置,则退出for循环 } Password[i][0]=RandomPassword/1000; Password[i][1]=RandomPassword%1000/100; Password[i][2]=RandomPass

温馨提示

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

评论

0/150

提交评论