摘 要
近年来,随着科学技术的不断突破,更多的电子产品走进了我们的日常生活,带来了极大的便利。在自助存包柜方
面,人们也有了新的需求。
本设计采用以51单片机为核心搭配液晶显示模块,GSM模块,按键模块,报警电路等模块用以实现以下过程:当
需要存储包裹时,按下“A”键,柜门打开存入包裹后,按下“D”键输入手机号,稍后用户将收到系统发送的四位
随机密码。取出时只需按下“C”键输入获得的随机密码,就可以打开相应的柜子拿走所存提包,另外若输入密码错
误三次后,蜂鸣器将会报警提醒。
本设计较市面上常见的利用人工,钥匙,条形码等方式设计的存储柜,具有方便快捷、经济实用的优点,可以
有效的避免纸张、人力的浪费,符合国家提倡的绿色环保理念,有着良好的推广发展前景。
关键词:单片机,存包柜,GSM模块,密码锁,报警电路
1 绪论
改革开放四十多年来,随着科学技术的不断突破,更多的电子产品走进了我们的日常生活,带来了极大的便
利。而在大型超市和一些公共场合对于存储柜也有了新的需求。这些地方人数多,流动性大,仅仅依靠人工是不能
满足其需求。本设计基于单片机联合多个模块研发出一款多功能自助存储柜,用以解决人工存储速度慢,效率低的
问题!
这款自助存储柜利用STC89C52单片机进行数据处理,通过按键模块用户可以输入利用GSM模块发送到手机上的随机密
码即可实现包裹的存取,简单方便。相较于市面上其他的存储柜具有保密性好,操作简单一学即会,寿命长的特
点。
本次系统设计采用C语言在Keil4软件中进行编译仿真,原理图使用Altium Designer Winter软件进行绘制,然
后根据原理图焊接板子进行调试,修改程序逻辑。程序检查无误后使用stc串口软件进行烧录。
1.1 研究背景
在自助存储柜领域,将多个电子元器件组合设计从而达到控制柜门的打开和关闭。该控制系统已逐渐取代传统
的机械密码控制系统,新的控制系统克服了传统方案密码数量少、安全性能差的缺点,显著提高了自助存储柜控制
系统的技术和性能。此外,随着单片机的出现问世,让我们可以在拥有传统存储柜系统功能的同时,有了更多的可
能性,让自助存储柜控制系统有了更高的安全性、可靠性,在日常生活中得到了越来越广泛的应用。
1.2 选题意义
人类进入二十一世纪已经有二十多年了,第三次科技革命的到来让我们的生活发生了翻天覆地的变化。电子产
品进入社会生活不同领域,影响着我们日常生活的方方面面。相较于传统的机械存储柜,研究出一种可以节省人力
物力,减少浪费,绿色无害,安全可靠,功能多样的电子自助存储柜就是本设计的意义所在。
1.3 发展前景
以往开发的自助存储柜系统,因为其组成的电子元件所限制,种类不多,保密性也差强人意,制作虽然简单但
安全性一般,再到后来人们基于电子设计自动化EDA(Electronics Design Automation)来实现自助存储的功能,
但是其电路结构比较复杂,所需要的电子元件繁多。近年来,随着电子元件性能的不断突破,自助存储柜系统也发
展出了许多新的种类,功能也越来越强大,更加的安全,同时使用也更加的方便快捷。
另一方面由于数字、文本、图形、甚至于人体特征如瞳孔,指纹等元素都可以被采集转换成为电子信息,这些
信息又有因为其独特性可以使设计出的自助存储柜获得更高的保密性,列如需要严密保护的保险库保险箱等,现在
通常会使用多种密码信息进行复合来达到更好的防盗保护目的。多中信息的结合使用,不同的组合也使电子防盗系
统的无限扩展成为一种可能,人们有着更高的需求,自助存储就有着更深远的发展前景!
2 系统设计思路和硬件设计
2.1 系统设计思路
在选择“基于单片机的自助存储柜”,作为毕业设计题目后,我对电子自助存储柜的第一个方案就是超市门
口,用户存包时,产生随机密码然后再将密码转换为二维码,通过打印机打印成小纸条,用户取包时,将小纸条放
在红外线扫描区域,就可以打开相应的柜子。这种方式确实可以省略用户记住密码的时间,方便省事。但是却有三
个最大的缺点:一是用户在不小心丢失小纸条的情况下,无法打开柜门,二是容易造成纸张资源的浪费,不符合绿
色发展的观念,三是小纸条在使用后的处理问题,人们会随处乱扔纸条,不美观的同时还造成了环境的污染。所以
在上网查询资料后,结合手机已经成为人们出门必不可少物品的实际情况,第二个方案应运而生,想法是设计一款
通过GSM模块直接向用户手机发送密码的自助存储柜系统,省去了打印纸张的环节,成功的解决了第一个方案所存在
的问题,方案确定。
2.2 系统设计要求
设计目的是利用单片机进行数据处理产生四位随机密码,控制GSM模块向用户发送短信密码,来完成存取包的过
程。并且系统要求达到以下功能:
(1)用户利用按键模块输入的手机号码以及存包密码可以在显示模块显示。
(2)单片机利用程序生成四个随机密码,并在单片机中保存和删除。
(3)GSM模块用于将单片机生成的随机密码通过短信发送给用户。
(4)通过控制继电器进而控制柜门的打开与关闭。
附录2 C语言源程序 22
(5)考虑到一些不方便使用短信密码功能时候,会在显示模块进行短暂的密码显示。
(6)当用户三次错误的输入密码时,系统会发出警报。
此次设计的自助存包柜系统从硬件层面上来说,选用了STC89C52单片机为核心进行数据处理,使用4×4的矩形
键作为输入终端,LCD1602作为液晶显示屏,使用GSM模块发送密码短信,通过继电器的开关表示柜门的打开与关
闭。系统框图如下图1所示。
图1 系统原理框图
2.3 单片机STC89C52
STC系列是由中国宏晶科技开发生产的国产单时钟/机器周期单片机,其是以51单片机为内核研发并且可以完美
兼容。
STC89C52单片机具有以下特点:40个引脚、4K字节闪存片内程序存储器、128字节的随机存取数据存储器
(RAM)、32个外部双向输入/输出(I/O)端口、5个中断优先级、2层中断嵌套中断、2个16位可编程定时计数器、2
个全双工串行通信端口和片内时钟振荡器。其特性如下:
(1):兼容MCS-51指令系统。
(2):低功耗设计:断电模式和空闲模式由外部中断唤醒。
(3):程序下载烧录时,串口方便好用易上手。
(4):4.5-5.5V工作电压。
STC89C52单片机的实物如图2所示。
图2 单片机实物
各个引脚功能如下表1所示。
表1 STC89C52单片机引脚功能表
符 号 介绍说明
VCC(40引脚) 电源电压
VSS/GND(20引脚) 接地
RST(9引脚) 用作单片机复位,高电平有效
ALE/PROG(30引脚) 地址锁存信号端,一般用于定时等
PSEN(29引脚) 外部ROM读取选通信号
EA/VPP(31引脚) 内部ROM的内外部选通
XTAL1 振荡器反相放大器及内部时钟发生器的输入端
XTAL2 振荡器反相放大器的输出端
P0口 8位漏极开路的双向I/O口
P1口 具有内部上拉电阻的8位双向I/O口
P2口 具有内部上拉电阻的8位双向I/O口,通常作为输入使用
P3口 除了作为一般I/O口外,还具有第二功能
P3口还有其他一些复用功能具体如下表2所示。
表2 P3口引脚复用功能表
引脚号 复用功能
P3.0 RXD用作串行输入口
P3.1 TXD用作串行输出口
P3.2 外部中断0
P3.3 外部中断1
P3.4 定时器0的外部输入
P3.5 定时器1的外部输入
P3.6 片外数据存贮器写选通信号输出端
P3.7 片外数据存贮器读选通信号输出端
2.4 晶振模块
晶体振荡器也称为晶体谐振器。它在单片机中的作用是提供单片机运行所需的时钟频率。晶体振动的核心是石
英晶体,石英晶体有一种叫做机电效应的特性。具体来说,如果对石英晶体施加机械振动,它将产生交流电压。相
反,如果对晶体施加交流电压,它会产生机械振动。
在本设计中,STC89C52单片机通过引脚XTAL1和XTAL2与晶体振荡器和两个电容器连接,。
本次设计的晶振电路由一个J1晶振,两个电容器C2和C3与单片机相连。图4是典型的Corbiz交流等效电路。振荡
电路的信号频率由晶体振荡器频率和电容器C2和C3的容量决定,其中晶体振荡器频率的影响更大。晶体振荡器的取
值范围一般在033MHz之间,电容器C2和C3的取值范围也称为负载电容,介于530pf之间。
当本设计中使用的STC89C52单片机的定时器作为波特率发生器时,为了使设置定时器的值为整数,选择11.0529
MHZ做系统的外部晶振,负载电容取值也需要满足一定要求,若不满足会导致振荡器产生偏差甚至无法起振,公式
为:
CL=C2*C3/(C2+C3)+CS
其中CL为晶振的负载电容值,查询手册可知,CS通常为电路板的寄生电容取3~5pF,本次设计中C2=C3=22pF。
2.5 复位模块
本次设计中复位采用上电复位,它是一种由外部总线产生的一种异步复位,原理是利用充放电效应,只需选择
合适的电容和电阻使RST引脚高电平的时间大于10mS既可保证复位。
2.6 电源模块
本次设计采用直流5V供电,电源模块包括一个有着三个引脚的电源底座和一个有着六个引脚的电源开关。电源
插座用于连接外部电源插头,电源开关用于控制整个单片机系统的开关。
上图6中U5为电源座子,它的二号引脚接地,三号引脚无特殊的用途,只起到固定的作用,一号引脚与电源开关
U4的三号引脚相连接,电源开关U4的引脚一和三以及引脚四和六的作用相同,用于电源的正极输出。电源开关U4的
一和三引脚以及四和六引脚作用相同,都用于电源的正极输出。电源开关U4的二号和五号引脚用作单片机的接地引
脚。使用时,采用相对选择,即选择一和三号引脚作为输出,然后选择五号作为接地引脚,选择四和六号引脚作为
输出端口,二号引脚作为接地引脚。本次系统中单片机的传感器和无线传输芯片的电压都在5V内,所以5V的电压满
足需求。若有12V或者其他电压的传感器,则可以采取升压模块将5V提升到更高的电压,进行供电。
2.7 键盘输入模块
本次设计中利用单片机中P1的8个I/O口控制矩形按键,矩形按键的每一行管脚并联一起,每一列管脚并联一
起。P1.7到P1.0对应8个二进制位从高位到低位,矩阵按键扫描原理有逐行扫描,行列扫描两种。
本次设计选用行列扫描的方法,步骤如下:第一步将矩形键盘四行所对应的单片机I/O口设置为输出模式,同时
输出高电平,第二步将矩形键盘四列所对应的引脚设置为输入模式,读取默认为0,第三步假如有一个按键被按下,四列中就会有一个引脚读取返回为1,此时可知被按下按键所在的列,第四步我们依次按照顺序改变四行输出高电平
的值观察此时四列返回的值是否有高电平,进行四次找出有着高电平的行,最后行列确定就可以知道按下按键的位
置了。
本设计中4×4按键对应名称如下表3所示。
表3 对应位置按键名称
1 2 3 A
4 5 6 B
7 8 9 C
- 0 # D
其中“0——9”号按键用于输入密码,“A”是存储按键,“B”是确认按键,“C”是取出按键,“D”是设置按
键,“*”是退格按键,“#”是留白可用于其他功能的开发。
2.8 显示模块
本设计的显示部分选用液晶显示器LCD1602来实现所需的功能。LCD1602液晶显示器是一种可以同时显示两行,
每行16个字符,一共32个字符的点阵型液晶模块。具有体积小,成本低,功耗小,辐射低的优点。LCD1602对应的32
个RAM,我们在使用时只需要在所需的位置写入相应的RAM地址,再输入所需要显示的字符,屏幕就会显示出来。另
外需要注意的是,LCD1602显示的每个字符之间都有间隔,因此只能显示字符,不能显示图形和图像。
其原理是通过电压改变填充在两块平行板之间的液晶材料中分子的排列,并配合背光灯达到遮光和透光的目
的,从而显示出不同的明暗画面。如果需要显示彩色图象,只需在两块平板间添加上具有三元色的滤光层,即可实
现。具有耗电量低、体积小、辐射低的优点,实物如下图8所示:
图8 显示模块实物
LCD1602的主要技术参数如下表4所示。
表4 LCD1602主要参数
显示容量 16×2个字符
芯片的工作电压 4.5V~5.5V
工作电流 2.0mA(5.0V)
模块最佳工作电压 5.0V
字符尺寸 2.95mm×4.35mm(宽×高)
LCD1602有着16个引脚,具体的功能作用如下表5所示。
表5 LCD1602引脚功能
符号 引脚功能
GND 电源接地
VCC 电源正极
V0 液晶显示偏压控制亮度
RS 数据/命令选择
R/W 读/写选择
EN 使能信号
D0 8位双向数据端
D1 8位双向数据端
D2 8位双向数据端
D3 8位双向数据端
D4 8位双向数据端
D5 8位双向数据端
D6 8位双向数据端
D7 8位双向数据端
A 背光源正极
K 背光源负极
显示部分的引脚接口电路图如图9所示。
图9 显示电路原理图
2.9 报警模块
在本次的自助存包柜系统的设计中,为了避免用户选择错误的柜子或他人恶意窃取、打开他人柜子的现象,因
此设计了报警模块,其功能是当用户密码输入错误三次时,使用蜂鸣器鸣响十秒钟,发出警报。
蜂鸣器通常采用直流电压进行供电,另外根据其是否具有振荡源分为两类,有源蜂鸣器和无源蜂鸣器。本系统
设计的报警模块采用无源电磁蜂鸣器来实现相应的功能。无源电磁蜂鸣器由振荡器、电磁线圈、振膜、磁铁和外壳
组成。蜂鸣器发声的基本原理和方法如下:当电源接通时,电流通过蜂鸣器的电磁线圈,线圈产生磁场,振动线圈
在电磁线圈和磁铁的影响下会产生周期性的振动和声音。如果需要调整蜂鸣器的音调,可以更改引脚输出的频率。
如果要调整蜂鸣器声音的大小,可以通过控制更改输出电平的高电平和低电平占空比。
本次设计因为STC89C52单片机的I/O端口引脚输出电流小,不能驱动蜂鸣器,因此蜂鸣器只能通过三极管或电流
放大装置才能正常使用。本次设计报警模块的具体电路原理图如下图10所示。
如图10中,R11是一个电流电阻器,它可以防止三极管中的单电流回流,并防止由于I/O端口的过大电流而烧
毁。图中U30为蜂鸣器,当P2处于高电平时,蜂鸣器将发出警报。
2.10 GSM模块
本次系统设计中将要利用GSM模块将单片机产生的随机密码发送到用户的手机上,GSM模块在之前被称为是“手
机的大脑”,由此可见其具有的功能多样性。GSM模块通常由六个部分组成,每一个部分都有着它独有的作用,缺一
不可。它们分别是GSM基带处理器、GSM射频模块、供电模块、闪存、ZIF连接器、天线接口。GSM基带处理器在其中
发挥着至关重要的作用,相当于GSM模块的大脑,没有GSM基带处理器GSM模块就不能够正常运行。我们利用GSM模
块,可以实现GSM网络通信的所有基本功能,如发送短消息、语音通话、GPRS数据传输等。
本设计综合功能,成本,尺寸大小等因素具体选择了SIM800L模块。SIM800L模块是由SIMCOM公司生产的工业级GSM模
块,其主要特性如下表6所示。
表6 SIM800L模块主要特性
主要特性 具体说明
供电 电压范围在3.4V~4.4V之间
省电 睡眠模式下耗流为0.7mA
频段 支持四频:GSM850,EGSM900,DCSI 800和PCS 1900 MHz,可以通过AT指令设置,也可以模块
自动搜频
温度范围 工作温度在-40摄氏度到85摄氏度之间
存储温度在-45摄氏度到90摄氏度之间
物理尺寸大小,重量15.8×17.8×2.4毫米,约为1.35克
传输频率 支持1200bps到115200bps
用户在使用时,只需插上移动或者联通的SIM卡,再与单片机完成交互,就可以发送接收短信。
下图11是SIM 800L模块的实物图。
图11 GSM通信模块实物图
其中2号引脚连接单片机的P3.0(TXD)引脚,3号引脚连接单片机的P3.1(RXD)引脚,使STC89C52单片机与SIM800L
模块完成交互。
2.11 继电器控制模块
继电器是我们日常生活和工业生产中常用的电气控制设备。可以说继电器是一个可控开关,当某些条件得到满
足时,可以关闭或者开启的电路。另外根据继电器的功能原理或结构特点,其分为热继电器、电磁继电器、光电继
电器、极化继电器、时间继电器、舌簧继电器等,不同种类的继电器适用于不同的场合。
本次设计选用电磁继电器。电磁继电器的原理是通过控制通过线圈的电流产生的电磁吸力来驱动磁路的可移动
部分,从而实现触点的断开或闭合。电磁继电器一般由铁芯、线圈、电枢、电击弹簧等组成,使用时需要在线圈两
端加一定电压产生电流。在电磁效应的作用下,电枢将脱离张力并与铁芯一起拉入,从而驱动电枢的动、静触点吸
收和叠加。相反,线圈无电压断电后,当电磁吸力较小时,电枢将回到原始位置,以释放动、静触点。通过这种方
式,我们所需要的电路中的开关效果得以实现。
其中添加加二极管的作用是继电器在断开的瞬间会产生一个反向电流,有可能会击穿三极管,二极管是为了防
止反向电流。另外本次设计中为了方便观察继电器是否闭合,我们加了一个二极管指示灯,当继电器闭合时指示灯亮起。
3 系统软件设计
因为C语言代码量小,运行速度快,功能强大,使用范围广泛的优点,本次设计使用C语言进行软件程序编写,软件
使用ARM公司开发的Keil C51软件,其页面简洁,功能繁多,最重要的是可以进行实时的编译仿真,对于多个版本的
电脑系统都可以适用。
软件设计需实现以下流程功能:系统初始化完成开始运行时,LCD1602液晶显示模块显示程序已经准备完毕显示
“welcome”,若用户按下“A”(存包键)时,单片机按事先编写的程序运行并生成四位随机密码。然后用户按下
“D”(设置)输入自己手机号码并按“B”键确认保存发送,此时单片机控制打开继电器同时通过GSM模块将密码通
过短信发送至用户手机上,用户接受短信后即可得知存包柜的四位密码,然后闭合继电器,存包的过程也就此结
束,另外用户在电话号输入错误时可以用“*”键退格。
当用户取包时,按下“C”键(取包键),然后输入已经发送至用户手机短信中的四位随机密码,按“B”键确
认,系统将打开你存柜时所打开的对应柜子,取包过程结束。另外在密码输入错误三次后,蜂鸣器将会报警提醒。
下图14是总程序流程图。
图14 主程序流程图
本系统软件设计由主程序,显示程序,矩阵按键程序,串口程序、GSM模块程序和延时程序组成。
3.1 矩阵按键子程序
本次系统设计的矩阵按键子程序部分采用行列扫描方法,确定按键所在的位置,从而赋予不同按键不同的功
能。原因是可以节省STC89C52单片机有限的I/O口,C语言程序方面也更为简单好用。矩阵按键子程序功能程序流程
图如下图15所示。
图15 按键程序流程图
3.2 显示模块子程序
本次设计采用LCD1602液晶屏作为显示器用以显示用户输入的手机号码,欢迎使用界面及用户输入的存包柜密码
也能对应显示。
在显示部分子函数中首先定义LCD1602模块的三个控制端口RS、R/W、EN这样单片机才能输送不同的数据来它的
使用不同的功能。程序流程图如下图16所示。
图16 显示模块流程图
3.3 GSM模块子程序
本次设计使用STC89C52单片机与GSM模块进行交互,并且在LCD上显示GSM模块的响应。GSM模块只理解AT指令,
并能做出相应的响应。最基本的命令是“AT”,如果GSM响应“OK”,那么它工作正常,否则它响应“ERROR”。AT
指令有很多种,举例如下表7所示。
表7 一些AT指令的功能
指令 屏幕显示 作用
AT+CMGC Send an SMS command 发出一条短消息命令
AT+CMGR Read MS message 读取消息
AT+CMGS Send SMS message 发送短消息
AT+CMGW Write SMS message to memory 向SIM内存中写入待发的短消息
AT+CMSS Send SMS message from storage 从SIM内存中发送短消息
AT+CMGF OK/ERROR 设置短信格式,分为PDU模式和TEXT模式
AT+COPS OK/ERROR 网络运营商
AT+CSCA OK/ERROR 短信中心
4 系统调试
本次系统调试大概分为硬件调试和软件调试两部分。在系统设计完成后要想将我们的思路想法化为实际,调试
必不可少,通过调试发现设计的不足和问题所在解决问题完善我们的设计,只有这样我们的设计才能更好,更高效
的运用在我们的实际生活中。
4.1 系统硬件调试
在将要对照原理图开始焊接的时候,最重要的一点不要忘记,要检查所购买的各个元件是否可以正常工作。焊
接过程中,要时刻注意焊接安全,不要伤到自己。焊接结束后,要收拾焊接现场。通电调试时,要做好调试记录方
便以后改正和优化。
矩阵按键模块调试:检查每个按键是否可以正常使用,引脚连接是否正常,系统运行时,按键能否在LCD1602显示相
对应数字。
显示模块调试:检查引脚是否连接正确,控制滑动电阻调节液晶屏的亮度使数据显示准确无误,在按键按下时
能否显示对应的数字。
GSM模块调试:检查引脚是否连接正确,电话卡插入GSM模块中后,对应的手机能否收到短信。
继电器模块的调试:重点是在继电器输入输出端的连接,一旦发生错误会使其不工作甚至发生损坏。系统调试
完成后,初始化状态如图18所示。
图18 初始状态
用户按下“存”键后,柜门打开状态如下图19所示。
图19 系统柜门打开状态
输入接受密码的手机号,状态如下图20所示。
图20 输入手机号状态
通过GSM模块发送短信,对应手机号即可收到短信,状态如图21所示。
图21 接收短信状态
4.2 系统软件调试
关于软件调试一直是系统开发过程中的重头戏,本次设计中调用多个子程序运用了许多之前没有了解过的函数
和指令。特别是在GSM模块内用到了AT指令让我大开眼界在经过多次尝试和纠错后程序正常运行无误,然后利用
Keil C51软件输出后缀为“.hex”文件。在程序无误后,选用STC-ISP将程序烧录到单片机STC89C52中,此时发现
STC-ISP软件显示未检测到单片机的情况,经过上网查询资料后,检查发现是晶振模块连接脱落的问题,解决后烧录
成功。
调试的重点是系统接通电源后LCD1602液晶显示模块在系统程序运行开始的时候,能否能在屏幕上面显示
“Welcome”字样,另外用户在输入自己手机号码时能否显示对应数字手机号和存包柜密码,四位随机密码能否按要
求产生。GSM模块通过程序控制能否将单片机随机产生的密码发送到用户输入的手机号上。继电器模块部分通过程序
能否在密码比对完成后作出相对反应。流程进行完毕,各个功能成功实现,证明程序无误,调试完成。
5 结论
本次设计的使用过程思路如下:用户根据所需选择存包或者取包,在存储包裹的情况下,用户只需要输入手机
号码就可以接收短信密码从而完成存包。取出包裹时,用户只需输入之前获得的密码即可打开相应的柜门,完成取
包,整个流程简单明了,容易上手。
通过多方面努力一款基于单片机的自助存储柜终于被设计出来。前期查找了许多资料,对比多种方案在老师的
指导帮助下敲定了利用短信接收密码,从而进行自助存储的思路。中期围绕思路方案对所需元器件进行查找和学
习,受益良多。最后进行硬件焊接,软件烧录。调试了很多次,修改完善了许多方面才让所想的功能展现了出来,
我也通过这次设计对我国自助存储柜的发展现状有了更多的了解。
经过这段时间的设计和学习我深刻感受了日常生活中很常见的东西其中所包含的知识原理还真不少。也印证了
一句古话“实践才是检验真理的唯一标准!”大学四年我们专业开设了多门课程,理论知识了解学习的不少,但是
只有想办法将老师课堂讲的课本里面学的实践出来,才能实现其应有的价值。知识放在脑子里不拿出来用是不行
的,只有在不断实践的同时结合相应的理论知识两者互相印证才会让我们有更高更快的进步!