基于单片机的电子密码锁设计_第1页
基于单片机的电子密码锁设计_第2页
基于单片机的电子密码锁设计_第3页
基于单片机的电子密码锁设计_第4页
基于单片机的电子密码锁设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

“第九届”电子设计大赛作品名称: 基于单片机的电子密码锁设计团队成员: 陈静 方俊 韩坤 指导教师: 李涛 余建华 2013年 06月 08 日 摘 要本设计从经济实用出发采用89S52作为主控芯片,采用低功耗CMOS型E2PROM AT24C02为数据储存单元,矩阵键盘输入密码,LCD1602液晶显示器、开锁电路等电路组成一款多功能电子密码锁。经过市场调查,使用单片机制作的电子密码锁具有方便、安全、操作简单等优点,而且易于开发,成本较低,在住宅、办公室、保险箱、汽车等需要防盗的场所有一定的实用性。该设计还具有按键有效提示、控制开锁、控制报警、修改密码以及无线遥控发送非固定代码等功能。关键词:单片机;密码锁; AbstractThis design embarks from the economic and practical using 89 c52 as main control chip, the AT24C02 USES low power CMOS E2PROM chips was introduced for the data storage unit, matrix keyboard input password, LCD1602 LCD display, such as lock circuit circuit consisting of a multi-functional electronic combination lock.Through market research, the use of single chip microcomputer to make electronic combination lock has the advantages of convenience, safety, simple operation, and ease of development, the cost is low, in the residential, office, safe, car, etc need to guard against theft the place has a certain practicality. This design also has the button tips, control lock, modification of password sent without a fixed and wireless remote control code, and other functions.Key words: single chip microcomputer; A combination lock;一、方案论证与比较1.1、主控芯片STC89C52STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含4k可反复擦写1000多次的Flash只读程序存储器,128B的片内RAM,32位I/O口线。STC89C52具有40个引脚,4KB 片内Flash程序存储器,128B的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,6个中断源。1.2、存储芯片AT24C02AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。它是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和IO口,并且支持在线编程,进行数据实时的存取十分方便,工作电压宽(2.55.5 V)、擦写10000多次、写入速度小于10 ms、抗干扰力强、数据不易丢失、体积小等特点。1.3、液晶显示LCD16021602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0D7和RS,R/W,E三个控制端口9。液晶显示LCD1602型的接口信号说明如下表2-1所示: 表2-1 液晶显示LCD1602型的接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3V0液晶显示对比度调整端11D4Data I/O4RS寄存器选择端12D5Data I/O5R/W读写选择端(H/L)13D6Data I/O6E使能端14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极二、理论分析与计算在掌握单片机原理及80C52 C语言编程技术的基础上,基于89C52型单片机设计密码锁。本系统应具有以下功能。1、开启键盘,用户通过键盘输入密码;2、输入完成,输入密码与单片机自己保存的密码进行对比,从而判断是否正确,以及执行相对应的开门或者更改密码动作。2.1、设计的基本要求l 设计密码数字显示、键盘输入及单片机最小系统。l 在没有输入密码时,关闭继电器,点亮红色LED。l 在开锁模式下,输入正确密码,打开继电器点亮绿色LED。l 在设置模式下,输入正确密码,可以进行密码修改。l 使用AT24C02存储器保存密码,使得系统在断电情况下还能保存密码。2.2、硬件电路的概述本设计硬件主要可以分为五大部分:l 单片机最小系统l Lcd1602显示电路l 阵列键盘输入l AT24C02存储器l 开关演示电路- 41 -三、系统设计 3.1、 硬件设计原理系统的硬件部分由主控芯片、键盘输入部分、密码存储部分、复位部分、显示部分、报警部分、开锁部分、系统原理框图如图3-1:图3-1 系统原理框图3.2 、硬件设计的外围电路3.2.1、复位部分系统复位部分,单片机在接上电源,或者发生故障、死机的时候都需要复位操作。复位电路如图3-1所示的复位电路:图3-1复位电路原理图接通电源瞬间,电容C1电压很小,复位下拉电阻R10电压接近电源电压,RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST断的电压小于某一数值后,CPU脱离复位状态。为避免死机时无法可靠复位增加手动复位按键。当复位键按下后RST为高电平,CPU处于复位状态,松手后,电容C1充电,RST端电位下降,CPU脱离复位状态。3.2.2、键盘输入部分系统密码需要遥控键盘输入,而且需要提示使得输入时不易出现错误,或者误操作。而系统采用的89S51单片机有32接口,本设计中使用的这个4*4键盘不但能完成密码的输入还能作特别功能键使用,比如清空显示功能等。所以按键输入原理图如下图3-2: 图3-2 键盘接口电路3.2.3、密码存储部分系统的密码存储,采用AT24C02芯片,为一款EEPROM芯片,内含存储空间大,写入速度快。其接线如图3-3所示:图3-3 AT24C02电路接线图3.2.4、显示部分在遥控键盘输入密码时需要输入提示,本设计选择LCD1602显示器。1602有5*7或者5*11等点阵字符位组成,专门显示字母、数字、符号等,它体积小,微功耗,超薄,常用在低功耗系统中。其接线如图3-4所示:图3-3 lcd1602电路接线图3.2.4、开锁部分输入密码正确后单片机电源得电,单片机引脚P2.0为低电平,三极管达到深度饱和状态,所以9012集电极电压与发射极电压相近,继电器K3选用TX2-5V型号,当达到条件,产生吸合动作,完成开锁,而此处二极管为续流二极管,起到保护继电器左右,可选用1N4007型号。如图3-4:图3-4 开锁电路原理图四、软件设计如果说硬件部分体现了系统的各个部分的完整性,那么软件部分为系统的控制,没有了软件部分,则系统无法正常运行。不同的软件实现不同的功能,单片机所具有的智能功能要由软件来完成。软件系统和硬件系统是紧密联系、缺一不可、不可分割的。4.1、 I2C通讯子程序 本系统中89C52通过P1.3(接串行时钟线SCL)和P1.4(串行数据线SDA),来模拟标准的12C总线,实现与EEPROM 24C02进行数据交换。EEPROM24C02的器件地址为AOH。通讯子程序流程如图4-1: 发送控制字(写)发送字节地址调用单字节写入子程序发送停止信号写入完否启动I2C总线延时等待内部写入返回启动I2C总线发送控制字(写)发送字节地址重发启动信号发送控制字(读)调用单字节读取子程序读完否发送停止信号返回YYNN图4-1 a 写作流程 图4-1 b 读操作流程 4.2、开锁程序流程图只有当密码输入正确时才能开锁,程序流程如图4-2:图4-2 开锁程序流程图4.3、密码设置程序流程图修改密码主要是修改AT89S51单片机里面的密码设置程序,具体的操作是:首先,按下设置键同时需要输入一次旧密码,确认程序。然后,输入新密码一次,确认程序。再次,输入新密码一次,确认程序。最后,如果两次输入的新密码相同,则设置成功。否则,设置失败,需重新设置或放弃设计。流程如图4-4:设置程序初始化按下设置键输旧密码确认程序旧密码正确?输新密码确认程序输入次数加1次数3?报警程序NYNY返回确认程序再次输新密码两次新密码输入相同?NY设置成功图4-3 密码设置流程图4.4 、主控CPU的主程序流程 主控CPU在主程序中主要完成对各寄存器或存储器单元、定时器、各中断源及IO端口进行初始化,根据流程图调用不同的程序实现不同的功能动作。如图4-3:开始密码设定键按否键盘开锁按键否调用设定密码子程序YY系统初始化调用开锁密码子程序图4-4 CPU主程序流程图五、系统测试5.1、开锁测试5.1.1、按开锁键,输入密码5.2.2、密码输入正确,开锁密码输入错误,不开锁5.2、设置密码测试 5.2.1、按设置键,输入密码5.2.2、输入密码错误,不设置输入密码正确,输入新密码5.2.3、再次输入新密码5.2.4、两次输入密码不一致,返回重新输入 两次输入密码一致,设置输入密码为新密码六、结论本系统完成了键盘信息采集、密码判断、通过判断给出正确的指令等功能。通过这次设计,我们体会到理论知识对实践有很大的指导作用,只有在正确的理论指引下,才能设计出合乎实际需要的硬件电路。同时,我们也深深体会到,理论知识在解决实际问题时还是有点出入,使我们明白到理论与实践应该要相结合,缺一不可。而且在实践中通过具体应用所学知识解决实际问题,培养和积累了我们分析问题、解决问题的能力和经验。最重要的是在硬件设计方面有了初步的探索、特别是锻炼了我们的电子制作的动手能力,我收获颇多。通过这次毕业设计,我们懂得了一句话“办法总比困难多”,作为一名合格的大学生,应该要有迎难而上的精神。附录一、相关设计图附录二、相关设计程序1、主函数程序/*总结*1、write_24c02与read_24c02未延时,导致不能连续读取与写入数据2、测试用开发板矩阵键盘与lcd1602接口一样,不能同时使用*/#include #include #include AT24C02.H #include KEYSCAN.H#include LCD1602.Hsbit X1=P10;/继电器电路接口unsigned char password6=0x00,0x01,0x02,0x03,0x04,0x05;/存放原始及设置密码unsigned char keyinput6=0x0a,0x0a,0x0a,0x0a,0x0a,0x0a;/存放键盘输入的密码unsigned char keyinput16;/设置密码时存放键盘二次输入的密码/*函数名称:void init_password()函数功能:设置初始密码入口参数:com出口参数:*/void set_init_password()unsigned char i;for(i=0;i6;i+)write_24c02(i,passwordi);/*函数名称:void read_password()函数功能:读取密码入口参数:出口参数:*/void read_password()unsigned char i;for(i=0;i6;i+)passwordi=read_24c02(i);/*函数名称:void reset()函数功能:重置keyinput数组,重置lcd1602,重置继电器入口参数:出口参数:*/void reset()unsigned char i;/*重置继电器*/X1=1;/*重置keyinput*/for(i=0;i6;i+)keyinputi=0x0a;/*重置lcd1602*/write_com(0x01);write_com(0x80);write_string(Enter Password);write_com(0x80+0x40); write_com(0x0f);/显示开/关及光标设置(开显示,显示光标)/*函数名称:bit verify_password(unsigned char *s1,unsigned char *s2)函数功能:验证密码入口参数:unsigned char *s1,unsigned char *s2出口参数:1/0*/bit verify_password(unsigned char *s1,unsigned char *s2)unsigned char i;write_com(0x01);write_com(0x80);write_com(0x0c);for(i=0;i6;i+)if(s1i!=s2i)/密码错误return 0;return 1;/密码正确 /*函数名称:void unlocking()函数功能:密码锁开锁程序,输入密码正确则开锁入口参数:出口参数:*/void unlocking() unsigned char i,key;for(i=0;i6;)delay(300);dokey=keyscan();while(key=0x00);if(coding(key)/10=0) keyinputi=coding(key);write_dat(keyinputi+0x30);/+0x30将keyinputi值转换为lcd1602液晶字符delay(5);i+;if(coding(keyscan()=0x0c)if(verify_password(keyinput,password)/密码正确write_string(Right Password);else/密码错误write_string(Wrong Password);return;while(1)if(coding(keyscan()=0x0c)if(verify_password(keyinput,password)/密码正确write_string(Right Password);X1=0;else/密码错误write_string(Wrong Password);return; /*函数名称:void set()函数功能:密码锁设置程序,修改密码入口参数:出口参数:*/void set()unsigned char i,key;for(i=0;i6;)delay(300);dokey=keyscan();while(key=0x00);if(coding(key)/10=0) keyinputi=coding(key);write_dat(keyinputi+0x30);/+0x30将keyinputi值转换为lcd1602液晶字符delay(5);i+;if(coding(keyscan()=0x0c)if(verify_password(keyinput,password)/密码正确,设置密码write_string(New Password);else/密码错误write_string(Wrong Password);return;while(1)if(coding(keyscan()=0x0c)if(verify_password(keyinput,password)/密码正确,设置密码write_string(New Password);write_com(0xc0);write_com(0x0f);for(i=0;i6;)/第一次输入密码delay(300);dokey=keyscan();while(key=0x00);if(coding(key)/10=0) keyinputi=coding(key);write_dat(keyinputi+0x30);/+0x30将keyinputi值转换为lcd1602液晶字符delay(5);i+;while(1)if(coding(keyscan()=0xc)retry:write_com(0x01);write_com(0x80);write_string(Confirm Password);write_com(0x80+0x40);for(i=0;i6;)/第二次输入密码delay(300);dokey=keyscan();while(key=0x00);if(coding(key)/10=0) keyinput1i=coding(key);write_dat(keyinput1i+0x30);/+0x30将keyinputi值转换为lcd1602液晶字符delay(5);i+;while(1)if(coding(keyscan()=0x0c)if(verify_password(keyinput,keyinput1)/两次输入一致,向24c02存入密码 for(i=0;i6;i+)write_24c02(i,keyinput1i);write_string(Successfully);else/两次输入密码不一致write_string(Different input);delay(2000);goto retry; return; else/密码错误write_string(Wrong Password);return; /*主程序*/ void main()init_lcd1602();set_init_password();read_password();while(1)read_password();if(coding(keyscan()=0xf)/开锁reset();unlocking();if(coding(keyscan()=0xe)/设置reset();set();2、AT24C02程序#ifndef _AT24C02_H_#define _AT24C02_H_#define nop; _nop_(); _nop_(); _nop_(); _nop_();sbit SDA=P14;/24c02串行数据端sbit SCL=P13;/24c02串行时钟端/*函数名称:void start()函数功能:起始信号入口参数:出口参数:*/void start() SDA=1;SCL=1;nop;SDA=0;/*函数名称:void stop(void)函数功能:停止信号入口参数:出口参数:*/void stop() SDA=0;SCL=1;nop;SDA=1;/*函数名称:void ask()函数功能:24C02应答入口参数:出口参数:*/void ack() unsigned char i;SCL=1;nop;while(SDA=1)&(i250)i+;SCL=0;nop;/*函数名称:void norespons()函数功能:24C02非应答入口参数:出口参数:*/*void noack()SDA=1;nop;SCL=1;nop;SCL=0;*/*函数名称:void init_iic()函数功能:初始化IIC总线入口参数:出口参数:*/*void init_iic() sda=1;scl=1;nop;*/*函数名称:void transmit(unsigned char dat)函数功能:向24C02发送一字节数据入口参数:dat出口参数:*/void transmit(unsigned char dat) unsigned char i;for(i=0;i8;i+)dat=1;SCL=0;nop;SDA=CY;nop;SCL=1;nop;SCL=0;nop;SDA=1;nop;/*函数名称:void receive()函数功能:从24C02接送一字节数据入口参数:出口参数:k*/unsigned char receive() unsigned char i,k;SCL=0;nop;SDA=1;nop;for(i=0;i8;i+)SCL=1;nop;k=(k0;a-)for(b=100;b0;b-);/*函数名称:void write_24c02(unsigned char add,unsigned char dat)函数功能:向24C02某一地址写入数据入口参数:add,dat出口参数:*/void write_24c02(unsigned char add,unsigned char dat) / 写地址、数据命令函数start();transmit(0xa0);ack();transmit(add);ack();transmit(dat);ack();stop();delay(10);/*函数名称:unsigned char read_24c02(unsigned char add)函数功能:从24C02某一地址读取数据入口参数:add出口参数:*/ unsigned char read_24c02(unsigned char add)unsigned char dat;start();transmit(0xa0);ack();transmit(add);ack();start();transmit(0xa1);ack();dat=receive();stop();delay(10);return dat; #endif 3、矩阵键盘扫描程序#ifndef _KEYSCAN_H_#define _KEYSCAN_H_/*函数名称:unsigned char keyscan()函数功能:键盘扫描入口参数:出口参数:*/unsigned char keyscan()unsigned char row_code,col_code; P3=0xf0;if(P3!=0xf0)delay(10);if(P3!=0xf0)row_code=0xfe;while(row_code!=0x7f)P3=row_code;if(P3!=row_code)col_code=(P3&0xf0)|0x0f;return(col_code)|(row_code);row_code=(row_code1)|0x01);return(0x00);/*函数名称:unsigned char coding(unsigned char coding)函数功能:将按键值编码成数值入口参数:coding出口参数:num*/unsigned char coding(unsigned char coding)unsigned char num;switch(coding)case(0x18):num=0xf;break;case(0x28):num=0xe;break; case(0x48):num=0xd;break;case(0x88):num=0xc;break;case(0x14):num=0xb;break;case(0x24):num=0xa;break; case(0x44):num=0x9;break;case(0

温馨提示

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

评论

0/150

提交评论