《超市自动存储柜系统设计(论文)10000字》_第1页
《超市自动存储柜系统设计(论文)10000字》_第2页
《超市自动存储柜系统设计(论文)10000字》_第3页
《超市自动存储柜系统设计(论文)10000字》_第4页
《超市自动存储柜系统设计(论文)10000字》_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

超市自动存储柜的设计[摘要]本文介绍了超市自动存储柜的自动存储控制以及语音报警提示和数字显示等功能。经过本课题的研究,我们提供了一种超市自动存储柜的方便实用的解决方案,具有保密性好、编码量多、随机打开储物柜成功率几乎为零。本文采用了一种ARM微控制器(LM3S811主控芯片)与12864LCD显示模块构成,通过串行方式连接的显示系统,利用C语言编程,通过软件控制,具体分析了设计调试时的问题解决办法,使得系统得以实现。对于外部按键电路得到的数据,通过主控芯片进行读取、处理、传送,使得数据得以显示。实验表明,此设计的接口、结构等设计合理,功能基本可以实现,本设计可供以后的键盘扫描类、显示类、语言提示类等设计参考使用。[关键词]LM3S811微处理器;TH12864液晶显示;4*4键盘;储物柜1引言1.1超市自动存储柜电子系统的设计研究的背景及意义自动储物柜在现实生活中应用广泛,为超市,图书馆,展览馆,酒楼,车站,码头,以及娱乐场所提供短期寄存服务,也可以作为工厂、机关、医院、及特种行业员工的更衣柜,这些足以证明储物柜在现代社会中具有重大的工程意义。超市自动储物柜作为储物柜的其中一种,它克服了传统的人工寄存所带来的费人力[1],速度慢,易冒领,不安全等诸多弊端。因此为了能够更好的实现超市自动存储柜的各种功能,具有重要的研究价值。超市自动存储柜的发展经历了以下几个方面:起初的超市自动存储柜都是钥匙柜。钥匙柜是将大量的钥匙进行集中管理而设计的,取、还钥匙必须通过管理人员的发放,从而查询到取、还钥匙的各种相关信息并详细记录储物柜的使用情况,解决了因管理不当引发的各种问题和时间。随着电子元件的进一步发展,在电子密码锁的基础上也出现了很多种类的超市自动存储柜,且功能日益强大,使用更加方便,安全保密性更强,由以前固定的单密码输入发展到随机密码的输入再到现在的加感应元件密码的扫描,从而实现了真真正正的电子加密。由于人们对保密性要求的提高,还有一些人针对传统超市自动存储柜不能满足企业、商业秘密等严格保密的问题,提出了远程管理自动储物管理系统[2],利用数据库技术将密码、IC卡和生物识别系统(指纹识别、人脸识别、掌形识别、签名识别、声音识别等等)综合应用到远程储物柜系统中,利用互联网技术进行保护,即使在很远距离也可以实现对超市自动存储柜的监控。作为未来识别技术中的潜力产品,生物识别技术可以说有着非常好的使用前景。那么,对于现在超市自动存储柜设备的选择,我们又该如何把握呢?然而,这三种方式都不太适合现代超市自动存储柜的发展现状。第一种超市自动存储柜虽造价不高,也容易学习,但是使用起来极其不方便,很容易造成硬件资源以及人员的浪费;第二种在储物柜存满物品时,不会自动显示不能存东西,使用极不方便,且安全性也大打折扣,管理人员并不知道设计的储物柜占用多少资源也没有对其进行可行性分析,总会遇到硬件资源消耗大,作品调剂时间长,无法方便地按自己的设计意图反复修改自己作品的难题;第三种技术虽然克服了传统自动储物柜系统的许多缺陷,增强了储物柜的安全性,但是这种技术要求过高,投资过大,且不易掌握,不便于技术的推广。只能适用于保密要求高且供个人使用的箱、柜房间等。超市自动存储柜是为了满足公共场合大众存储物品而设计的。因此本文试图设计一种既实惠又方便的超市自动存储柜的电子系统,给人们的生活带来方便。1.2本文的研究内容本设计来源于对生活的观察,自动储物柜可以节省人力和营业面积,并方便了顾客。本文以TH12864液晶显示作为显示模块,led模拟门驱动电路。基本功能如下:a.当没有“存”键或是“取”键按下时,一直显示欢迎界面。b.当按下“存”键时,门打开,并显示随机密码。c.当按下“取”键时,显示“请输入密码”,当用户输入密码时判断密码是否正确。d.设计一个万能密码以防止用户忘记密码,门打不开的情况。为了使本设计研究更有价值,可有以下的扩展功能:e.当用户按下“存”时,在30s内用户如果没有关储物柜的门,会自动报警。f.当用户输入密码3次不正确时,自动报警。2总体框图超市自动存储柜的控制系统由中央控制和门控制电路构成,中央控制由微机构成,门控制电路采用lm3s811单片机作为主控芯片,每个单片机可控制多个储物柜。以及4*4键盘扫描用户输入的密码。利用TH12864液晶显示储物柜当前的状态。门控驱动电路显示门的开关状态。下图1为本设计的总体框图:主控芯片主控芯片Lm3s811LcdLcdTH12864门控驱动电路门控驱动电路 4*4键盘4*4键盘图1总体框图2.1主控芯片LM3S8112.1.1LM3S811芯片介绍8位的51单片机长期占据着微控制器(MCU)的主流市场,但随着技术与需求的发展,32位微控制器应用增长率也在不断攀升。目前,基于ARM内核的32位微处理器在市场上处于领导地位。ARM处理器不但便宜而且性能较传统的51单片机高得多,集成度也大大提高,为单芯片解决方案提供了非常方便的平台,在很多场合都可以用一个芯片就能包容所需的全部资源,同时ARM处理器具有功耗低、程序代码少、自动化程度高、响应速度快、体积小、可根据需要灵活定制等特点,适合于要求实时和多任务处理的场合。因此本设计采用ARM处理器。本设计所用的ARM处理器LM3S811有48个引脚[3],其大部分引脚具有复用功能,如LM3S811的用作JTAG的五个管脚,同时也可以作为GPIO使用,这是LM3S811的一个缺点,但同时也是它的一个优点,由于JTAG被用来下载(烧写)程序使用,再用作GPIO可能会使得芯片锁死,这是它的缺点;但同时,它有防锁死的措施,如果使用者细心加上防锁死程序,或者在不需要使用太多GPIO的情况下,可以尽量不用这五个管脚PB7和PC0~PC3,如果需要,那么在加上防锁死程序后,就有五个GPIO管脚可以使用,这是它的一大优点。在LM3S811中,有很多功能模块:JTAG、UART(串口)、PWM(脉冲宽度调制)、Timer(定时器)、ADC(模数转换)等,其中一些功能模块,如串口,可以用在的调试过程中,模拟的虚拟串口,通过串口调试器的调试,在电脑上可以看到输入输出的结果,同时对照硬件的工作情况,可以更直观的得到运行结果。Timer可以被配置成一个32位的定时器,也可以被分为两个16位的定时/计数器。LM3S811芯片特点[4]:工作频率:0~50MHz32可编程I/O口3个定时模块,提供6个16位定时器具有8个中断优先级和26个中断64k单周期flash,8K单周期访问SRAM内置看门狗向量中断控制器,可配置优先级和向量地址低功耗设计:具备睡眠模式和深度睡眠模式3个PWM信号发生模块,提供3个16位的计数器、6个比较器,3个PWM信号发生器、以及一个死区发生器支持4通道模数转换器,500000次/秒的采样率内置温度传感器内置模拟比较器2个异步收发器模块支持FreescaleSPI、MICROWIRE、和德州仪器三中格式同步串行接口拥有3个PWM发生器模块LM3S811的内部系统方框图及其芯片管脚[5]图如下图2所示:图2LM3S811的内部系统方框图及其芯片管脚图2.1.2硬件总体框图图3硬件总体框图2.1.2.1JTAG防锁死按键LM3S811最小系统板中用将复用管脚PB5作为JTAG_LOCK按键,低电平有效。其主要作用是解决调试过程中有可能偶尔出现芯片的JTAG接口连接失效的问题,即遇到用调试器再也无法连接的情况,下图3防锁死按键电路。

