基于AT24C02电子密码锁的设计
基于单片机的电子密码锁的设计27...
基于单片机电子密码锁的设计摘要:随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。
由于传统机械锁存在构造简单,钥匙互开容易等不安全因素;使得家庭的安全性与保密性降低。
电子锁由于其保密性高,使用灵活性好,安全系数高,显得日趋重要。
本设计以单片机A T89C51与低功耗CMOS型E²PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD显示、报警、开锁等电路模块。
它具有以下的功能:输入密码正确,实现开锁;输入密码错误三次以上,报警;可以根据用户需求更改密码。
本设计用用Keil软件进行编译,C51语言编写主控芯片控制程序与EEPROMAT24C02读写程序相结合,设计出一款可以更改密码,并且具有报警功能的电子密码控制系统。
软件设计采用自上而下的模块化设计思想,增强系统的可扩展性和运行的稳定性,使系统朝着分布式、小型化方向发展。
本密码锁具有一定的推广价值。
关键词:单片机;A T89C51;密码锁;报警;液晶显示Microcontroller-based Design Of Electronic LocksAbstract: With the improvement of social science and the living level of people, how to realize the family anti-theft,this problem also become particularly prominent. Because of the traditional mechanical lock has e many unsafe factors,such as simple structure, easy open; Reduces the security and privacy of family. Electronic lock is increasingly important,because of its high confidentiality, use good flexibility, high safety coefficient.This system by theAT89C51 with low power CMOS based E ² PROM AT24C02 as the master chip and the data memory unit, combined with the external keyboard, LCD display, alarm, unlock and other circuit modules. It has the following features: enter the password correctly under the premise of unlocking; Input wrong password more than three times case the alarm; password can be changed according to user needs.This design use Keil software to compile,Master in C language control program and EEPROM AT24C02 chip to read and write process are combined.designed a number you can change the password, the password with an electronic alarm control system.The software design adoption the design thought from top to bottom, strengthen the system and can expand the stability and circulate,to make the system toward wear distribute type,turn to the direction development of small.The lock has some promotional value.Keywords: singlechip; AT89C51;cryptogram lock;alarm; LCD目录摘要 (i)Abstract (i)目录 (iii)1绪论 (1)1.1单片机的应用领域 (2)1.1.1智能仪器仪表 (2)1.1.2工业控制 (2)1.1.3家用电器 (2)1.1.4计算机网络和通信 (2)1.1.5医用设备 (2)1.1.6大型电器 (3)1.2课题的目的和意义 (3)1.2.1选题目的 (3)1.2.2选题意义 (3)1.3国内外研究现状与水平 (3)1.4发展趋势 (4)1.5本设计特点 (4)2分析 (5)2.1方案选择 (5)2.2总体设计思路 (5)2.2.1系统实现功能 (5)2.2.2系统运行过程 (6)2.2.3系统总设计结构图 (6)2.3主要元器件介绍 (7)2.3.1AT89C51介绍 (7)2.3.2LCD1602显示器介绍 (9)2.3.3存储芯片AT24C02介绍 (10)2.3.4I2C总线介绍 (11)2.3.5矩阵键盘介绍 (13)3设计 (14)3.1硬件设计 (14)3.1.1单片机的晶振、复位电路 (14)3.1.2键盘输入电路 (15)3.1.3显示电路 (16)3.1.4存储电路 (17)3.1.5报警电路 (17)3.1.6开锁电路 (18)3.1.7生成电路图 (18)3.1.8元器件采购 (19)3.2软件设计 (19)3.2.1主程序 (19)3.2.2键盘扫描程序 (23)3.2.3密码修改程序 (26)3.2.4LCD显示程序 (28)3.2.5延时程序 (30)3.2.6中断程序 (31)3.3调试程序 (32)3.3.1Proeus 软件介绍 (32)3.3.2Keil C51软件介绍 (32)3.3.3Proteus 软件与Keil uVision 的结合 (32)4结论 (34)致谢 (2)参考文献 (3)1 绪论随着新技术的不断开发与应用,日常生活中住宅的安全防范以及一些个人资料的保存等一系列安全防盗问题已成为社会普遍关注的问题。
利用数字电路实现电子密码锁-毕业设计
利用数字电路实现电子密码锁学生:XXX 指导老师:XXX内容摘要:本数字密码锁采用单片机AT89S52为主控芯片,由EEPROM存储密码。
硬件部分包括主控制系统、人机交互界面以及输出系统三大部分。
主控制系统中主控制芯片使用了AT89S52单片机,该单片机性能优良,能满足一般的普通应用;EEPROM采用AT24C02芯片,掉电后可以存储密码,从而保证了系统的安全性。
人机交互通道部分采用了4×4矩阵键盘输入以及LCD1602标准字符型液晶显示。
输出系统部分包括驱动开锁电路和报警电路;其中,在本系统设计中,驱动开锁电路用发光二极管表示,而报警电路则使用蜂鸣器。
本系统中使用的AT24C02芯片是一个带有I2C总线接口的EEPROM存储器。
I2C总线是一种双向二线制总线,它的结构简单,可靠性和抗干扰性能好。
I2C总线结构很简单,只有两条线,包括一条数据线(SDA)和一条串行时钟线(SCL)。
具有I2C接口的器件可以通过这两根线接到总线上,进行相互之间的信息传递。
本数字密码锁的功能为:密码位数为8位,可选值为0~9,从而保证足够的锁体强度;用户可以自行设定和修改密码;防止密码被盗,输入密码错误次数超过3次则报警;友好的人机界面;输入正确的密码后,驱动开锁电路。
软件部分应用单片机C语言实现了本设计的全部控制功能。
C语言编译方便,易读性好,且移植性方便,能够满足实现本系统的功能要求。
在设计过程中,给出了本系统C语言编程的原理和流程图。
本数字密码锁系统稳定性好,设计人性化,由于使用单片机控制并有记忆模块,功能齐全可靠,并有很好的扩展性,而且成本低廉,具有良好的发展前景。
关键词:数字密码锁 AT24C02芯片安全性Electronic combination lockAbstract:Using the digital circuit realize electronic combination lock This digital locks USES the monolithic integrated circuit AT89S52 as the controller chip, by EEPROM memory password. Hardware including master control system, man-machine interface and output system of three.The Lord control system used in the control chip AT89S52 SCM, this single chip good performance, can satisfy the general common application; The AT24C02 chip EEPROM, after power off can be stored password, so as to ensure the security of the system. Man-machine interactive channel part adopts the 4 x 4 matrix keyboard input and LCD1602 standard character type LCD display. The output of system including drive circuit and alarm lock circuit; Which, in the system design, drive the lock circuit using light-emitting diodes said, and alarm circuit is using a buzzer.The system used AT24C02 chip is a with the I2C bus interface EEPROM memory. The I2C bus is a two-way two wire bus, its simple structure, reliability and anti-interference capability. The I2C bus structure is simple, only two lines, including a data line (SDA) and a serial clock line (SCL). Has the I2C devices through this interface to two lines on the bus, the mutual information transfer.This digital locks function for: password digits for eight, optional value is 0 ~ 9, so as to ensure enough lock body strength; The user can set and modify the password; To prevent the password is stolen, the input password mistake number more than three times the alarm; Friendly human-machine interface; To enter the correct password, drive the lock circuit.Application software of single chip microcomputer C language realized this design of all control function. C compiler convenient, easy to read the gender is good, and easy portability, and can meet the requirement of system function realization. In the design process are given, and the system of the C programming language principle and flow chart.This digital locks system stability, humanized design, because use asingle-chip microcomputer control and a memory module, complete function and reliable, and have a good scalability, and the cost is low, have good development prospect.Keywords: Electronic combination lock AT24C02 chip safety目录前言 (1)1 系统的硬件设计 (2)1.1 硬件的总体结构和原理 (2)1.1.1 硬件系统的总体结构图 (2)1.1.2 硬件系统组成 (2)1.1.3 系统的可能性分析 (3)1.2 单片机AT89S51简介 (4)1.2.1 主要性能 (4)1.2.2 引脚功能描述 (5)1.3 AT24C02简介 (7)1.3.1 功能描述 (7)1.3.2 管脚描述 (7)1.3.3 I2C总线协议 (8)1.4 LCD1602介绍 (8)1.4.1 引脚描述 (9)1.4.2 LCDI602控制指令 (9)1.4.3 LCDI602读写控制时序 (11)1.5 4×4矩阵键盘 (11)1.6 复位电路 (12)1.7 振荡电路 (12)1.8 发光二极管LED电路 (13)1.9 报警电路 (13)1.10 电源输入电路 (14)1.11 使用到的元器件列表 (15)2 软件程序设计 (15)2.1 编译器Keil uVision2简介 (16)2.2 软件总设计流程图 (16)2.3 具体功能软件实现 (17)2.3.1 4×4矩阵键盘扫描程序 (17)2.3.2 显示程序 (19)2.3.3 时钟运行子程序 (19)2.3.4 时钟时、分修改子程序 (20)2.3.5 掉电存储服务程序 (21)2.3.7 密码修改子程序 (23)3 结束语 (24)附录1:PCB原理图 (26)附录2:仿真原理图 (27)附录3:单片机硬件实物图 (28)参考文献 (29)利用数字电路实现电子密码锁前言随着社会物质财富的日益增长,安全防盗已成为社会问题。
m16基于AT24C02的密码锁(1602)
//rs----PD4//rw----PD5//en----PD6//data---PORTB//SDA---PC1//SCL---PC0//beep--PA6//开锁---PB7//开锁状态----PB5//如果把uchar const initpassword[6]={0,0,0,0,0,0};改为_flash uchar initpassword[6]={0,0,0,0,0,0}; //则出现这错误found `unsigned' expecting `;'可我没找到错误在哪???#include <iom16v.h>#include<macros.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define uchar unsigned char#define uint unsigned int#define w 6 //定义密码位数uchar operation=0; //操作标志位uchar pass=0; //密码正确标志uchar ReInputEn=0; //重置输入充许标志uchar s3_keydown=0; //3秒按键标志位uchar key_disable=0; //锁定键盘标志uchar countt0,second; //t1中断计数器,秒计数器//void Delay5Ms(void);uchar InputData[6]; //输入密码暂存区uchar CurrentPassword[6]={1,3,1,4,2,0}; //当前密码值uchar TempPassword[6];uchar N=0; //密码输入位数记数uchar ErrorCont; //错误次数计数uchar CorrectCont; //正确输入计数uchar ReInputCont; //重新输入计数#pragma data:codeuchar const a[]={0xFE,0xFD,0xFB,0xF7}; //控盘扫描控制表uchar const start_line[] = {"password: "};uchar const name[] = {"===Coded Lock==="}; //显示名称uchar const Correct[] = {" correct "}; //输入正确uchar const Error[] = {" error "}; //输入错误uchar const codepass[] = {" pass "};uchar const LockOpen[] = {" open "}; //OPENuchar const SetNew[] = {"SetNewWordEnable"};uchar const Input[] = {"input: "}; //INPUTuchar const ResetOK[] = {"ResetPasswordOK "};uchar const initword[] = {"Init password..."};uchar const Er_try[] = {"error,try again!"};uchar const again[] = {"input again "};uchar const initpassword[6]={0,0,0,0,0,0};/************************************************************************************************* **/void port_init(){DDRA|=BIT(6);PORTA|=BIT(6);DDRB=0xFF;PORTB=0xFF;DDRC=0xFF;PORTC=0xFF;}/***********************************************************************************************/ void segg()//关数码显示管函数{DDRA|=BIT(PA3); //PA3设置为输出状态DDRA|=BIT(PA4); //PA4设置为输出状态DDRB=0xff; //PB口设置为输出状态PORTB=0xff; //发送模码PORTA|=BIT(PA3); //PA3输出高电平,DU拉高PORTA&=~BIT(PA3); //PA3输出低电平,DU拉低,段选锁存PORTB=0xff; //发送为选关掉数码管显示PORTA|=BIT(PA4); //PA4输出高电平,WE拉高PORTA&=~BIT(PA4); //PA4输出低电平,WE拉低,位选锁存DDRA|=BIT(PA2); //PA2设置为输出状态用于LED流水灯控制IO口PORTA&=~BIT(PA2); //PA2输出低电平,DU拉低,段选LED流水灯锁存}/****************************************5ms延时*************************************/void Delay5Ms(void){uint TempCyc = 5552;while(TempCyc--);}/****************************************400ms延时*************************************/void Delay400Ms(void){uchar TempCycA = 5;uint TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}/****************************************24C02****************************************/void mDelay(uint t) //延时{uchar i;while(t--){for(i=0;i<125;i++){;}}}/*******************************************************************************************/ void Nop(void) //空操作{_nop_();_nop_();_nop_();_nop_();}/*****************************************起始条件*****************************************/ void Start(void){//Sda=1;PORTC|=BIT(1);////Scl=1;PORTC|=BIT(0);//Nop();//Sda=0;PORTC&=~BIT(1);//Nop();}/*****************************************停止条件*****************************************/ void Stop(void){//Sda=0;PORTC&=~BIT(1);////Scl=1;PORTC|=BIT(0);//Nop();//Sda=1;PORTC|=BIT(1);//Nop();}/*****************************************应答位*****************************************/ void Ack(void){//Sda=0;PORTC&=~BIT(1);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//Scl=0;PORTC&=~BIT(0);//}/*****************************************反向应答位*****************************************/ void NoAck(void){//Sda=1;PORTC|=BIT(1);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//Scl=0;PORTC&=~BIT(0);//}/****************************发送数据子程序,Data为要求发送的数据***********************/ void Send(uchar Data){uchar BitCounter=8;uchar temp;do{temp=Data;//Scl=0;PORTC&=~BIT(0);//Nop();if((temp&0x80)==0x80)//Sda=1;PORTC|=BIT(1);else//Sda=0;PORTC&=~BIT(1);////Scl=1;PORTC|=BIT(0);//temp=Data<<1;Data=temp;BitCounter--;}while(BitCounter);//Scl=0;PORTC&=~BIT(0);//}/********************读一字节的数据,并返回该字节值************************************/ uchar Read(void){uchar temp=0;uchar temp1=0;uchar BitCounter=8;//Sda=1;PORTC|=BIT(1);//do{//Scl=0;PORTC&=~BIT(0);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//if(Sda)if(PORTC&0xF2)/////////////temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1){temp1=temp<<1;temp=temp1;}BitCounter--;}while(BitCounter);return(temp);}/****************************************************************************************/ void WrToROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}/********************************************************************************/void RdFromROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Start();Send(0xa1);Ack();*(PData+i)=Read();//Scl=0;PORTC&=~BIT(0);NoAck();Stop();}}//**********************************LCD1602*********************************************//#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//*********************************************************************************************// void delay(uint xms)//延时函数,有参函数{uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}/**********************************写指令****************************************/ write_1602com(uchar com)//****液晶写入指令函数****{PORTD&=~BIT(4);////数据/指令选择置为指令PORTD&=~BIT(5);////读写选择置为写PORTB=com;//送入数据delay(1);PORTD|=BIT(6);//拉高使能端,为制造有效的下降沿做准备delay(1);PORTD&=~BIT(6);//en由高变低,产生下降沿,液晶执行命令}/**********************写数据*****************************************************/ write_1602dat(uchar dat)//***液晶写入数据函数****{PORTD|=BIT(4);//////数据/指令选择置为数据PORTD&=~BIT(5);////读写选择置为写PORTB=dat;//送入数据delay(1);PORTD|=BIT(6);////en置高电平,为制造下降沿做准备delay(1);PORTD&=~BIT(6);////en由高变低,产生下降沿,液晶执行命令}/************************************初始化***************************************/ void lcd_init(void){write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,光标自动右移write_1602com(0x01);//清显示}/*******************************************将按键值编码为数值*************************/ uchar coding(uchar m){uchar k;switch(m){case (0x18): k=1;break;case (0x28): k=2;break;case (0x48): k=3;break;case (0x88): k='A';break;case (0x14): k=4;break;case (0x24): k=5;break;case (0x44): k=6;break;case (0x84): k='B';break;case (0x12): k=7;break;case (0x22): k=8;break;case (0x42): k=9;break;case (0x82): k='C';break;case (0x11): k='*';break;case (0x21): k=0;break;case (0x41): k='#';break;case (0x81): k='D';break;}return(k);}/******************************按键检测并返回按键值*************************************/ uchar keynum(void){uchar row,col,i;DDRD=0x0F;PORTD=0xF0;//KeyRead=PIND; //读取键盘结果//KeyRead&=0x0f; //屏蔽高四位//if((P1&0xf0)!=0xf0)if((PIND&0xf0)!=0xf0){Delay5Ms();Delay5Ms();if((PIND&0xf0)!=0xf0){row=PIND^0xf0; //确定行线i=0;PORTD=a[i];////精确定位while(i<4){if((PIND&0xf0)!=0xf0){col=~(PIND&0xff); //确定列线break; //已定位后提前退出}else{i++;PORTD=a[i];}}}else{return 0;}while((PORTD&0xf0)!=0xf0);return (row|col); //行线与列线组合后返回}else return 0; //无键按下时返回0}/********************************一声提示音,表示有效输入*************************************/ void OneAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*********************************二声提示音,表示操作成功*********************************/void TwoAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*******************************三声提示音,表示错误************************************/ void ThreeAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*****************显示输入的N个数字,用H代替以便隐藏*************************************/ void DisplayOne(void){// DisplayOneChar(9+N,1,'*');write_1602com(yi+5+N);write_1602dat('*');}/***********************************显示提示输入**************************************/ void DisplayChar(void){unsigned char i;if(pass==1){//DisplayListChar(0,1,LockOpen);write_1602com(er);for(i=0;i<16;i++){write_1602dat(LockOpen[i]);}}else{if(N==0){//DisplayListChar(0,1,Error);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Error[i]);}}else{//DisplayListChar(0,1,start_line);write_1602com(er);for(i=0;i<16;i++){write_1602dat(start_line[i]);}}}}/**************************************************************************************/ void DisplayInput(void){uchar i;if(CorrectCont==1){//DisplayListChar(0,0,Input);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Input[i]);}}}/******************************************重置密码*******************************/ void ResetPassword(void){uchar i;uchar j;if(pass==0){pass=0;DisplayChar();ThreeAlam();}else{if(ReInputEn==1){if(N==6){ReInputCont++;if(ReInputCont==2){for(i=0;i<6;){if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比i++;else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示pass=0;ReInputEn=0; //关闭重置功能,ReInputCont=0;DisplayChar();break;}}if(i==6){//DisplayListChar(0,1,ResetOK);write_1602com(er);for(j=0;j<16;j++){write_1602dat(ResetOK[j]);}TwoAlam(); //操作成功提示WrToROM(TempPassword,0,6); //将新密码写入24C02存储///////// ReInputEn=0;}ReInputCont=0;CorrectCont=0;}else{OneAlam();//DisplayListChar(0, 1, again); //显示再次输入一次write_1602com(er);for(j=0;j<16;j++){write_1602dat(again[j]);}for(i=0;i<6;i++){TempPassword[i]=InputData[i]; //将第一次输入的数据暂存起来}}N=0; //输入数据位数计数器清零}}}}/****************************输入密码错误超过三过,报警并锁死键盘********************************/ void Alam_KeyUnable(void){PORTD=0x00;//{PORTA^=BIT(6);//Delay5Ms();}}/*************************************取消所有操作***********************/void Cancel(void){uchar i;uchar j;//DisplayListChar(0, 1, start_line);write_1602com(er);for(j=0;j<16;j++){write_1602dat(start_line[j]);}TwoAlam(); //提示音for(i=0;i<6;i++){InputData[i]=0;}PORTB|=BIT(7);//关闭锁PORTA|=BIT(6);//报警关operation=0; //操作标志位清零pass=0; //密码正确标志清零ReInputEn=0; //重置输入充许标志清零ErrorCont=0; //密码错误输入次数清零CorrectCont=0; //密码正确输入次数清零ReInputCont=0; //重置密码输入次数清零PORTB|=BIT(5);s3_keydown=0;key_disable=0;N=0; //输入位数计数器清零}/*******************************确认键,并通过相应标志位执行相应功能************************/ void Ensure(void){uchar i,j;RdFromROM(CurrentPassword,0,6); //从24C02里读出存储密码if(N==6){if(ReInputEn==0) //重置密码功能未开启{for(i=0;i<6;){if(CurrentPassword[i]==InputData[i]){i++;}else{ErrorCont++;if(ErrorCont==3) //错误输入计数达三次时,报警并锁定键盘{write_1602com(er);for(i=0;i<16;i++){write_1602dat(Error[i]);}doAlam_KeyUnable();while(1);}else{TIMSK|=BIT(2); //开启定时key_disable=1; //锁定键盘pass=0;break;}}}if(i==6){CorrectCont++;if(CorrectCont==1) //正确输入计数,当只有一次正确输入时,开锁,{//DisplayListChar(0,1,LockOpen);write_1602com(er);for(j=0;j<16;j++){write_1602dat(LockOpen[j]);}TwoAlam(); //操作成功提示音PORTB&=~BIT(7);//开锁///////////////////////////////////pass=1; //置正确标志位TIMSK|=BIT(2); //开启定时/////////////////////////PORTB&=~BIT(5);//开锁指示灯亮//////////////////////////////for(j=0;j<6;j++) //将输入清除{InputData[i]=0;}}else//当两次正确输入时,开启重置密码功能{//DisplayListChar(0,1,SetNew);write_1602com(er);for(j=0;j<16;j++){write_1602dat(SetNew[j]);}TwoAlam(); //操作成功提示ReInputEn=1; //允许重置密码输入CorrectCont=0; //正确计数器清零}}else//============当第一次使用或忘记密码时可以用131420对其密码初始化{if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&& (InputData[5]==0)){WrToROM(initpassword,0,6); //强制将初始密码写入24C02存储//DisplayListChar(0,1,initword); //显示初始化密码write_1602com(er);for(j=0;j<16;j++){write_1602dat(initword[j]);}TwoAlam();Delay400Ms();TwoAlam();N=0;}else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示音pass=0;}}}else//当已经开启重置密码功能时,而按下开锁键,{//DisplayListChar(0,1,Er_try);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Er_try[j]);}ThreeAlam();}}else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示音pass=0;}N=0; //将输入数据计数器清零,为下一次输入作准备operation=1;}/********************************************************************************************/ void main(void){uchar KEY,NUM;uchar i,j;segg();port_init();Delay400Ms(); //启动等待,等LCM讲入工作状态lcd_init(); //LCD初始化write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示PORTD=0xFF;TCCR1B=0X05;//1024分频//5msTCNT1H=0XFF;//TCNT1L=0XC5;//TIMSK|=BIT(2);SREG|=BIT(7);for(i=0;i<16;i++){write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分}write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示for(i=0;i<16;i++){write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号}write_1602com(er+9); //设置光标位置write_1602com(0x0f); //设置光标为闪烁Delay5Ms(); //延时片刻(可不要)N=0; //初始化数据输入位数while(1){if(key_disable==1)Alam_KeyUnable();elsePORTA|=BIT(6); //关报警KEY=keynum();if(KEY!=0){if(key_disable==1){second=0;}else{NUM=coding(KEY);{switch(NUM){case ('A'): ; break;case ('B'): ; break;case ('C'): ; break;case ('D'): ResetPassword(); break; //重新设置密码case ('*'): Cancel(); break; //取消当前输入case ('#'): Ensure(); break; //确认键,default:{//DisplayListChar(0,1,Input);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Input[i]);}operation=0;if(N<6) //当输入的密码少于6位时,接受输入并保存,大于6位时则无效。
基于单片机的四位电子密码锁的设计
#define w 4//定义密码位数
sbit lcd1602_rs=P2^7;
sbit lcd1602_rw=P2^6;
sbห้องสมุดไป่ตู้t lcd1602_en=P2^5;
sbit wxbz=P3^6;
sbit Scl=P3^4;//24C02串行时钟
(1)密码输入、显示及开锁功能;
(2)密码重置(两次输入旧密码正确后,再两次输入新密码无误则修改成功);
(3)上锁功能;
(4)声光提示(蜂鸣器和发光二极管);
(5)错误报警、输入次数任意更改(0-9次);
(6)液晶屏省电/正常模式任意切换;
(7)产生随机密码并可一键保存;
(8)输入密码的显示/隐藏任意切换;
第2章 硬件电路设计
图2-1-1 AT89S52最小工作系统
1、时钟电路:
单片机工作的时间基准,决定单片机工作速度。时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。AT89S51单片机时钟频率范围:0—33MHz。本设计晶振选择频率为12MHZ,电容选择30pF如图(3-4)。经计算得单片机工作胡机器周期为:
电子密码锁的设计与总结报告
摘要:
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。
本次设计使用ATMEL公司的AT89S51单片机为芯片主体,采用AT24C02为掉电存储器的芯片。这种芯片稳定性高,成本低,还能扩展很多功能。如红外探测技术,指纹识别技术,语音识别技术,图像识别技术等。这些扩展的技术国外发展的比较迅速,有些已经投入使用。本设计没有采用这些扩展。其主要具有如下功能:
单片机电子密码锁课程设计
单片机技术及应用综合训练(设计报告)前言随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤为突出。
在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用显得日趋重要。
本文从经济实用的角度出发,系统由STC89C52与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD显示、报警、开锁等电路模块。
它能完成以下功能:正确输入密码前提下,开锁;错误输入密码情况下,报警;密码可以根据用户需要更改。
用C语言编写的主控芯片控制程序与EEPROM AT24C02读写程序相结合,并用Keil软件进行编译,设计了一款可以多次更改密码,具有报警功能的电子密码控制系统。
本密码锁具有设计方法合理,简单易行,成本低,安全实用,保密性强,灵活性高等特点,具有一定的推广价值。
关键词:电子密码锁、报警、液晶显示目录一、选题要求 (1)二、硬件电路设计 (1)2.1 51单片机 (2)2.2 键盘电路 (2)2.3 液晶显示电路 (2)2.4 警报电路 (3)2.5 密码储存电路 (3)2.6 晶振、复位及关锁 (3)三、软件设计 (4)四、软硬件调试结果 (9)4.1 电路总原理图 (9)4.2 调试结果 (10)五、总结 (11)一、选题要求本文从经济实用的角度出发,设计采用单片机为主控芯片,结合外围电路,组成电子密码控制系统,密码锁共6位密码,每位的取值范围为0~9,用户可以自行设定和修改密码。
用户想要打开锁,必先通过提供的键盘输入正确的密码才可以,密码输入错误有提示,为了提高安全性,当密码输入错误三次将报警,期间输入密码无效,以防窃贼多次试探密码。
6位密码同时输入正确,锁才能打开。
锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的,因此保密性强、灵活性高。
其特点如下:1) 保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零。
密码锁课程设计文档
1 密码锁设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P .”, 进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
1.2 设计课题总体方案介绍及工作原理说明(1)原始密码的设定,此密码是固定在程序存储器ROM 中,假设预设的密码为“88888888”共8位密码。
(2)密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入八位密码后,自动结束输入,并判断其正确性 。
(3)密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第十一个按键,则进入修改密码。
(4)密码修改:可以任意输入“0-9”中的八位数字作为密码,密码输入时处于保密显示状态,修改密码必修两次输入密码,八位密码输入结束确认后显示密码已保存。
电源.下载电路复位电路行列式键盘电路单片机晶振电路液晶显示电路存储电路图1 设计总电路框图2 密码锁硬件系统设计2.1 设计课题硬件系统各模块功能简单介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、行列式键盘、液晶12864显示和AT24C02掉电保护系统组成,系统能完成开锁、错误显示、密码修改、掉电保护等功能,设计硬件系统如下: (1)单片机系统:此次课程设计采用以AT89S52单片机为核心的控制方案,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
本次设计用单片机的P1口与行列式键盘相连,作为密码的输入。
P0口与LCD12864相连,来控制液晶显示屏。
(2)行列式键盘接口电路:此次课程设计采用行列式键盘,将按键的一端相连后接至单片机的P1口的低四位,把按键的另一端相连接到单片机P1口的高四位,用扫描法进行键盘扫描。
基于单片机的电子密码锁设计
基于单片机的电子密码锁设计基于单片机的电子密码锁设计单片机是典型的嵌入式微控制器,由运算器,控制器,存储器,输入输出设备等构成,相当于一个微型的计算机。
下面是小编为你带来的基于单片机的电子密码锁设计,欢迎阅读。
摘要:随着电子技术的发展,人们对锁的需求越来越多,所以各种各样的电子锁层出不穷,未来电子密码锁的市场将非常广阔。
这次设计是以STC89C51单片机为技术控制核心,显示部分选用了1602液晶显示,密码储存模块采用AT24C02芯片,结合设计的外围报警模块,矩阵键盘输入模块,继电器模块完成了电子密码锁的设计。
关键词:密码锁;单片机;液晶显示一、引言(一)设计的背景和研究意义。
自从人类脱离原始社会、开始有私有财产的概念以来,锁就成为了人们生活中的重要组成部分。
随着科技的发展,电子密码锁被越来越多的人所接受,它已经在生活中随处可见了. 电子密码锁拥有太多机械锁完全无法相比的优点。
它不但能完成“锁”自身的功用,还可以具有记忆、辨识、警报等特别的作用。
因为电子密码锁的更安全性、更便宜、易操作,越来越多人开始关注这一领域。
随着单片机的迅速发展,其应用领域越来越广泛,将其应用到保密和安全方面是相当可靠,相当有意义的。
基于单片机的电子密码锁的研究在保护财产和人身安全方面可以给人们带来更多更好的选择(二)设计的主要环节。
设计的主要方案如下:(1)控制模块采用STC89C51为控制中心模块。
(2)键盘输入采用4x3的共阴极键盘输入可以节省IO口的使用。
(3)显示模块采用液晶显示密码的输入和修改等提示。
(4)报警模块通过蜂鸣器和LED灯闪烁来完成。
(5)继电器用来控制密码锁的开关。
二、系统的硬件原理图硬件设备是以单片机为核心,结合电源电路、密码储存电路、显示电路、报警电路和继电器电路等外围设备来完成设计要求。
其原理框图如图1。
三、系统硬件部分设计(一)AT24C02 EEPROM存储器。
用户在使用电子密码锁的时候若更改了系统的初始密码,密码锁系统断电之后密码就容易丢失,而曾加了AT24C02就能把密码储存起来防止丢使。
基于单片机的密码锁 4位数码管+24c02+蜂鸣器
基于单片机的密码锁
------4位数码管+24C02+蜂鸣器
本系统是基于单片机的密码锁,用户可以通过按键输入4位密码,系统会把用户输入的密码跟之前储存在系统的密码进行比较(出厂默认密码“1234”),如果一致则蜂鸣器发出”滴滴“,数码管显示“YESS”,如果输入错误蜂鸣器发出”滴“,数码管显示“NO”,连续输入三次错误密码,系统自动锁定,数码管显示“dead”,蜂鸣器常鸣,需按复位键从新进入系统。
输入正确密码进入后,用户可以设置新的密码,设置完之后按“确定”键,进入输入密码状态。
上电后,显示“CODE”,等待输入密码:
密码输入正确后提示:
密码输入错误提示:
输入错误3次提示:
详情参照:
/item.htm?spm=a1z10.1.w8789017464.21 .catC8u&id=23157508996。
第八章 基于AT24C02的电子密码锁的设计
图 8-7 应答信号时序
六、I2C 总线的传送格式
I2C 总线的传送格式为主从式, 对系统中的某一器件来说有四种工作方式: 主发送方式、 从发送方式、主接收方式、从接收方式。 单片机发送 24C02 接收为主发送方式。 主器件产生开始信号以后, 发送的第一个字节为控制字节。 前七位为从器件的地址片选 信号。最低位为数据传送方向位(高电平表示读从器件,低电平表示写从器件) ,然后发送 一个选择从器件片内地址的字节,来决定开始读写数据的起始地址。接着再发送数据字节, 可以是单字节数据,也可以是一组数据,由主器件来决定。从器件每接收到一个字节以后, 都要返回一个应答信号(ASK=0) 。主器件在应答时钟周期高电平期间释放 SDA 线,转由从器 件控制,从器件在这个时钟周期的高电平期间必须拉低 SDA 线,并使之为稳定的低电平,作 为有效的应答信号。
第八章 基于 AT24C02 的电子密码锁的设计
8.1 硬件电路的设计
图 8-1 AT24C02 硬件电路
备注:SCL、SDA 引脚需要接 10K 的上拉电阻,学习板上,所有引脚都也接 10K 上拉电阻。
8.2 I C 总线的 AT24C02 存储器简介
一、什么是 I2C 总线
I C 总线(Inter Integrated Circuit Bus) :是 Philips 公司推出的串行总线标准(为 二线制) 。总线上扩展的外围器件及外设接口通过总线寻址,是具备总线仲裁和高低速设备 同步等功能的高性能多主机总线。 串行数据线 SDA 和串行时钟线 SCL 构成的,可发送和接收数据。 2 2 所有挂接在 I C 总线上的器件和接口电路都应具有 I C 总线接口,且所有的 SDA/SCL 同名端 相连。总线上所有器件要依靠 SDA 发送的地址信号寻址,不需要片选线。 特点:组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低。 允许若干兼容器件共享总线, 应用比较广泛。 总线的长度可达 7.6m, 传送速度可达 400kbps, 2 标准速率为 100kbps。支持多个组件。支持多主控器件(某时刻只能有一个主控器件) 。I C 总线上所有设备的 SDA, SCL 引脚必须外接上拉电阻。
基于AT24C02电子密码锁的设计
单片机应用课程设计设计题目:基于AT24C02电子密码锁的设计目录1 设计任务....................... 错误!未定义书签。
2 系统总体方案设计............... 错误!未定义书签。
2.1各个模块方案论证............ 错误!未定义书签。
2.1.1 芯片选择................ 错误!未定义书签。
2.1.2 显示器的选择............ 错误!未定义书签。
2.2总体方案设计................ 错误!未定义书签。
3 硬件电路设计................... 错误!未定义书签。
3.1单片机最小系统.............. 错误!未定义书签。
3.2AT24C20储存密码电路........ 错误!未定义书签。
3.3矩阵键盘电路 (6)3.4液晶显示电路 (6)4 系统软件设计................... 错误!未定义书签。
4.1主程序流程图 (7)4.2子程序流程图 (8)4.2.1 AT24C20子程序流程图 (8)4.2.2 1602子程序流程图 (9)5实物调试....................... 错误!未定义书签。
5.1实性物能分析 (9)6心得体会....................... 错误!未定义书签。
附录1 ........................... 错误!未定义书签。
(1)系统总电路图 (15)(2)系统仿真图 (15)附录2 ........................... 错误!未定义书签。
(1)程序清单 .................. 错误!未定义书签。
1.设计任务基本要求:采用AT24C02与单片机STC89C52相结合设计电子密码锁,然后通过矩阵键盘按键进行密码的输入、清除、更改、开锁等功能。
2.系统总体方案设计2.1各个模块方案讨论2.1.1芯片选择由于设计的是电子密码锁,而单片机AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
根据AT24C02的简单电子密码锁使用说明
湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期:2016 年6月19日2016 年6月30日指导教师:教研室主任:目录1 引言 (4)1.1 电子密码锁简介 (4)1.2 电子密码锁的发展趋势 (4)1.3 本设计所要实现的目标 (5)2 设计方案的选择 (5)2.1 方案一:采用数字电路控制方案 (5)2.2 方案二:采用无线遥控方式控制方案 (5)2.3 方案三:采用以单片机为核心的控制方案 (5)3 主要元器件介绍 (6)3.1 主控芯片AT89S51 (6)3.1.1 AT89S51性能简介 (6)3.1.2 AT89S51引角功能说明 (7)3.2 存储芯片AT24C02 (9)3.3 LCD1602显示器 (10)3.3.1 接口信号说明 (10)3.3.2 主要技术参数 (11)3.3.3 基本操作程序 (11)3.4 晶体振荡器 (12)4 系统硬件构成 (12)4.1 设计原理 (12)4.2 电路总体构成 (13)4.3 键盘输入部分 (13)4.4 密码存储部分 (14)4.5 复位部位 (15)4.6 晶振部分 (15)4.7 显示部分 (15)4.8 报警部分.......................................17错误!未定义书签。
4.9 开锁部分.......................................18 错误!未定义书签。
5 系统软件设计.....................................19 错误!未定义书签。
6 总结.............................................22错误!未定义书签。
参考文献............................................23错误!未定义书签。
单片机控制的电子密码锁(电路图 流程图 原理图)-课程设计
单片机控制的电子密码锁(电路图+流程图+原理图)-课程设计单片机控制的电子密码锁(电路图+流程图+原理图) 摘要:本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。
系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。
除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。
本系统成本低廉,功能实用关键词:AT89S51,AT24C02, 电子密码锁,矩阵键盘一、引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。
设计本课题时构思了两种方案:一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。
考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。
二、方案论证与比较方案一:采用数字电路控制。
其原理方框图如图1-1所示。
图2-1 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。
用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。
方案二:采用一种是用以AT89S51为核心的单片机控制方案。
单片机电子密码锁(可以修改设置密码)——基于51单片机AT24C02LCD1602显示
单片机电子密码锁 <可以修改设置密码)——基于51单片机与AT24C02与LCD1602显示其电路图连接如下:本人已经用硬件实验,程序可用。
正确~~本程序特点:装载后读者可以自改密码,然后需要再次载入程序时:可以把主程序aa=Sendstring(0xa0,1,table2,6>。
这一句去掉。
然后程序的电子锁密码就是你个人设置的密码。
程序代码为:#include<reg51.h>#include<string.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define LCDIO P2#define delay4us(> _nop_(>。
_nop_(>。
_nop_(>。
_nop_(>。
uchar buffer[6]={0}。
sbit sda=P3^7。
sbit scl=P3^6。
sbit beep=P3^5。
bit flag=0,aa。
//用户蹲渊义定时溢出标志位uchar DSY_BUFFER[16]=" "。
uchar DSY_BUFFER1[16]=" "。
uchar Userpassword[6]={0}。
sbit rs=P0^4。
sbit rd=P0^3。
sbit lcden=P0^2。
sbit led=P3^0。
uchar code table2[]="123456"。
uchar code table[]="Your Password..."。
void delayms(uint z>{uint x,y。
for(x=z。
x>0。
x-->for(y=110。
y>0。
y-->。
}void delay(> //短延时,两个机器周期,做总线的延时用{。
基于AT24C02的简易电子密码锁说明书
湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期: 2016 年 6月19日 2016 年 6月 30日指导教师:教研室主任:目录1 引言、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、1 电子密码锁简介、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、2 电子密码锁的发展趋势、、、、、、、、、、、、、、、、、、、、、、、、、、41、3 本设计所要实现的目标、、、、、、、、、、、、、、、、、、、、、、、、、、52 设计方案的选择、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、52、1 方案一:采用数字电路控制方案、、、、、、、、、、、、、、、、、、52、2 方案二:采用无线遥控方式控制方案、、、、、、、、、、、、、、52、3 方案三:采用以单片机为核心的控制方案、、、、、、、、、、53 主要元器件介绍、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1 主控芯片AT89S51、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1、1 AT89S51性能简介、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1、2 AT89S51引角功能说明、、、、、、、、、、、、、、、、、、、、、、、、、、3、2 存储芯片AT24C02、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、93、3 LCD1602显示器、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、103、3、1 接口信号说明、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、103、3、2 主要技术参数、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、113、3、3 基本操作程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、113、4 晶体振荡器、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124 系统硬件构成、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124、1 设计原理、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124、2 电路总体构成、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、134、3 键盘输入部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、134、4 密码存储部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、144、5 复位部位、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、4、6 晶振部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、154、7 显示部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、154、8 报警部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、17错误!未定义书签。
基于AT24C02的简易电子密码锁说明书
湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期:2016 年6月19日2016 年6月30日指导教师:教研室主任:目录1 引言 (4)1.1 电子密码锁简介 (4)1.2 电子密码锁的发展趋势 (4)1.3 本设计所要实现的目标 (5)2 设计方案的选择 (5)2.1 方案一:采用数字电路控制方案 (5)2.2 方案二:采用无线遥控方式控制方案 (5)2.3 方案三:采用以单片机为核心的控制方案 (5)3 主要元器件介绍 (6)3.1 主控芯片AT89S51 (6)3.1.1 AT89S51性能简介 (6)3.1.2 AT89S51引角功能说明 (7)3.2 存储芯片AT24C02 (9)3.3 LCD1602显示器 (10)3.3.1 接口信号说明 (10)3.3.2 主要技术参数 (11)3.3.3 基本操作程序 (11)3.4 晶体振荡器 (12)4 系统硬件构成 (12)4.1 设计原理 (12)4.2 电路总体构成 (13)4.3 键盘输入部分 (13)4.4 密码存储部分 (14)4.5 复位部位 (15)4.6 晶振部分 (15)4.7 显示部分 (15)4.8 报警部分 (17)4.9 开锁部分 (18)5 系统软件设计 (19)6 总结 (22)参考文献 (23)附录一 (23)附录二 (33)1 引言1.1 电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
其特点如下:1) 保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零。
基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书
基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书第一届Proteus仿真设计竞赛参赛作品基于24C02和LCD液晶显示的电子密码锁(原创) 作者:曾荣泉(广东海洋大学信息学院,湛江,524088)使用说明书2007年5月4日(青年节)于广东海洋大学主校区海景公寓B座516室第一章系统的启动电子密码锁启动时,系统提示:“Input code”,即提示请输入密码,如图1-1所示。
图1-1 系统提示输入密码第二章密码输入及功能选择用4行*3列小键盘(如图2-1所示)输入6位密码(密码限于0-9),如图2-2所示。
如果密码输入正确,则显示如图2-3所示功能选择菜单:按1打开密码锁(这里用LED变亮表示)并退出系统,按2修改密码锁的密码。
图2-1 小键盘图2-2 输入密码图2-3 功能选择菜单进入功能选择菜单后,如果按下1号键,LED就变亮,表示电子密码锁打开并退出系统,返回如图1-1所示的输入密码界面。
如果按下2号键则进入修改密码锁密码的功能,下面将会介绍修改密码部分。
第三章修改系统密码进入功能选择菜单并按下2号键后,进入修改密码锁密码的功能,提示:“Input new code”即提示输入新密码,如图3-1所示。
输入6位新密码后则提示:“Confirm new code”,即提示确认新密码,如图3-2所示。
如果两次输入的密码一致,则显示:“Modify code OK”,即修改密码成功,并返回如图2-3所示的上一级功能选择菜单;如果两次输入的密码不一致,则显示:“Modify code fail”,即修改密码失败,并返回如图2-3所示的上一级功能选择菜单。
图3-1 输入新密码图3-2 确认新密码第四章系统安全性—密码输入有误报警如果密码输入不正确,则显示:“Input error”,即显示输入错误,然后提示:“Input code again”即提示再次输入密码,如图4-1所示。
基于24c02的简易门禁系统设计与仿真报告书
基于24c02的简易门禁系统设计与仿真报告书该设计基于STC单片机设计,电路主要由51单片机最小系统和按键部分、蜂鸣器报警部分、LCD液晶显示部分等组成。
该电路设计简单,单层板加上几根跳线即可完成,适合电子初学者DIY制作。
电子密码锁具体功能介绍:1、该电子密码锁默认密码为1234567890,密码通过键盘输入,若密码正确,则将锁打开。
2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。
3、报警、锁定键盘功能。
密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。
4、AT24C02保存密码,支持复位保存,掉电保存功能。
附件内容包括:整个电子密码锁原理图和PCB源文件,用AD软件打开;Altium Designer画的原理图和PCB图如下:单片机源程序如下:#include#define uint unsigned int#define uchar unsigned charsbit l1=P1^0; //LED指示sbit bump=P2^2; //蜂鸣器控制sbit relay=P2^3;//继电器输出sbit lcden=P2^7;//LCD1602液晶控制端sbit lcdrs=P2^6;sbit sda=P2^0; //AT24C02数据端口sbit scl=P2^1; //时钟端口/**********显示内容**************************/ uchar code xianshi0[]="input password:"; uchar code xianshi1[]="please come in!"; uchar code xianshi2[]="*";uchar code xianshi3[]=" you are thief!"; uchar code xianshi4[]=" new password:"; uchar code xianshi5[]=" alter succeed!";uchar code xianshi6[]=" first error!";uchar code xianshi7[]=" second error!";uchar code xianshi8[]=" third error!";uchar code xianshi9[]=" alter fail!!";uchar table[8]; //给按键输入留取存储空间uchar table1[8]; //给密码修改留取存储空间uchar mima[8]; //给从存储中读取密码留取存储空间uchar num,num1,num2,num3,etimes,fanhui,kai;bit alterflog,cpflog,suoflog;//定义各种标志位修改密码键按下标志密码比较正确标志上锁标志void keyscan(); //声明键盘扫描函数void init();void keydeal15();void keydeal16(); //声明初始化函数/********************延时一毫秒函数**************/void delay_xs(uint x){ uint i,j;for(i=x;i>0;i--) for(j=110;j>0;j--);}void writecom(uchar com) //写命令{lcdrs=0; P0=com; delay_xs(5);lcden=1; delay_xs(5); lcden=0; }/*********************液晶写命令数据函数******************/ void writedate(uchar date) //写命令{lcdrs=1; P0=date; delay_xs(5);lcden=1; delay_xs(5); lcden=0;}/***************24c02读取写入数据初始化****************/void delay() //微妙级延时函数{ ;; }void start() //开始信号{sda=1; delay(); scl=1; delay(); sda=0; delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons() //应答{uchar i;scl=1; delay();while((sda==1)&&(i<250)) i++;scl=0; delay();}void write_byte(uchar date) //写一位数据{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0; delay(); sda=CY; delay();scl=1; delay();}scl=0; delay();sda=1; delay();}uchar read_byte() //读一位数据{uchar i,k;scl=0; delay();sda=1; delay();for(i=0;i<8;i++){scl=1; delay();k=(k<<1)|sda;scl=0; delay();}return k;}void write24c02(uchar address,uchar date) //写一字节函数{start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();}uchar read24c02(uchar address) //读一字节函数{uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}/************各按键对应处理函数***************//*************各按键功能********************1-2-3-4-5-6-7-8-9-0-确认-重新输入-未定义-上锁-密码修改-密码修改确认-未定义*************************/void keydeal1() //按键1table[num]=1;num++;if(alterflog==1){table1[num1]=1;num1++; } }void keydeal2() //按键2{table[num]=2;num++;if(alterflog==1){table1[num1]=2;num1++; } }void keydeal3() //按键3{table[num]=3;num++;if(alterflog==1){table1[num1]=3;num1++; }void keydeal4() //按键4{table[num]=4;num++;if(alterflog==1){table1[num1]=4;num1++; } }void keydeal5() //按键5{table[num]=5;num++;if(alterflog==1) {table1[num1]=5;num1++;}}void keydeal6() //按键6 {table[num]=6;num++;if(alterflog==1){table1[num1]=6;num1++; } }void keydeal7() //按键7 {table[num]=7;num++;if(alterflog==1){table1[num1]=7;num1++; } }void keydeal8() //按键8 {table[num]=8;num++;if(alterflog==1){table1[num1]=8;num1++; } }void keydeal9() //按键9{table[num]=9;num++;if(alterflog==1){table1[num1]=9; num1++; } }void keydeal10() //按键10 {table[num]=0; num++;if(alterflog==1){table1[num1]=0;num1++; } }void compare() //比较密码正确与否函数{uchar j;for(j=0;j<8;j++){if(table[j]==mima[j]){cpflog=1;l1=0;}else cpflog=0;l1=1;}}void keydeal11() //确认键{uchar j;if(alterflog==1)goto n; //如果密码修改键按下再按此键无效if(num==8) //判断是否输入八个数字{num=0; //将输入数字个数清零compare(); //进行密码比较for(j=0;j<8;j++) //用FFFFFFFF将输入的数据清空{table[j]=0x0f;}}if(cpflog==1) //如果密码正确,标志位为1{l1=0; //点亮开锁灯cpflog=0; //使比较密码标志位归零etimes=0; //使记错次数归零kai=1; //使打开锁标志位置1writecom(0x01); //液晶屏清空显示writecom(0x80); //让液晶显示“please come in!”for(j=0;j<15;j++){writedate(xianshi1[j]); delay_xs(3);}for(j=0;j<2;j++) //蜂鸣器响两声提示开锁成功{bump=0; delay_xs(200);bump=1; delay_xs(200);bump=0; delay_xs(200);bump=1; delay_xs(200);}/*********等待按下上锁键或者密码修改键**********/while((suoflog!=1)&(alterflog!=1))P3=0xf7;if(P3==0xe7) suoflog=1; //上锁键按下上锁标志位置1if(P3==0xd7) alterflog=1; //密码修改键按下标志位置1if(suoflog==1) //上锁后进行初始化{init();}n: if(alterflog==1) //密码修改键按下显示new passsword{writecom(0x01); writecom(0x 38);for(j=0;j<15;j++){writedate(xianshi4[j]); }}suoflog=0; //上锁标志位清零}else //否则密码错误,执行密码错误指令{num=0; //将输入数据个数清零num1=0; //将修改密码输入数字个数清零etimes++; //记录错误次数加1bump=0; //报警一声delay_xs(500); bump=1;for(j=0;j<8;j++) //清空修改密码输入数据{ table1[j]=0x0f; }if(etimes==1) //如果输错一次{writecom(0x01); //清屏writecom(0x80);for(j=0;j<14;j++) //显示first error{ writedate(xianshi6[j]); }delay_xs(2000); //延时两秒writecom(0xc);writecom(0x80);for(j=0;j<16;j++) //第一行显示input passsword{writedate(xianshi0[j]); delay_ xs(5);}writecom(0x80+0x40+4); //第二行显示--------for(j=0;j<8;j++) {writedate('-'); }}if(etimes==2) //如果输错两次{writecom(0x01); writecom(0x80);for(j=0;j<15;j++) //显示second error{writedate(xianshi7[j]);}delay_xs(2000); //延时两秒writecom(0xc);writecom(0x80);for(j=0;j<16;j++) //第一行显示input passsword{writedate(xianshi0[j]); delay_xs(5);}writecom(0x80+0x40+4);for(j=0;j<8;j++) //第二行显示--------{writedate('-');}}if(etimes==3) //如果输错三次{writecom(0x01);writecom(0x80);for(j=0;j<15;j++) //显示you are thief!{writedate(xianshi3[j]);}for(j=0;j<10;j++) //报警十秒钟{bump=0; delay_xs(500);bump=1; delay_xs(500);}init(); //初始化}}}void keydeal12() //重新输入键{uint i;if(kai==0) //如果所没被打开{ //初始化回到输入密码状态init();}else //如果锁被打开,则显示new password:{if(alterflog==1){num=0; num1=0;writecom(0x01); writecom(0x80);//清屏for(i=0;i<15;i++){writedate(xianshi4[i]); }}}}void keydeal15() //确认密码修改键{uchar i;alterflog=0; //修改标志位归零num=0; //数据输入个数清零for(i=0;i<8;i++) //输入数据清空{table[i]=0x0f;}if(num1==8) //如果输入修改数字够八个进入{num1=0; //将输入修改数字个数清零for(i=0;i<8;i++) //将修改后八个数字写入存储器中{write24c02(i+1,table1[i]); delay_xs(5);}writecom(0x01); //清屏writecom(0x80);for(i=0;i<15;i++) //显示alter succeed!!{writedate(xianshi5[i]);}delay_xs(2000);}else //如果输入数字不够八个进入{num1=0; //将输入修改数字个数清零writecom(0x01); //清屏writecom(0x80);for(i=0;i<14;i++) //显示alter error!{writedate(xianshi9[i]);}/**************修改后将键入返回程序************/if(kai==1) //如果锁被打开{num=0; //输入数字个数清零delay_xs(2000); //延时两秒钟writecom(0x01); //清屏writecom(0x80);for(i=0;i<15;i++) //显示please come in!{writedate(xianshi1[i]);delay_xs(3);} //继续等待上锁或修改密码while((suoflog!=1)&(alterflog!=1))P3=0xf7;if(P3==0xe7) suoflog=1;if(P3==0xd7) alterflog=1;if(suoflog==1) { init();}if(alterflog==1){writecom(0x01); writecom(0x80);//清屏for(i=0;i<15;i++){ writedate(xianshi4[i]);}}}}else //如果所没被打开,显示alter error两秒后{ //进行初始化delay_xs(2000); init();}}void keydeal16() //键16未定义{}/******************键盘扫描函数**************************/ void keyscan(){uchar temp;/**************第一行扫描********************/P3=0xfe;temp=P3&0xf0;if(temp!=0xf0){delay_xs(10);if(temp!=0xf0) temp=P3;switch(temp){case 0xee: keydeal1(); break;case 0xde: keydeal2(); break;case 0xbe: keydeal3(); break;case 0x7e: keydeal4(); break;}while((P3&0xf0)!=0xf0); //松手检测}/******************第二行扫描**********************/P3=0xfd;temp=P3&0xf0;if(temp!=0xf0){delay_xs(10);if(temp!=0xf0) temp=P3;switch(temp){case 0xed: keydeal5(); break;case 0xdd: keydeal6(); break;case 0xbd: keydeal7(); break;case 0x7d: keydeal8(); break;}while((P3&0xf0)!=0xf0); //松手检测}/*****************第三行扫描*********************/P3=0xfb;temp=P3&0xf0;if(temp!=0xf0){delay_xs(10);if(temp!=0xf0) temp=P3;switch(temp){case 0xeb: keydeal9(); break;case 0xdb: keydeal10(); break;case 0xbb: keydeal11(); break;case 0x7b: keydeal12(); break;}while((P3&0xf0)!=0xf0);}/********************第四行扫描********************/P3=0xf7;temp=P3&0xf0;if(temp!=0xf0){delay_xs(10);if(temp!=0xf0) temp=P3;switch(temp){case 0xe7: // keydeal13();break;case 0xd7: // keydeal14();break;case 0xb7: keydeal15(); break;case 0x77: keydeal16(); break;}while((P3&0xf0)!=0xf0);}}/****************显示函数*************/void display(){uint c;writecom(0x80+0x40+4);if(alterflog==0) //如果不处于修改密码状态,显示num个*{for(c=0;c<num;c++){ ="" writedate('*');="" delay_xs (5);="" }}else //如果处于密码修改显示num1个*{for(c=0;c<num1;c++){ writedate('*');="" delay_xs(5);} }}/*******************初始化函数***********/void init(){uint i,a,b;num=0; //输入数据个数清零num1=0;kai=0; //开锁标志位清零l1=1; //关闭开锁灯alterflog=0; //修改密码标志位清零sda=1; //24c02进行释放总线delay(); scl=1; delay();writecom(0x38); //液晶初始化writecom(0x0c);writecom(0x06);writecom(0x01);for(i=0;i<8;i++) //读取存储器中密码,并存放于mima[]中{mima[i]=read24c02(i+1);}writecom(0x01); //清屏writecom(0x80);for(a=0;a<16;a++) //显示input password:{writedate(xianshi0[a]); delay_xs(5);}writecom(0x80+0x40+4); //第二行显示--------for(b=0;b<8;b++){ writedate('-'); }}/*****************主函数******************/void main(){init(); //初始化while(1) //不停地对键盘和显示进行扫描{keyscan(); //键盘扫描和密码输入处理display(); //LCD显示}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机应用课程设计设计题目:基于AT24C02电子密码锁的设计目录1 设计任务........................ 错误!未定义书签。
2 系统总体方案设计................ 错误!未定义书签。
2.1各个模块方案论证............. 错误!未定义书签。
2.1.1 芯片选择................. 错误!未定义书签。
2.1.2 显示器的选择............. 错误!未定义书签。
2.2总体方案设计................. 错误!未定义书签。
3 硬件电路设计.................... 错误!未定义书签。
3.1单片机最小系统............... 错误!未定义书签。
3.2AT24C20储存密码电路......... 错误!未定义书签。
3.3矩阵键盘电路 (6)3.4液晶显示电路 (6)4 系统软件设计.................... 错误!未定义书签。
4.1主程序流程图 (7)4.2子程序流程图 (8)4.2.1 AT24C20子程序流程图 (8)4.2.2 1602子程序流程图 (9)5实物调试........................ 错误!未定义书签。
5.1实性物能分析 (9)6心得体会........................ 错误!未定义书签。
附录1 ............................ 错误!未定义书签。
(1)系统总电路图 (15)(2)系统仿真图 (15)附录2 ............................ 错误!未定义书签。
(1)程序清单 ................... 错误!未定义书签。
1.设计任务基本要求:采用AT24C02与单片机STC89C52相结合设计电子密码锁,然后通过矩阵键盘按键进行密码的输入、清除、更改、开锁等功能。
2.系统总体方案设计2.1各个模块方案讨论2.1.1芯片选择由于设计的是电子密码锁,而单片机AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
所以我们以此单片机为核心,采用AT24C02作为储存密码芯片,利用单片机进行控制,外加显示电路和键盘电路,即构成一个基本的电子密码锁系统。
2.1.2显示器的选择LCD1602具有微功耗、体积小、显示内容丰富、超薄轻巧,对比度可调、内含复位电路、提供各种控制命令等特点,完全满足本次设计的需要,因此,选择LCD1602作为显示器进行使用。
2.2总体方案设计密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:1、密码输入功能:插上电源后,第一次使用或忘记密码时可以用111111对其密码初始化,LCD提示输入密码,输入密码时在1602LCD上显示“*”每输入一个数字,LCD上向右移一格,同时“*”加一个。
值到输入6个“*”为此,若一次性输入大于6个密码,则只保留前6位密码,按“确定”生效。
若按取消键,锁关闭,所有输入清除错误。
输入计数达三次时,报警并锁定键盘。
2、密码更改功能:密码锁在打开的状态再次输入原密码,会有提示输入新密码,输入新密码后按修改键再次输入新密码后就能成功修改密码(初始密码是6个1 )。
3、当密码输入成功后,或者密码修改成功后,LCD上有提示成功字符LED 灯亮,同时蜂鸣器响两声作为提示。
AT24C02电子密码锁总体设计方案如图1所示。
图1 总体设计方案3.系统硬件电路设计3.1单片机最小系统单片机是电子时钟系统的主控制器。
其最小系统主要由STC89C52单片机、晶振电路及单片机复位电路组成。
晶振系统由两个30pf的陶瓷电容和一个12MHz的晶振组成,分别接在XTAL1、XTAL2上,在单片机内部,这两个端口是一个反相放大器的输入端,这个放大器构成了片内振荡器,它决定了单片机的时钟周期。
单片机有一个复位引脚RST,高电平有效,只要RST保持高电平,单片机将循环复位,复位期间,ALE、PSEN输出高电平。
RST从高电平变为低电平之后,PC指针变为0000H,使单片机从程序存储器地址为0000H的单元开始执行。
当单片机执行程序出错或进入死循环时,也可按复位按钮重新启动。
单片机最小系统如图2所示。
图23.2AT24C02储存密码电路.为了保存用户设置的密码,本系统使用AT24C02用来保存用户设置的密码,它的SCL、SDA端分别接单片机的T0、T1端,用于与单片机之间读写操作的数据传输;WP接低电平表示单片机可以对器件进行正常的读/写操作;E0、 E1、E2是器件地址输入端,都接低电平表示只有一个AT24C02被器件寻址。
该电路要注意的是SCL、SDA必须加上一上接电阻,阻值为 4.7K。
用户设置的密码存放在ST24C02中,当需要更改或读取用户密码时,只需对ST24C02里的数据更改或读取。
ST24C02储存密码电路如图3所示。
图33.3 矩阵键盘电路矩阵键盘电路主要作用就是输入密码,它由行线和列线组成,按键位于行、列的交叉点上,行列分别连接到按键开关的两端。
无按键按动作时列线处于高电平状态;有按键按下时,交点的行线和列线相通,列线电平状态将由与此列线相连的行线电平决定。
行线电平如果低,则列线电平为低;行线电平如果为高,则列线电平也为高。
这是识别矩阵式键盘按键是否被按下的关键所在。
由于矩阵键盘中行、列线为多键公用,各按键均影响该键所在的行和列的电平,所以必须将行、列线信号配合起来作适当的处理,才能确定闭合键所在的位置。
矩阵式键盘节省了好多的I/O口,适用于按键数量比较多的场合。
本设计的4*4键盘即采用矩阵式键盘。
矩阵键盘电路图如图4所示图43.4液晶显示电路1602的引脚功能:第1脚:为地电源。
第2脚:VCC接5V正电源。
第3脚:为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个20K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:15脚接VCC,16脚接地。
1602电路图如图5所示。
图54系统软件设计由于单片机是可编程控制器,故采用C语言对单片机进行程序的编写。
主程序主要由矩阵键盘程序、1602液晶屏程序及AT24C02程序组成。
4.1主程序流程图图6上图6为主程序流程图。
开始先初始化,然后屏幕显示password先扫描按键,确认是否可以按键按出密码,如果没有按键按下,则重新扫描按键,若有键按下则按下修改键并保存密码就会出现新的密码,若不按下修改键则还是原来刚设置的初始密码,按下输入键并输入密码,不按下输入键则重新回到扫描按键步骤,若密码正确则开锁。
密码错误则报警显示错误。
4.2 子程序流程图4.2.1 AT24C02 子程序流程图图7图7展示了AT24C02的一个工作流程:首先是对AT24C02进行初始化,方便密码的输入,当输入的密码正确,就会解锁,显示屏显示open,否则显示error 并重新输入密码。
4.2.2 1602子程序流程图图81602显示器的工作流程图展示了1602的工作流程:启动时,首先对1602进行初始化,然后检测有没有数据写入,当有数据写入时,1602便读出数据并显示,没有数据写入时,1602就一直处于等待中,直至有数据写入。
1602子程序流程图如图8所示。
5实物调试5.1实物性能分析用KEIL编写程序软件编写程序、经过Proteus仿真软件仿真调试之后,确认了此系统可正常运行,在这样的前提下,我们利用一个单片机最小系统、一块用电路板焊接的模块和一个1602液晶显示屏完成了第一次实物仿真。
图9图9界面显示为输入密码,这时我们按下按键输入密码。
当我们输入密码时,下图为密码正确的实物图,如图10所示。
图10当密码输入正确时,显示屏就会显示OPEN。
若密码输入错误,下图为密码输入错误的实物图,如图11所示。
图11当我们输入错误的密码时,显示屏就会显示error。
下图为密码修改成功的实物图,如图12所示。
图12当密码修改成功时,显示屏就会显示RestPasswordOK。
6心得体会通过此次课程设计,我重新把单片机及相关知识联系在了一起虽然掌握的知识不是很多,但通过查找资料我还是对单片机有了很好的了解和掌握。
在设计中我才发现单片机虽然体积小但是功能很强大,在生活中很多地方都可以用到它。
单片机这门学科博大精深,在以后的学习中只有多看书,理论与实践结合才能把这门课掌握好。
掌握了LCD的使用方法与编程。
同时我也体会到合作的好处。
让我懂得了如何合作,对不同看法发表自己的意见。
此次设计中最要的一点是,让我知道了,理论联系实践的好处。
不管理论学的再怎么好都必须联系实践,只有在实践中我们才会更加懂得如何运用自己的所学,在实践中将自己的知识实物化。
理论联系实践是我们获取知识的最佳途径。
参考文献[1]谭浩强主编. C程序设计题解与上机指导(第3版)[M]. 北京,清华大学出版社,2005.16-24[2]谢维成杨家国董秀成,单片机原理与应用及C51程序设计(第2版)[M],北京,清华大学出版社,2009.7.25-36附录1(1)系统总电路图系统总电路图,如图12所示。
图13 (2)系统仿真图系统仿真图,如图13所示。