




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计任务与要求1、能够实现密码开关锁功能。2、能更改原密码。3、系统有报警功能。4、24C02能存储密码。5、采用12864液晶显示。硬件框图于说明AT89J12864液晶显示模块矩阵键盘控制C51单片报警模块储存器模块设计的目的是开发一种功能多,电路简单,性能稳定可靠的电子密码锁,该密码锁系统通过AT89C51系列单片机对各个模块电路进行控制,并对输入信号进行分析、运算、处理, 从而控制继电器开锁与 12864准确的显示。该系统主要分5大模块:密码存储模块、矩阵键盘控制模块、报警模块、12864液晶显示模块,如图所示。信号输入模块:利用矩阵键盘按键电平的变化实现密码输入和密码更改。三.电路原
2、理图与说明. AT89C51 模块如图所示,使用的是 AT89C51.密码存储模块AT24C02是美国ATEML公司生产的低功耗 COMS型,rC总线接 口的E2PROM存储器,其内含 256x8为存储空间,具有工作电压宽 (1.8V-5.5V )、擦写次数多(大于 1000次)、写入速度快(小于 10mS)、抗干扰能力强、 数据不易丢失、体积小等特点。采用了i2c总线进行数据读写的串行器件,占用很少的资源和I/O线,而且支持在线编程,实时存取数据十分方便,如图所示。ELI muRSTFt WOO 事的1 Pft阳子 FflMQ) Ft-KMFflLWlBi 可阻,F71MA njAin 稣件
3、“ “痴A” P2I3 FIQAM 州 FftlSPJST ME 面用屿铝RarrrPSQMJflP9F.Eir加/3 口切Q3.矩阵键盘控制模块键盘可以分为独立连接式和行列式(矩阵式)两类。根据设计要求,本电路设计采用4X4行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目。矩阵式键盘又叫行列式键盘。用I/O 口线组成行列结构,按键设置在行列的交叉点上。本电对键的识别通常用逐行扫描查询法。首先判另键盘中有无按键按下,由单片机I/O 口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。方法是:向行线输 出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器
4、 A中。如果有键按下,总会有一根列线电平拉至低电平,从而使列输入不全为1。键盘中哪一个键按下,是由行线逐行置低电平后,检查列输入状态实现的,其方法是:依次给行线送低2.4所示。电平,然后查所有列线状态, 如果全为1 ,则所按下的键不在此路采用4条行线和4条列线,即可组成具有4X4个按键的键盘。其电路图如下图阵键盘实物如图。行,如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。矩0上锁未定义修改密码 JL24C02CI GTSOK A1SDA A2WP24C023.报警模块报警部分由蜂鸣器发声装置及外围电路组成,高电平发声,当输入6次密码错误时,单片机的P2.5引脚为
5、高电平,蜂鸣器发声报警,如图所示。当锁处于上锁状态时,P2.3 为高电平,LED导通发光,表示锁是闭合的。220上拉电阻是起到限流作用,主要是能让LED达到导通电压。5.12864液晶显示模块本系统采用LCD12864液晶显示,用于直观地提示用户输入开锁密码、密码信息的正误 提示、开锁信息的显示等,显示整个电子密码锁的工作状态,如下图所示。表一 12864液晶显示引脚功能表管脚号管脚名称W管教功能描述1GND0地2VDD+5V %10电源电压+5V3VO0-10液晶显示驱动电压4RSHLRS= H“DB7DB0为显示数据RS= L”表示DB7DB0为指令数据5R/WHLRW= H”数据被读至i
6、j DB77DB0RW= L DB7DB0的数据写至ij IR或DR6EHL数据线7DB0HL数据线8DB1HL数据线9DB2HL数据线10DB3HL数据线11DB4HL数据线12DB5HL数据线13DB6HL数据线14DB7HL数据线15FSBHL并串/行接口选择H并行L串行16N.CHL空脚17RSTHL复位信号18VEE-10LCD驱动负电压输入19LEDK+5背光电源20LEDA0背光四.软件设计1.主要模块流程图键盘扫描显示上锁键盘扫描提不确认首2.原程序清单与注释主模块:Main.c#include#include display.h#include 24c02.h#include
7、 password.h#include delay.h#include keyscan.h#include 12864.h#define uchar unsigned char#define uint unsigned int extern uchar flag;#define GPIODIG P0/键盘标志位/uchar data mima7=1,2,3,4,5,6,0;uchar data mima17=0,0,0,0,0,0,0;uchar data mima27=0,0,0,0,0,0,0;uchar data mima_write7=0,0,0,0,0,0,0;uchar data
8、mima_read7=0,0,0,0,0,0,0;sbit lock=P2A3;sbit speaker=P2A5;unsignedcharcodeDIG_CODE16=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x67,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/*初始密码123456,第一次下载程序后先修改密码,但不能按返回键,把 uchar data mima7=1,2,3,4,5,6,0; for(k=0;k6;k+)write_add(23+k,mimak);Delay10ms(1);去
9、掉,再次下载即可*/void main()uchar j,k,q,counter1,counter2,counter3,counter4,warn;while(1)speaker=0;counter1=0;counter2=0;counter3=0;counter4=0;lock=1;system_init();i2cinit();display_enterpassword();/*for(k=0;k6;k+)write_add(23+k,mimak);Delay10ms(1);*/for(k=0;k=0&j=9&counter10)(LCD_PutString(counter1,2,);mi
10、ma_writecounter1=0;counter1-; j=0;flag=0;if(compare_mima(mima_read,mima_write)=1)(display_open_door();delay_1ms(100);display_welcome();lock=0;for(;j!=14;)密码后,返回输入密码界面,返回键 14键(j=keyscan1();if(j=12&flag=1) / 改密码键 12(确认键10/开始输入09/修改输入11键输入完毕,比较密码上锁后或刚开锁和改完display_old_password();clear_mima(mima_write);j
11、=0;for(;j!=10;)(j=keyscan1();if(j=0&j=9&counter20)(LCD_PutString(counter2,2,);mima_writecounter2=0;counter2-; if(compare_mima(mima_read,mima_write)=1)比较密码( display_new_password(); clear_mima(mima1);delay_1ms(50);clear_mima(mima2);delay_1ms(50);j=0;for(;j!=10;)开始输入新的密(j=keyscan1();if(j=0&j=9&counter3
12、0) (LCD_PutString(counter3,2, );mima_writecounter3=0;counter3-;) ) display_enter_again(); j=0; for(;j!=10;)确认输入新密码 j=keyscan1(); if(j=0&j=9&counter40) LCD_PutString(counter4,2, ); mima_writecounter4=0;counter4-; ) ) ) j=0; delay_1ms(100); if(compare_mima(mima1,mima2)=1)比较新密码新密码错误 display_modify_succ
13、ess(); delay_1ms(1000); for(k=0;k5)for(q=0;q5;q+)speaker=1;Delay10ms(50);speaker=0;Delay10ms(50);液晶显示模块:12864.C#include #include ”12864.h”#include delay.hsbit RW=P2A6;sbit E=P2A7;/*/函数功能:延时函数/*/ void Delay(uint tt) while(tt-); /*/函数功能:写入命令/*/ void Lcd_WriteCmd(uchar LData)uchar i;E=0;RW=1;for(i=0;i5
14、;i+)(E=1;E=0;)RW=0;E=1;E=0;RW=0;E=1;E=0;RW=0;E=1;E=0;for(i=0;i4;i+)(RW=(bit)(LData&(0 x80);E=1;E=0;LData=LData1;)RW=0;for(i=0;i4;i+)(E=1;E=0;)Delay(80);for(i=0;i4;i+)(RW=(bit)(LData&(0 x80);E=1;E=0;LData=LData1;)RW=0;for(i=0;i4;i+)(E=1;E=0;) /*/函数功能:将数据写入液晶模块/入口参数:y(为字符常量)/*/ void Lcd_WriteData(ucha
15、r LData) (uchar i;E=0;RW=1;for(i=0;i5;i+)(E=1;E=0;)RW=0;E=1;E=0;RW=1;E=1;E=0;RW=0;E=1;E=0; for(i=0;i4;i+) (RW=(bit)(LData&(0 x80);E=1;E=0;LData=LData1;RW=0;for(i=0;i4;i+)(E=1;E=0;Delay(50);for(i=0;i4;i+)(RW=(bit)(LData&(0 x80);E=1;E=0;LData=LData1;RW=0;for(i=0;i0)(Lcd_WriteData(*s);s+;delay_50us(10)
16、;void display_data(uchar x,uchar y,uint num)/ 显示数字(uchar a;switch(y)(Lcd_WriteCmd(0 x80+x);break;Lcd_WriteCmd(0 x90+x);break;Lcd_WriteCmd(0 x88+x);break;Lcd_WriteCmd(0 x98+x);break;default:break;a=num%10;/个位Lcd_WriteData(a+0 x30);存储器模块:24c02.c#include#include 24c02.hsbit sda=P2A0;sbit scl=P2A1;void
17、i2cdelay() ; /*i2c开始信号*/void start() 开始信号sda=1;i2cdelay();scl=1;i2cdelay();sda=0;i2cdelay();)/*i2c停止彳t号*/void stop() / 停止(sda=0;i2cdelay();scl=1;i2cdelay();sda=1;i2cdelay();)/*i2c应答函数*/void respons() 应答(uchar i;scl=1;i2cdelay();while(sda=1)&(i250)i+;scl=0;i2cdelay();)/*i2c初始化函数*/void i2cinit()(sda=1
18、;i2cdelay();scl=1;i2cdelay();)/*存储字节函数 传递参数:uchar型数据*/void write_byte(uchar date)(uchar i,temp;temp=date;for(i=0;i8;i+) (temp=temp1;scl=0;i2cdelay();sda=CY;i2cdelay();scl=1;i2cdelay();/ scl=0;/ delay();)scl=0;i2cdelay();sda=1;i2cdelay();)/*读取字节函数传递参数:无*/uchar read_byte() uchar i,k;scl=0;i2cdelay();s
19、da=1;i2cdelay();for(i=0;i8;i+)scl=1;i2cdelay();k=(k1)|sda;scl=0;i2cdelay();)return k;)*/*存储数据函数 传递参数: 地址,uchar型数据 void write_add(uchar address,uchar date)start();write_byte(0 xa0);respons();write_byte(address);respons();write_byte(date);respons(); stop();)/*读取数据函数传递参数:地址*/uchar read_add(uchar addres
20、s) (uchar date;start();write_byte(0 xa0);respons();write_byte(address);respons(); start();write_byte(0 xa1);respons();date=read_byte(); stop();return date;)#include #include Delay.h#include keyscan.h#define GPIO P0 uchar flag;矩阵键盘扫描keyscan.cuchar keyscan1() (uchar temp,key1;flag=0;GPIO = 0 xfe;temp
21、= GPIO;temp = temp&0 xf0; if(temp!=0 xf0) (去抖动delay_1ms(10);temp = GPIO;temp = temp&0 xf0; if(temp!=0 xf0) (flag=1;temp = GPIO; switch(temp)case 0 xee: keyl = 0;break;case 0 xde: keyl = 1;break;case 0 xbe: keyl = 2;break;case 0 x7e: keyl = 3;break;)while(temp!=0 xf0)(temp = GPIO;temp = temp&0 xf0;)G
22、PIO = 0 xfd;temp = GPIO;temp = temp&0 xf0;if(temp!=0 xf0)(delay_1ms(10);temp = GPIO;temp = temp&0 xf0; if(temp!=0 xf0)(flag=1;temp = GPIO; switch(temp) (case 0 xed: keyl = 4;break;case 0 xdd: keyl = 5;break;case 0 xbd: keyl = 6;break;case 0 x7d: keyl = 7;break;)while(temp!=0 xf0)(temp = GPIO;temp = temp&0 xf0; )GPIO = 0 xfb;temp = GPIO;temp = temp&0 xf0;if(temp!=0 xf0)(delay_1ms(10);temp = GPIO;temp = temp&0 xf0;if(temp!=0 xf0)(flag=1;temp = GPIO;switch(temp)(case 0 xeb: key1 = 8;break;case 0 xdb: key1 = 9;break;case 0 xbb: key1 = 10;break; case 0 x7b: key1 = 11;break;while(temp!=0 xf0)(tem
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件即服务(SaaS)开发及应用实施方案
- 湖北省武汉市部分学校2024-2025学年上学期12月九年级物理试卷(含答案)
- 中央空调安装项目施工协议
- 农业产业链升级方案指南
- 政建筑工程施工合同
- 承包转让合同与承包食堂合同
- 吴兴区古建筑修缮施工方案
- 黑龙江塑胶地板施工方案
- 2025年二建公共课程试题及答案
- 1.5 直角三角形(1) 直角三角形的性质与判定-八年级数学下册10分钟课前预习练(北师大版)(原卷版)
- 人教鄂教版-科学-三年级下册-知识点
- 2024年北师大版五年级数学下册第二单元长方体(一)检测卷(提高卷)含答案
- 二年级上册心理健康教学设计-第四课 找朋友|辽大版
- JTG-D82-2009公路交通标志和标线设置规范
- 生物农药与生物防治学智慧树知到期末考试答案章节答案2024年浙江农林大学
- 四宫格儿童数独练习60题
- 淋巴结结核的个案护理
- 2024年内蒙古国有资本运营有限公司招聘笔试冲刺题(带答案解析)
- 三年级乘法口算500题
- 小班《认识正方形》课件
- 海洋农场与海洋牧场
评论
0/150
提交评论