




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于msp430f149的数字密码锁摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有安全性高、成本低、功耗低、易操作等优点。在本次萌芽计划电子设计制作中,我们采用TI公司生产的msp430作为主控芯片,结合外围的矩阵键盘输入、LCD显示、蜂鸣器报警和LED显示等,用C语言编写主控芯片程序,设计了一款可以数字字母混合密码输入,具有报警功能的
2、数字密码锁。关键词:数字密码锁 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第一章 系统方案设计
3、与论证方案比较方案一:以STC89C52单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动LCD1602显示器提示程序运行过程和开锁的步骤,利用AT24C02芯片实现掉电存储。方案二:以msp430f149单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动LCD1602显示器提示程序运行过程和开锁的步骤。方案比较:msp430f149单片机性能比STC89C52单片机高,且I/O口远多于STC89C52单片机,方便更好的利用多余的I/O口 扩充其他功能。因此本次设计选择方案二。方案设计与论证由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加
4、比较,合理选择,以期获得最佳的性价比。一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。基于以上因素本设计选用单片机msp430f149作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围
5、电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。当用户需要开锁时,先输入密码,如果密码输入正确则开锁或设置新密码,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入新密码,新密码输入后再次输入新密码,两次输入一致则密码修改成功。设计框图第二章 主要元器件介绍Msp430f149MSP430是TI公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐。它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器。具有统一的中断管理,具有丰
6、富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟。由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备。LCD1602液晶显示器本设计采用LCD液
7、晶显示屏显示。其具有体积小、功耗低、界面美观大方等优点,这里使用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
8、=0,D07=指令码,E=H脉冲RS=1,RW=1,E=1RS=1,RW=0,D07=数据,E=H脉冲表3.6.1 LCD1602操作指令1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A。1602通过D0
9、D7的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电路
10、十分简单,只需供电部分和晶振部分。单片机电路矩阵键盘电路4*4矩阵键盘电路由16个轻触开关加上4个1k的上拉电阻构成,通过P1口接入单片机。矩阵键盘电路复位单路单片机在RESET端加一个大于20ms正脉冲即可实现复位,上电复位和按钮组合的复位电路如下:复位电路在系统上电的瞬间,RST与电源电压同电位,随着电容的电压逐渐上升,RST电位下降,于是在RST形成一个正脉冲。当人按下按钮K17时,使电容C7通过R8迅速放电,待K17弹起后,C7再次充电,实现手动复位。LCD显示电路本设计采用LCD1602液晶显示屏进行显示,可同时实现数字与字母混合密码的显示以及各种提示的显示。LCD显示电路LED显示
11、电路P2.0接红色LED灯,密码错误时显示;P2.4接绿色LED灯,密码正确开锁时显示;P2.6接蓝色LED灯,设置密码时显示。LED显示电路报警电路按键时蜂鸣器会实时鸣叫;当密码三次输入错误时,长时间蜂蜜报警;密码输入正确时蜂鸣器产生提示音。报警电路电源电路本设计采用9v电池供电,先由LM7805稳压至5v,再由ASM1117-3.3稳压到3.3v给电路供电。电源电路第四章 系统软件设计主程序流程图开始接上电源,程序进行初始化设置,然后在键盘上输入密码,此系统进行键盘扫描,密码错误3次出错报警,密码正确,选择开锁或修改密码,若要修改密码时,需要两次确认新密码,确认后,密码修改成功,否则结束。
12、开始初始化次数加1输入密码密码正确?返回NYY开锁程序开锁?N修改密码?次数>3?报警程序修改程序YNNY主程序流程图功能按键软件设计在按键当中,有与转换、清除、开锁、设置的程序相对应的按键。 开始键值=转换?转换程序键值=清除?清除程序开锁程序键值=开锁?键值=设置?设置程序返回功能按键程序软件流程图密码设置软件设计开始按下设置键,输入新密码后,再次输入新密码,如果两次输入一样,则输入成功。如果两次输入的新密码不一样,则修改密码失败。开始按下设置键输入新密码再次输入两次输入一致?设置失败设置成功密码设置软件流程图第五章 实验分析测试方法按下电源开关,屏幕显示”PASSWORD”,输入1
13、0位密码,屏幕实时显示密码,并伴有实时提示音,若密码错误,屏幕显示”ERROR“,随后显示”PASSWORD”,再次输入密码,密码三次输入错误,清屏,亮红灯并伴有长时间蜂鸣。若输入密码正确,蜂鸣器产生提示音,屏幕显示”A_unlock B_set”,若按下开锁键,亮绿灯,显示”UNLOCK”;若按下设置键,亮黄灯,显示”NEW CODE”,输入10位新密码,显示”INPUT AGAIN”,再次输入新密码,若两次新密码输入一致,显示”SUCCEED”,若两次新密码输入不一致,则显示”FAILE”。输入密码时,可通过清除键清除已输入密码,可通过转换键实现数字与字母和字母大小写之间的转换。测试分析测
14、试结果与我们预想的一致,但由于程序中使用了go-to语句,使得输入不是很稳定,需要一定的反应时间。第五章 总结总的来说,这次“萌芽计划”对我们三个都是一个挑战,因为我们三人的基础都不一样,有的基本为零,而有的却早已参加了多次科创活动。对于萌芽而言,我们三个无论是谁都无法独自完成。这更挑战了我们的合作能力。在技术上,我们基础好的带动基础差的,尽可能的让他学会东西,基础好的也不断提升自己,用更高端的技术来实现功能。通过这次竞赛,我们三个都提高了很多,这次的萌芽计划也为我们日后的科创道路打下了厚实的基础。当然,我们也有很多不足之处,比如说粗心大意,导致我们浪费了很多工程和时间,还有因为懒惰,是我们没
15、有做到尽善尽美。但有了这次经历,我想我们三个在以后会做的越来越好。附录附录一 整体电路图附录二 PCB封装图附录三 部分程序#include <msp430x14x.h>#include "Keypad.h"#include "cry1602.h"#include "子程序集.h"/引用外部变量的声明 extern unsigned char key_val; extern unsigned char key_Flag;extern unsigned char BACK;/宏定义(也许不这么叫,看二级)typedef un
16、signed 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 PROX = "XINXIN & LULU &" uchar PROX_1 = "JUNJUN." uchar Fin =
17、"THIEF.THIEF." WDTCTL = WDTPW + WDTHOLD; /关闭看门狗 LcdReset(); /初始化LCD Init_Keypad(); /初始化键盘端口 P6DIR |= BIT7; /蜂鸣器P6.7 P6OUT |= BIT7; P2DIR |= 0xff; /P2.0红灯-用于报警以及按键;P2.4绿灯-用于解锁、开锁;P2.6蓝灯-用于设置 P2OUT |= 0xff; loop:DispNChar(0,0,15,PROX); DispNChar(2,1,12,PROX_1); /嘿嘿 Delay400ms(); LcdWriteComm
18、and(0x01,1); DispNChar(3,0,9,Tishi); /显示提示文字 Code_CIN_1(); /子程序1 向数组C输入十位数字字母组合(最开始输入密码时) Comp(); /子程序2 逐个比较数组C和数组D的元素 Delay200ms();/用于显示延迟,否则看不到最后一位 Unlock_j(); /对比较结果进行分析判断,然后运行 if(BACK <= 3) /密码输入错误小于三次再次输入 goto loop; /程序有些不稳,需要慢慢按(GOTO的弊端) else LcdWriteCommand(0x01,1); /大于三次后报警 DispNChar(0,0,
19、16,Fin); BACK = 0; /计数清零 Buz_E();/报警; Delay400ms(); Delay400ms(); LcdWriteCommand(0x08,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) k
20、ey_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,0x30+key);/显示对应的是ACSSI码 Code_Cp = key; i+;p+; else if(ref = 2) key = 0x31;Disp1Char(3+i,1,0x30+key); Code_Cp =
21、0x30+key; /比较的时候是16进制的对应码 i+;p+; else if(ref = 3) key = 0x11;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 2: Buz_O(); if(ref = 1) key = 2;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x32;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(re
22、f = 3) key = 0x12;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 3: Buz_O(); if(ref = 1) key = 3;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x33;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x13;Disp1Char(3+i,1,0x30+key)
23、; Code_Cp = 0x30+key; i+;p+; break; case 5: Buz_O(); if(ref = 1) key = 4;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x34;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x14;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 6:
24、 Buz_O(); if(ref = 1) key = 5;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x35;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x15;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 7: Buz_O(); if(ref = 1) key = 6;Disp1Char(3+i
25、,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x41;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x21;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 9: Buz_O(); if(ref = 1) key = 7;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if
26、(ref = 2) key = 0x42;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x22;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 10: Buz_O(); if(ref = 1) key = 8;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x43;Disp1Char(3+i,1,0x30+
27、key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x23;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 11: Buz_O(); if(ref = 1) key = 9;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x44;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(r
28、ef = 3) key = 0x24;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; break; case 14: Buz_O(); if(ref = 1) key = 0;Disp1Char(3+i,1,0x30+key); Code_Cp = key; i+;p+; else if(ref = 2) key = 0x45;Disp1Char(3+i,1,0x30+key); Code_Cp = 0x30+key; i+;p+; else if(ref = 3) key = 0x25;Disp1Char(3+i,1,0x30+ke
29、y); Code_Cp = 0x30+key; i+;p+; break; case 4:break;/这两个键需正确后再用 case 8:break; case 12: if(i < 9)/。失误失误 Buz_O(); Delay5ms(); Buz_O();/提醒 DispNChar(0,0,16,Confirm_0); DispNChar(3,0,10,Confirm_1); Delay200ms(); DispNChar(0,0,16,Confirm_0); DispNChar(3,0,9,Clear_1); break; case 13: Buz_O(); /转换按键 ref+; if(ref > 3) ref = 1; break; case 15: Buz_O(); /清除程序 LcdWriteCommand(0x01,1); DispNChar(3,0,9,Clear_1); for(i = 0,p = 0; p <= 9;p+) Code_Cp = 0; /同时数组也得清 break; case 16:break; /扩展呗,有时间继续加 default: break;/到时添加延时程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教科版必修二第三章万有引力定律同步测试题2025年高三下学期专项练习英语试题含解析
- 伍家岗区2025届三年级数学第二学期期末监测模拟试题含解析
- 云南省云南昆明市盘龙区达标名校2025届初三第二次中考诊断数学试题含解析
- 四川省金堂中学2025年高三下学期英语试题期中试题含解析
- 浙江省嘉兴一中2025年高三第一次诊断化学试题含解析
- 书法家共同合作合同2025
- 个人股份交易合同
- 2024-2025学年度福建省德化第二中学高一下学期期中考试历史试题(含答案)
- 超高层建筑施工承包合同范本
- 零售药店员工劳动合同范本
- GB/T 23587-2024淀粉制品质量通则
- 珠子参免疫调节作用及其应用
- DB32T 4793-2024 球墨铸铁管排水系统应用技术规程
- 2022-2023学年河南省南阳市宛城区人教版五年级下册期中测试数学试卷【含答案】
- 盐城市盐都区2023-2024学年四年级语文第二学期期末模拟检测卷
- Academic English智慧树知到答案2024年杭州医学院
- 广东省深圳市龙岗区南湾实验小学2023-2024学年四年级下学期期中测试数学试题
- 安徽省合肥六校联盟2022-2023学年高一下学期期中联考化学试题(解析版)
- 提高感染性休克集束化治疗完成率工作方案
- pvc输送带生产工艺
- 宫颈肌瘤的护理查房
评论
0/150
提交评论