图4JTAG_LOCK电路2.1.2.2仿真接口JTAG是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。标准的JTAG接口是4根线:测试模式选择TMS_SWDIO、测试时钟TCK、测试数据输出TDO、测试数据输入TD和测试复位/RST构成了仿真连接口,通过仿真连接口和仿真器连接,实现电路的仿真。2.2TH12864芯片研究2.2.1显示模块选择1602液晶显示器采用5×7点阵,可以显示2行,每行16个字。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。TH12864LCD显示器(LCD)[7]具有功耗低、体积小、重量轻、超薄等,其它显示器无法比拟的优点,近年来被广泛用于单片机控制和微控制器控制的智能仪器、仪表和低功耗电子产品中。LCD主要分为段位式LCD、字符式LCD和点阵式LCD三种,其中段位式LCD和字符式LCD只能用于字符和数字的简单的显示,而不能满足图形曲线和汉字显示的要求,在很多方面有很大的弊端;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线和汉字,像1602液晶显示器采用5×7点阵,可以显示2行,每行16个字。本文选用了12864(128×64)LCD显示器,它是128(列)64(行)点阵的LCD显示模块。在该系统中,通过LM3S811微控制器输入输出接口,利用C语言编程控制输入输出端口的高低电平,根据时序,以实现对LCD的控制,使得所需显示的数据以及功能得以在LCD显示模块上显示。2.2.2TH12864介绍表112864引脚说明引脚名称方向说明1VSS-GND(0V)2VDD-SupplyVoltageForLogic(+3.3V)3V0-SupplyVoltageForLCD4RS(CS)0H:DataL:InstructionCode5R//W(STD)0H:ReadL:Write6E(SCLK)0EnableSignal7-14DB0-DB70数据0-数据715PSB0H:ParallelModeL:SerialMode16NC-空脚17RST0Resetsignal低电平有效18NC-空脚19LEDA-背光电源正极(LED+3.3V)20LEDK-背光电源负极(LED-0V)本设计使用的是TH12864显示模块,TH12864液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示中文汉字及字符,且内含图形库,可显示自定义字符、汉字和图像,内置国标GB2312码简体中文字库(16×16点阵)、128个字符(8×16点阵)及64×256点阵显示RAM(GDRAM)。与外部CPU接口采用并行或串行两种控制方式。其中TH12864的供电电源有3.3V和5V的,在本设计中使用的是3.3V的电源。其引脚说明如表1所示:2.2.3TH12864工作原理在本系统的设计中共使用了6条12864管脚与LM3S811进行连接,其12864的引脚为1、2、4、5、6、15,其中1、2两条分别是接地和电源(3.3V);4引脚在串行状态下为12864的芯片选择端,控制12864到底是使用还是禁止,高电平有效,并行状态下为12864的数据、命令选择端,高电平为数据端,低电平为命令端;5引脚在串行状态下12864的数据传送端,并行状态下为读写控制端,高电平读,低电平写;6引脚串行状态下为12864的同步时钟引脚,并行状态下为信号使能端;15引脚为设置12864为并行还是串行模式,高电平为并行,低电平为串行,在本设计中使用串行模式,低电平有效。2.2.4TH12864显示在显示系统中,我们通过主控芯片LM3S811对12864显示模块进行控制,通过12864显示模块对主控芯片的命令进行读取,得到需要显示的数据或者指令,对所需显示的数据进行显示。12864液晶显示模块的每一个字符分为三个字节进行传送,其串行传送过程如图5所示:图5TH12864串行连接时序图串行数据传送分三个字节完成:第一个字节:串口控制—格式为11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据时显示数据,L表示数据是控制指令C固定为0第二个字节:8位数据的低4位—格式为DDDD0000第三个字节:8位数据的高4位—DDDD0000在本设计中使用了如上的串行传送方式,每一个数据分三个字节进行传送,其中第一个字节的前五位与最后一位为固定的1或0,第六位控制数据的传送方向,第七位对传送的数据类型进行选择;第二个字节开始对具体数据进行传送,首先传送的是数据的高四位,经过第二个字节的传送,就完成了对数据的高四位的传送,第三个字节就对数据的第四位进行了传送,至此,一个完整的数据得以传送成功。2.2.5TH12864应用实验使用Disp_HZ函数对每行进行显示,使用for(::)死循环促成每行的迭代显示。如图6所示:图6TH12864应用实验效果TH12864的基本显示程序如下所示:constunsignedcharh0[]={"信息学院"};constunsignedcharh1[]={"电信09赵拓"};constunsignedcharh2[]={"1070209014015"};constunsignedcharh3[]={"超市自动存储柜的设计"};voidmain(void){jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,6MHz//初始化指针数组ptr[0]=h0;ptr[1]=h1;ptr[2]=h2;ptr[3]=h3;Ini_Lcd();//初始化液晶unsignedchartmp;for(;;){tcnt++;if(tcnt==0x02){Disp_HZ(0x80,ptr[0],8);Disp_HZ(0x90,ptr[1],8);Disp_HZ(0x88,ptr[2],8);Disp_HZ(0x98,ptr[3],8);}SysCtlDelay(1000*(TheSysClock/3000));//延时约1000ms}}3系统软件部分设计3.1IAR编译环境介绍IAREmbeddedWorkbenchforARM(简称IAREWARM)是一个针对ARM处理器的集成开发环境。IAR包含项目管理器、编辑器、C/C++编译器和ARM汇编器、连接器XLINK和支持RTOS的调试工具C-SPY,其C/C++交叉编译器及调试器是今天世界上最完整的和最容易使用的专业嵌入式应用开发工具,在EWARM环境下可以使用C/C++和汇编语言方便地开发嵌入式应用程序,相比其他的ARM开发环境,IAREWARM入门更容易、使用更方便、其代码也更紧凑、编译效率更高、系统库功能也更完善。IAR从代码编辑、工程建立到C/C++编译、连接和调试可以是一套完整的集成开发,由于其和各种仿真器、调试器紧密结合,用户在开发和调试时能仅仅使用一种开发环境就可以完成多种微控制器的研发。IAREWARM集成的编译器的主要特征如下[4]:•高效的PROMable代码,完全标准的C语言兼容;•内含对应芯片的程序速度和大小优化器;•版本控制和扩展工具支持良好;•便捷的中断处理和模拟特性;•工程中的相对路径支持。介于IAR的上述特性以及C语言具有广泛的库程序支持,编译执行效率高,支持工具也比较多较成熟,其在嵌入式系统中有广泛的运用,具有通用性强,较强可维护性,可移植性程度高,执行效率高等优点,本次设计决定采用C语言编程4*4键盘扫描模块和TH12864显示模块。3.2IAR编译环境的安装由于IAREWARM的试用版有30天功能无限制版本、32K代码限制版本,32K代码限制版的优点是在使用时间上无限制,而我的设计从开始到结束30天不够,功能无限制版使用不便,我的程序32K内足够了,所以我在IAR公司的官网注册下载的就是32K代码限制版,在IAR公司官网获得了其序列码和KEY后就可以安装了。下载完成IAR安装软件EWARM-KS-CD-6307后,双击进入在安装页面中,点击InstallIAREmbeddedworkbench开始安装,接下来输入刚才在IAR官网获得的试用版序列号和密钥KEY完成IAR安装,接下来还得要安装IAR的工程文件库Stellarisware的软件SW-LM3S-8555以完成编译环境的安装。IAR编译环境安装完成后还得要安装M3-LINK的虚拟串口驱动程序,安装虚拟串口驱动程序后电脑才能识别仿真器,以完成烧写与仿真器相连接的EEPROM,方法为:首先将LM3S811最小系统板和仿真器连接,然后与电脑连接,之后电脑会出现新硬件安装向导,选择手动安装以打开德州仪器光盘中的USB仿真器驱动,选择并安装。由于仿真器是双虚拟串口,因此电脑还会提示安装新硬件,重复以上步骤,直到不再提醒。IAR开发环境的安装如下图8所示:图8IAR开发环境的安装3.3IAR编译环境下LM3S811最小系统版的程序调试3.3.1IAR工程文件的创建与设置IAR工程文件的创建:*创建一个工程文件目录,用来存放工作区文件、工程文件及程序源文件;*启动IAREWARM,点击“project”,选择“Creatnewproject”,选择默认的ARM和Emptyproject,创建一个基于ARM的空项目,保存项目文件;*右击项目名称,点击“add”,选择“addgroup”,在弹出的addgroup对话框中输入文件组的名称lib、src、startup,用于存放不同类型的源文件;*右击文件组名称,点击“add”,选择“addfiles”,添加所需文件以及源程序的源文件,比如lib文件组中的driverlib.a,是任何一个项目中都必不可少的,另外在startup文件组下的startup_ewarm.c也是必不可少的;IAR项目属性的设置:☆点击GeneralOptions选项,在Target选项下,点击Device,在右侧选择TexasInsrumentsLM3S811;☆点击Preprocessor选项卡,添加Include文件目录,在此我将StellarisWare文件夹下的全部子文件夹都包括了进来;☆在Output选项卡中,勾选Generaladditionaloutput,在outputformat里选择binary,再勾选overridedefault,这样在编译时会自动生成工程二进制文件.bin,方便下载;☆在Linker选项卡中勾选overridedefault,再选择添加文件LM3S811.icf。在List选项中选择generatelinkermapfile,便于生成MAP文件;☆在Debugger选项卡中,在setup里的driver选项选择LMFTDI;在download下勾选verifydownload和useflashload;☆在LMIFTDI选项卡中,在Interface下选择JTAG,在JTAG里选择100KHz。IAR项目属性的设置如下图9所示:图9IAR项目属性的设置3.3.2LM3S811最小系统版的程序调试我使用了LM3S811的GPIO口控制LED闪烁发光的简单例程来测试系统版是否可用以及是否能正常下载烧写程序,只要将LM3S811最小系统版的LED1灯处即JP1跳线连接到PE1,程序下载进去后,LED1灯能亮2秒熄1秒即可判定下载成功且开发板可用。PE1口控制LED1灯分三步走:1)调用函数SysCtlPeriEnable()使能LED所在的GPIO模块;2)调用函数GPIOPinTypeOut()配置LED所在的GPIO管脚为推挽输出;3)调用函数GPIOPinWrite()对LED所在的GPIO管脚写0和写1来控制LED的亮灭,并在中间插入函数SysCtlDelay()进行延时控制,以达到闪烁发光的效果。测试用程序清单——LED闪烁发光:#include"systemInit.h"//定义LED的端口#defineLED_PERIPHSYSCTL_PERIPH_GPIOG#defineLED_PORTGPIO_PORTG_BASE#defineLED_PINGPIO_PIN_2intmain(void){jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,6MHzSysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//设置LED所在管脚为输出for(;;){GPIOPinWrite(LED_PORT,LED_PIN,0x00);//熄灭LEDSysCtlDelay(1000*(TheSysClock/3000));//延时约1000msGPIOPinWrite(LED_PORT,LED_PIN,0xFF);//点亮LEDSysCtlDelay(2000*(TheSysClock/3000));//延时约2000ms}}超市自动存储柜软件设计具体如下:判断是否有键按下,若没有键按下,一直显示欢迎界面,继续判断是否有键按下。若有键按下,若是存包键按下,则转到步骤2,若是取包键按下,则转到步骤3。判断是否有空柜,若有,空柜打开,并显示取包时的密码。当按下取包键时,用户需输入密码,如果密码正确,门打开。如果密码错误,用户需重新输入密码。软件部分设计的总体流程如图7示:显示欢迎词显示欢迎词存键存键是否显示“请输入密码”显示“请输入密码”显示密码显示密码密码按键检测密码按键检测密码比较密码错误重新输入密码比较密码错误重新输入错误正确门打开门打开图7系统软件的总流程图主要程序如下所示:intmain(void){while(1){ Display();Key_Event();if(key_Flag==1){key_Flag=0;if(key_val=='*'){Clear_Char();srand((int)time(0));for(i=0;i<3;i++){Pass[i]=rand()%10+0x30;}Store();}elseif(key_val=='#'){Clear_Char();Take();}}SysCtlDelay(800*(TheSysClock/3000));//延时约1000ms}}3.44*4键盘扫描的实现超市自动存储柜在用户取物品时,需要对用户输入的密码进行扫描。这时需实现对键盘的扫描:键盘扫描电路中,扫描键盘时采用逐列扫描的方式[8],依次对PD0、PD1、PD2、PD3列按键循环扫描,扫描时先对单片机的端口赋0xff,同时对与要扫描那列按键相连的单片机端口赋低电平,再将单片机的端口的值与0xff相与使低四位有效,如果按键被按下则与被按下那个按键相连的单片机端口的电平将被拉到低电平,通过判断单片机端口的值就可以判断出是哪个键被按下。需要注意的是,在键盘扫描软件设计中,一定要有按键消抖的功能[9],否则按键按下的响应会受到较大影响。键盘识别是通过比较键盘扫描时对不同按键赋不同的值来执行相应的操作的。PD4PD5PD6PD7||||PD0||||PD1||||PD2||||PD3显示“请输入密码”显示“请输入密码”有键按下有键按下否延时是延时有键按下否有键按下延时延时是有键按下否有键按下是获取键值获取键值RETRET图84*4键盘扫描结构图4*4键盘的主要程序:unsignedcharkey_Pressed;//按键是否被按下:1--是,0--否unsignedcharkey_val;//存放键值unsignedcharkey_Flag;//按键是否已放开:1--是,0--否//定义LED管脚#defineLED_PERIPHSYSCTL_PERIPH_GPIOE#defineLED_PORTGPIO_PORTE_BASE#defineLED_PINGPIO_PIN_1intmain(void){chars[40];jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,6MHzInit_Keypad();SysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//设置LED所在管脚为输出key_val=0;sprintf(s,"\r\nKeyValue:%d",key_val);uartPuts(s);for(;;){Key_Event();if(key_Flag==1){key_Flag=0;sprintf(s,"\r\nKeyValue:%c",key_val);uartPuts(s);GPIOPinWrite(LED_PORT,LED_PIN,0xFF);//熄灭LEDSysCtlDelay(100*(TheSysClock/3000));//延时约100msGPIOPinWrite(LED_PORT,LED_PIN,0x00);//点亮LEDSysCtlDelay(100*(TheSysClock/3000));//延时约100ms}}}4系统的调试与分析4.14*4键盘的扫描并在TH12864上显示的调试在TH12864的显示环节调试中,发现LCD的背光太亮了以至于显示的字幕在显示屏上无法显示,当我接上一个10k的滑动变阻器之后,通过阻值的不断变化,最终达到了图6的效果。在4*4键盘的扫描电路中,当我将程序烧进m3单片机时,显示没有错误,但就是不能将按键的值在液晶屏上显示出来。首先分析硬件,对4*4键盘用万用表进行检测,当有键按下时,可以在万用表中显示,说明4*4键盘没有问题。当用万用表检测之后,原来是由于电压过低,需接上拉电阻。图10为接入上拉电阻之后4*4键盘的扫描并在TH12864上显示的结果:图104*4键盘的扫描并在TH12864上显示的调试4.2用户输入的密码与随机密码比较的调试在焊接电路完成后,当调用随机函数产生随机密码时,无论输入的密码是否正确,总会显示密码是正确的,说明自己当时调用的比较函数没有起作用,需重新调用比较函数。在进行单步调试之后,发现在执行比较函数时,会跳出,需重新调用比较函数。图11为重新调用比较函数之后用户输入的密码与随机密码比较的实物图:图11用户输入密码与随机密码比较的调试4.3用户输入万能密码与随机密码比较的调试本设计为防止用户忘记密码而不能开锁,设置万能密码为“123”,无论随机密码是什么,只要输入万能密码,即可开锁。4.4程序调试的典型举例由于起初对IAR的使用不够熟悉,之前以为只要在main.c里面添加进了4*4键盘的头文件就可以完成4*4键盘的扫描及显示,后来才发现需要在里面设置自己要用的"cryfucns.h"函数头文件才能调试通过,最终自己查看了周立功的《ARM嵌入式系统基础教程》及相关例程,在main.c文件里面成功添加了"cryfucns.h"的函数头文件,使得模块程序得以通过。另外在最终程序调试的时候,出现单独的子程序能调试通过,放到一起就不能调试通过,通过自己努力以及导师的指导,我发现其中一个问题是各子程序模块添加成主程序时,缺少头文件,还有会出现管脚定义重复现象,导致不能调试通过。另外一个问题是在编译连接下载都成功后,总是得不到想要的结果。于是进行单步调试,在调试单步执行程序发现执行到比较函数时,会出现跳过比较函数,自己尝试过定义各种数据类型进行比较都不能解决问题,上网搜索才知道用stren()比较字符串的长度,调用strcpy()可以比较字符串大小,最终重新编写了比较函数使得问题得以解决。5结束语本设计采用了LM3S811微处理器为主控芯片,利用TH12864作为显示模块,4*4的键盘用作按键,Led代替门控驱动电路,利用随机函数产生一个3位的随机密码,当客户密码正确时门打开,当密码错误时显示重新输入密码。本次设计的原理图绘制使用了Protel99SE,软件的编译与和下载使用了IAREWARM,对这些软件加深了熟悉、理解与掌握。在设计制作过程中,我力求硬件布线规范焊接美观,软件编程灵活简便、可移植。设计过程中遇到过很多困难,曾一度中断,后经与老师同学讨论仔细分析解决了问题,通过这次设计我深刻体会到了实践的重要性,提高了自己独立分析问题、解决问题的能力,锻炼了自己的实际动手能力。很遗憾,因为设计过程时间有限,本设计想采用两个独立的按键作为“存”“取”功能使用,由于尝试多次都未成功,用4*4键盘的“*”代表“存”“#”代表“取”。因此该系统还有很多值得改进的地方,如:当储物柜存储满时,会自动显示储物柜已经存满。当用户密码输入错误3次时或者当用户忘记关门时会自动报警。其改进方向是在电路中加入ISDl760语音芯片。通过ISD1760录制语音信息,然后利用ISD1760的SSI模式接口和LM3S811同步串行端口连接通信,实现语音芯片按照主控芯片发送的信息组合语音片段,让语音芯片一定逻辑播放语音提示信息。参考文献:[1]张先震,黄山,李宁等.自动储物柜控制系统设计[J].微计算机信息,2009,25(43)[2]王博,盛霖,万礼超等.新型智能储物柜[J].校园电子竞赛园地,2009,2(44)[3]TIworkteam.StellarisLM3S811Microcontroller[R].LuminaryMicroCompany,2007-2010.[4]黄争.德州仪器高性能单片机和模拟器件在高校中的应用和选型指南[R].上海:德州半导体技术(上海)有限公司大学计划部,2010.[5]周立功等.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.[6]姚文祥等.ARMCortex-M3权威指南[M].北京:北京航空航天大学出版社,2009.[7]张栋,秦昌丽,谢大帝等.基于ARM单片机的小车显示系统设计[J].现代电子技术,2011,34(22):65-67.[8]曹建林,孙捷,孙雪颖等.电子密码锁设计[J].成都信息工程学院学报,2010,4(25)[9]张志利,侯传勋,蔡伟等.全功能硬件扫描键盘控制器IP核的实现[J].电子技术应用,2006,10(111)[10]马忠梅,籍顺心,张凯等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006.[11]王道新,熊祖彪,陈竞等.基于IAR集成开发平台的ARM程序设计方法[J].电子设计应用,2005(10):102-104.

