基于msp430的数字密码锁

上传人:沈*** 文档编号:101444021 上传时间:2022-06-05 格式:DOC 页数:29 大小:87KB
返回 下载 相关 举报
基于msp430的数字密码锁_第1页
第1页 / 共29页
基于msp430的数字密码锁_第2页
第2页 / 共29页
基于msp430的数字密码锁_第3页
第3页 / 共29页
点击查看更多>>
资源描述
-基于msp430f149的数字密码锁摘要在日常的生活和工作中, 住宅与部门的平安防、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的方法来解决。假设使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丧失后平安性即大打折扣。在平安技术防领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有平安性高、本钱低、功耗低、易操作等优点。在本次萌芽方案电子设计制作中,我们采用TI公司生产的msp430作为主控芯片,结合外围的矩阵键盘输入、LCD显示、蜂鸣器报警和LED显示等,用C语言编写主控芯片程序,设计了一款可以数字字母混合密码输入,具有报警功能的数字密码锁。关键词:数字密码锁 msp430 报警目录目录2第一章 系统方案设计与论证3方案比较3方案设计与论证3设计框图4第二章 主要元器件介绍4Msp430f1494LCD1602液晶显示器7LM78058ASM1117-3.310第三章 系统硬件构造设计12单片机电路12矩阵键盘电路12复位单路13LCD显示电路13LED显示电路13报警电路14电源电路14第四章 系统软件设计14主程序流程图14功能按键软件设计15密码设置软件设计16第五章 实验分析17测试方法17测试分析18第五章 总结18附录19附录一 整体电路图19附录二 PCB封装图20附录三 局部程序20第一章 系统方案设计与论证方案比较方案一:以STC89C52单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动LCD1602显示器提示程序运行过程和开锁的步骤,利用AT24C02芯片实现掉电存储。方案二:以msp430f149单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动LCD1602显示器提示程序运行过程和开锁的步骤。方案比较:msp430f149单片机性能比STC89C52单片机高,且I/O口远多于STC89C52单片机,方便更好的利用多余的I/O口 扩大其他功能。因此本次设计选择方案二。方案设计与论证由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最正确的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、性,除了以上的一些的还有一些最根本的比方:中断源的数量和优先级、工作温度围、有没有低电压检测功能、单片机有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发本钱、开发人员的适应性、技术支持和效劳等等因素。基于以上因素本设计选用单片机msp430f149作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现根本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。当用户需要开锁时,先输入密码,如果密码输入正确则开锁或设置新密码,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入新密码,新密码输入后再次输入新密码,两次输入一致则密码修改成功。设计框图第二章 主要元器件介绍Msp430f149MSP430是TI公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广阔技术开发人员的青睐。它采用16位的总线,外设和存统一编址,寻址围可达64K,还可以外扩展存储器。具有统一的中断管理,具有丰富的片上外围模块,片有精细硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO部振荡器和两个外部时钟,支持8M 的时钟。由于为FLASH型,则可以在线对单片机进展调试和下载,且JTAG口直接和FETFLASH EMULATION TOOL的相连,不须另外的仿真工具,方便实用,而且可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗电流为14mA左右,可靠性能好加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备。LCD1602液晶显示器本设计采用LCD液晶显示屏显示。其具有体积小、功耗低、界面美观大方等优点,这里使用YB1602液晶屏,1602显示模块用点阵图形显示字符,显示模式分为2行16个字符。它具有16个引脚,其正面左起为第一脚,如以下图所示:第一脚GND:接地。第二脚VCC:+5V电源。第三脚VO:比照度调整端。使用时通过接一个10K的电阻来调节。第四脚RS:存放器选择信号线。第五脚RW:读写信号线。第六脚E:使能端,当E由高电平跳变为低电平时执行命令。第714脚:8位数据线D0D7。第十五脚BLA:背光电源正极输入端。第十六脚BLK:背光电源负极输入端。操作控制表操作读状态写指令读数据写数据输入RS=0,RW=1,E=1RS=0,RW=0,D07=指令码,E=H脉冲RS=1,RW=1,E=1RS=1,RW=0,D07=数据,E=H脉冲表3.6.1 LCD1602操作指令1602液晶模块部的字符发生存储器CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比方大写的英文字母A的代码是01000001B41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母A。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A。1602通过D0D7的8位数据端传输数据和指令。LM7805电源电路采用普通可调电源供电,该电源不含稳压器,所以在设计中需要用稳压器进展稳压,我们选用LM7805来获得稳定的+5V直流电压,LM7805引脚排列和典型应用如以下图:LM7805引脚和典型应用LM7805电气参数ASM1117-3.3本设计中msp430需采用3.3v电源供电,因此需用AMS1117-3.3将已稳压成5v的直流稳压成3.3v。AMS117-3.3 是一个正向低压降稳压器,在1A电流下压降为1.2V。AMS1117引脚图AMS1117电气参数第三章 系统硬件构造设计单片机电路以TI公司的msp430f149单片机为主控芯片,CPU电路十分简单,只需供电局部和晶振局部。单片机电路矩阵键盘电路4*4矩阵键盘电路由16个轻触开关加上4个1k的上拉电阻构成,通过P1口接入单片机。矩阵键盘电路复位单路单片机在RESET端加一个大于20ms正脉冲即可实现复位,上电复位和按钮组合的复位电路如下:复位电路在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。当人按下按钮K17时,使电容C7通过R8迅速放电,待K17弹起后,C7再次充电,实现手动复位。LCD显示电路本设计采用LCD1602液晶显示屏进展显示,可同时实现数字与字母混合密码的显示以及各种提示的显示。LCD显示电路LED显示电路P2.0接红色LED灯,密码错误时显示;P2.4接绿色LED灯,密码正确开锁时显示;P2.6接蓝色LED灯,设置密码时显示。LED显示电路报警电路按键时蜂鸣器会实时鸣叫;当密码三次输入错误时,长时间蜂蜜报警;密码输入正确时蜂鸣器产生提示音。报警电路电源电路本设计采用9v电池供电,先由LM7805稳压至5v,再由ASM1117-3.3稳压到3.3v给电路供电。电源电路第四章 系统软件设计主程序流程图开场接上电源,程序进展初始化设置,然后在键盘上输入密码,此系统进展键盘扫描,密码错误3次出错报警,密码正确,选择开锁或修改密码,假设要修改密码时,需要两次确认新密码,确认后,密码修改成功,否则完毕。开场初始化次数加1输入密码密码正确.返回NYY开锁程序开锁.N修改密码.次数3.报警程序修改程序YNNY主程序流程图功能按键软件设计在按键当中,有与转换、去除、开锁、设置的程序相对应的按键。 开场键值=转换.转换程序键值=去除.去除程序开锁程序键值=开锁.键值=设置.设置程序返回功能按键程序软件流程图密码设置软件设计开场按下设置键,输入新密码后,再次输入新密码,如果两次输入一样,则输入成功。如果两次输入的新密码不一样,则修改密码失败。开场按下设置键输入新密码再次输入两次输入一致.设置失败设置成功密码设置软件流程图第五章 实验分析测试方法按下电源开关,屏幕显示PASSWORD,输入10位密码,屏幕实时显示密码,并伴有实时提示音,假设密码错误,屏幕显示ERROR,随后显示PASSWORD,再次输入密码,密码三次输入错误,清屏,亮红灯并伴有长时间蜂鸣。假设输入密码正确,蜂鸣器产生提示音,屏幕显示A_unlock B_set,假设按下开锁键,亮绿灯,显示UNLOCK;假设按下设置键,亮黄灯,显示NEW CODE,输入10位新密码,显示INPUT AGAIN,再次输入新密码,假设两次新密码输入一致,显示SUCCEED,假设两次新密码输入不一致,则显示FAILE。输入密码时,可通过去除键去除已输入密码,可通过转换键实现数字与字母和字母大小写之间的转换。测试分析测试结果与我们预想的一致,但由于程序中使用了go-to语句,使得输入不是很稳定,需要一定的反响时间。第五章 总结总的来说,这次萌芽方案对我们三个都是一个挑战,因为我们三人的根底都不一样,有的根本为零,而有的却早已参加了屡次科创活动。对于萌芽而言,我们三个无论是谁都无法单独完成。这更挑战了我们的合作能力。在技术上,我们根底好的带动根底差的,尽可能的让他学会东西,根底好的也不断提升自己,用更高端的技术来实现功能。通过这次竞赛,我们三个都提高了很多,这次的萌芽方案也为我们日后的科创道路打下了厚实的根底。当然,我们也有很多缺乏之处,比方说粗心大意,导致我们浪费了很多工程和时间,还有因为懒惰,是我们没有做到尽善尽美。但有了这次经历,我想我们三个在以后会做的越来越好。附录附录一 整体电路图附录二 PCB封装图附录三 局部程序*include *include Keypad.h*include cry1602.h*include 子程序集.h/引用外部变量的声明 e*tern unsigned char key_val; e*tern unsigned char key_Flag;e*tern unsigned char BACK;/宏定义也许不这么叫,看二级typedef unsigned char uchar;typedef unsigned int uint;uchar Code_C10 = 0;uchar Code_D10 = 0,1,2,3,4,5,a,a,a,a;/这是密码哦/*主函数*/void main(void) uchar Tishi = PASSWORD:; uchar PRO* = *IN*IN & LULU &; uchar PRO*_1 = JUNJUN.; uchar Fin = THIEF.THIEF.; WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 LcdReset(); /初始化LCD Init_Keypad(); /初始化键盘端口 P6DIR |= BIT7; /蜂鸣器P6.7 P6OUT |= BIT7; P2DIR |= 0*ff; /P2.0红灯-用于报警以及按键;P2.4绿灯-用于解锁、开锁;P2.6蓝灯-用于设置 P2OUT |= 0*ff;loop:DispNChar(0,0,15,PRO*); DispNChar(2,1,12,PRO*_1); /嘿嘿 Delay400ms(); LcdWritemand(0*01,1); DispNChar(3,0,9,Tishi); /显示提示文字 Code_CIN_1(); /子程序1 向数组C输入十位数字字母组合最开场输入密码时 p(); /子程序2 逐个比较数组C和数组D的元素 Delay200ms();/用于显示延迟,否则看不到最后一位 Unlock_j(); /比照拟结果进展分析判断,然后运行 if(BACK = 3) /密码输入错误小于三次再次输入 goto loop; /程序有些不稳,需要慢慢按GOTO的弊端 else LcdWritemand(0*01,1); /大于三次后报警 DispNChar(0,0,16,Fin); BACK = 0; /计数清零 Buz_E();/报警; Delay400ms(); Delay400ms(); LcdWritemand(0*08,1); /之后会白屏,嘿嘿 /*函数名称:向C数组中输入十位密码 输入密码阶段*返回值:暂无*功能:*/void Code_CIN_1(void) uchar Clear_1 = PASSWORD:; uint i,p,ref = 1; uchar fact,key; for(i = 0, p = 0; i = 9;) /十位密码 Key_Event(); if(key_Flag = 1) key_Flag = 0; fact = key_val;/这样会比较好 switch(fact) /逻辑1-10用于实际0-9需要key的转换 逻辑4为开锁键,只有密码正确有效,其余无效 case 1: Buz_O();/按键声 if(ref = 1) /关系着数字与字母的转换字母包含大小写1为数字,2为小写,三为大写 key = 1;Disp1Char(3+i,1,0*30+key);/显示对应的是ACSSI码 Code_Cp = key; i+;p+; else if(ref = 2) key = 0*31;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; /比较的时候是16进制的对应码 i+;p+; else if(ref = 3) key = 0*11;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 2: Buz_O(); if(ref = 1) key = 2;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*32;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*12;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 3: Buz_O(); if(ref = 1) key = 3;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*33;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*13;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 5: Buz_O(); if(ref = 1) key = 4;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*34;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*14;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 6: Buz_O(); if(ref = 1) key = 5;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*35;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*15;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 7: Buz_O(); if(ref = 1) key = 6;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*41;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*21;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 9: Buz_O(); if(ref = 1) key = 7;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*42;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*22;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 10: Buz_O(); if(ref = 1) key = 8;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*43;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*23;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 11: Buz_O(); if(ref = 1) key = 9;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*44;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*24;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 14: Buz_O(); if(ref = 1) key = 0;Disp1Char(3+i,1,0*30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0*45;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; else if(ref = 3) key = 0*25;Disp1Char(3+i,1,0*30+key); Code_Cp = 0*30+key; i+;p+; break; case 4:break;/这两个键需正确后再用 case 8:break; case 12: if(i 3) ref = 1; break; case 15: Buz_O(); /去除程序 LcdWritemand(0*01,1); DispNChar(3,0,9,Clear_1); for(i = 0,p = 0; p = 9;p+) Code_Cp = 0; /同时数组也得清 break; case 16:break; /扩展呗,有时间继续加 default: break;/到时添加延时程序。 /*8*函数名:比较程序*返回值:A*功能:俩数组进展比较*/*include *include Keypad.h*include cry1602.hvoid p(void) uint p; uint S,Q; for(p = 0;p = 9;p+) S = Code_Cp; Q = Code_Dp; if(S = Q) A = 1; else A = 0;break;/一个标志位,到时好比较 /*开锁程序* 函数名:Unlock_j* 返回值:无*功能:比较输入判断密码是否正确,然后进展提示*/void Unlock_j(void) uchar Tishi_0 = WELE-; uchar Tishi_1 = ERROR!; uchar Tishi_2 = A_unlock B_set; uchar Tishi_3 = UNLOCK-; uint p,i,R; if(A = 1)/密码正确 LcdWritemand(0*01,1); DispNChar(3,0,10,Tishi_0); DispNChar(0,1,15,Tishi_2); Delay5ms(); Buz_R();/正确提示音 三声短促鸣叫 BACK = 0; for(p = 0;p = 9;p+)/比照数组C清空 Code_Cp = 0; for(i = 0;i = 5;) Key_Event();/再次扫描,选择功能开锁或设置密码 if(key_Flag = 1) key_Flag = 0; R = key_val; if(R = 4) Buz_O(); LcdWritemand(0*01,1); DispNChar(3,1,9,Tishi_3); i+;/开锁 Delay5ms(); Buz_R(); if(R = 8) Buz_O(); Set(); i+;/修改密码 else/密码错误 LcdWritemand(0*01,1); DispNChar(4,0,8,Tishi_1); Delay200ms(); BACK+;/错误计数标志位 . z.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!