附录1:元件清单器件名称器件数目LM3S8111片TH128641片4*4键盘1片电阻10K4个LED3个10k的滑动变阻器1个导线若干附录2:主程序#include"systemInit.h"#include"key44.h"#include"uartGetPut.h"#include<stdio.h>#include<string.h>#include"cryfucns.h"#include<stdlib.h>#include<time.h>typedefunsignedcharuchar;typedefunsignedintuint;//定义LED1、LED2#defineLED1_PERIPHSYSCTL_PERIPH_GPIOB#defineLED1_PORTGPIO_PORTB_BASE#defineLED1_PINGPIO_PIN_0#defineLED2_PERIPHSYSCTL_PERIPH_GPIOB#defineLED2_PORTGPIO_PORTB_BASE#defineLED2_PINGPIO_PIN_1externunsignedcharkey_Pressed;//按键是否被按下:1--是,0--否externunsignedcharkey_val;//存放键值externunsignedcharkey_Flag;//按键是否已放开:1--是,0--否constunsignedcharh0[]={"欢迎光临****超市"};constunsignedcharh1[]={"祝您购物愉快"};constunsignedcharh2[]={"存or取"};constunsignedcharh3[]={""};constunsignedcharh4[]={"按任意键选择退出"};constunsignedcharStrWord[4]="123";unsignedcharStrings[]={"请输入您的密码"};unsignedcharStrings1[]={"密码错误"};unsignedcharStrings2[]={"密码正确"};unsignedcharTemp[]={""};unsignedcharPass[]="";unsignedcharPassWord[3]="";inttcnt,temp,i;intcount=0;voidDisplay();voidClear_Char();voidStore();voidTake();intmain(void){SysCtlPeriEnable(LED1_PERIPH);//使能LED1所在的GPIO端口GPIOPinTypeOut(LED1_PORT,LED1_PIN);//设置LED1所在管脚为输出SysCtlPeriEnable(LED2_PERIPH);//使能LED2所在的GPIO端口GPIOPinTypeOut(LED2_PORT,LED2_PIN);//设置LED2所在管脚为输出jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,6MHzIni_Lcd();//初始化LCDInit_Keypad();//初始化键盘端口while(1){GPIOPinWrite(LED1_PORT,LED1_PIN,0x00);//熄灭LEDGPIOPinWrite(LED2_PORT,LED2_PIN,0x00);//熄灭LEDGPIOPinWrite(LED3_PORT,LED3_PIN,0x00);//熄灭LED Display();Key_Event();if(key_Flag==1){key_Flag=0;if(key_val=='*'){Clear_Char();srand((int)time(0));for(i=0;i<3;i++){Pass[i]=rand()%10+0x30;}Store();}elseif(key_val=='#'){Clear_Char();

温馨提示

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

评论

0/150

提交评论