基于80C51的电子密码锁单片机课程设计
简易电子密码锁(基于51单片机)报告
简易电子密码锁设计&我的设计思想联想到日前在安全技术防范领域,具有防盗报警功能的电子密码控制系统逐渐代替传统的机械式密码控制系统,并结合近期的学习过程和一些参考书籍,完成了简易的电子密码锁设计学习。
电子密码控制是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
电子密码控制不论性能还是安全性都已大大超过了机械类结,具有良好的应用前景。
一、设计目的与内容设计了一个简易电子密码锁,可按要求从矩阵键盘输入6位数密码如“080874”,输入过程中有按键音提示。
当密码输入正确并按下确认键(“OK”键)后,发光二极管被点亮。
二、工作原理与基本操作过程介绍采用80C51为核心的单片机控制。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
(1)键盘的人工编码给每个按键指定一个按键值,报告设定按键S1~S9对应的按键值分别为“1~9”,S10为数字“0”,S11为“OK”,S12~S16对应的按键值分别为12~16。
(2)根据按键值,指定每个按键对应的输入数字和信息。
如下表为每个按键代表的数字和输入信息。
当键盘扫描程序扫描到S10键被按下时,将其代表的按键值“0”通知CPU,CPU根据事先的规定,就会知道输入的数字是“0”。
矩阵键盘中每个按键所代表的数字和输入信息(3)输入数字和密码对比。
先将设定的密码用一个数组保存,报告中用的密码“080874”和“OK”确认信息可以用如下数组保存:Unsigned char D[ ]={0,8,0,8,7,4,11};在主程序接收到数字和信息后,通过逐位对比的方法进行判断。
输入的数字经对比正确时,程序才会继续顺序执行,否则,程序拒绝继续执行。
(4)执行预期功能。
如果输入密码正确,执行预期功能,报告设计为点亮P3.0口引脚LED。
三、电路图设计(Proteus绘制)四、程序设计(C语言)矩阵式键盘实现的电子密码锁程序#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚sbit sound=P3^7; //将sound位定义为P3.7unsigned char keyval; //储存按键值/************************************************************** 函数功能:延时输出音频**************************************************************/ void delay(void){unsigned char i;for(i=0;i<200;i++);}/************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){unsigned char D[ ]={0,8,0,8,7,4,11}; //设定密码EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0keyval=0xff; //按键值初始化while(keyval!=D[0]) //第一位密码输入不正确,等待;while(keyval!=D[1]) //第二位密码输入不正确,等待;while(keyval!=D[2]) //第三位密码输入不正确,等待;while(keyval!=D[3]) //第四位密码输入不正确,等待;while(keyval!=D[4]) //第五位密码输入不正确,等待;while(keyval!=D[5]) //第六位密码输入不正确,等待;while(keyval!=D[6]) //没有输入“OK”,等待;P3=0xfe; //P3.0引脚输出低电平,点亮LED}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1 //定时器T0的中断编号为1,使用第一组寄存器{unsigned char i;TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=0; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下for(i=0;i<200;i++) //让P3.7引脚电平不断取反输出音频{sound=0;delay();sound=1;delay();}}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值}五、用Proteus软件进行仿真利用Keil软件进行编译通过后,生成hex文件。
单片机电子密码锁课程设计
摘要:本系统由单片机系统、矩阵键盘、LED 显示和报警系统组成。
系统能完成开锁、超时报警、密码错误报警基本的密码锁的功能。
除上述基本的密码锁功能外,还具有LED显示功能,本系统成本低廉,功能实用。
关键词:AT89C51,LCD, 电子密码锁,矩阵键盘,报警器第1章系统概述1系统功能随着科技的发展和人们生活水平的提高,如何实现保密防盗这一问题变的尤其的突出,传统的机械锁由于其构造的简单,失效的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲昵。
AT89C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置8位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)状态指示、报警、LCD显示。
密码输入正确时有very good!,welcome to you ^_^等提示信息、密码输入错误数码显示器会出现错误提示,显示“the code is flase!”电子密码锁的设计主要由三部分组成:键盘接口电路、密码锁的控制电路、输出LCD显示电路。
报警蜂鸣器等。
第2章硬件电路方案(系统框图)论证分析设计的要求是要实现密码固定在ROM中,设计的基本思路是,将密码固化,放入表中,在得到按键后,查表比较密码,如果正确,显示”very good!, welcome to you ^_^ ”提示,如果密码错误,打开报警,同时屏幕闪烁以提示密码错误“the code is flase!”。
下图2-1是电子密码锁的总体框架图:电路分为五个部分,显示,键盘输入,报警输出等。
2.1单片机系统:此次课题采用一种是用以80C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
此次课题用单片机P1口与键盘相连,做输入口,P0口与显示器相连,做显示,P2口做显示器扫描。
系统总框图图2—12.2键盘接口电路:此次课程设计采用I/O键盘,与P1口相连,采用扫描法。
80c51单片机电子密码锁C程序
实验九电子密码锁设计实验一、实验目的1.学习了解74LS165芯片的原理,会使用74LS165进行简单的编程2.学习编写keil c程序,实现密码锁的算法3.学习掌握单片机51的简单编程二、实验器材1. PC机一台2.MINI51实验开发板一块3. 跳线若干个三、实验原理在安全技术防范领域,具有防盗报警功能的电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它具有很高的安全性、可靠性,应用日益广泛。
本实验是以51系列单片机(AT89C51)为核心,配以相应硬件电路,实现密码的设置、存贮、识别和显示,完成密码锁的模拟。
单片机接收键入的代码,并与存贮在数组code_ram[6]中的密码进行比较,如果密码正确将会显示OPEN,如果密码不正确,将显示NO,并且允许操作人员重新输入密码,最多可输入三次;如果三次都不正确,则单片将上锁,并显示LOCK。
每次按键完成后,6个数码管将会闪烁显示“—”,表示单片机已经接收到了输入的数据。
本实验硬件电路图如图所示:图9.1 电子密码锁电路图四、实验步骤1. 用USB线连接MINI51实验板与PC机;2. 打开Keil uVision3编程软件,输入源程序(第五部分);3. 调试源程序,经调试正确无误后,点击下载按钮到MINI51实验板上的仿真芯片上;4. 按照原理图把JP2上的3与4、5与6、11与12、13与14、15与16以及JP3的2与3接上。
5. 点击Keil uVision3上的运行按钮,观察实验结果,并做相应记录。
五、程序设计1. 流程图如图9.2所示:图9.2 密码锁程序流程图9.2 源程序/**************************************************************************************** 东北大学104实验室密码锁实验程序目标器件:AT89C51晶振:11.0592MHz编译环境:Keil 7.60 A****************************************************************************************/ /*******************************包含头文件**********************************************/ #include <reg51.h>/*******************************宏定义**************************************************/ #define uchar unsigned char#define uint unsigned int/*******************************端口定义************************************************/ sbit view_clk=P1^7;//显示CLKsbit view_num=P1^5;//显示串入sbit key_clk=P1^6;sbit key_pl=P1^2; //键盘移置sbit key_out=P1^1; //键盘输出/*******************************7段共阳LED码表***************************************/ uchar code tab[9][8]={{0,1,0,0,1,0,0,0}, //K{0,0,0,0,0,0,1,0}, //O{0,1,1,0,0,0,0,0}, //P{0,0,1,1,0,0,0,0}, //E{0,1,0,0,0,0,1,0}, //N{1,1,1,1,1,1,0,0}, //-{1,1,1,1,1,1,1,0}, //清0{0,0,1,1,1,0,1,0}, //L{0,0,1,1,0,0,1,0}, //C};/*******************************全局变量******************************************/uint key_ram[6];uint code_ram[6]={ 1,8,3,4,5,6 };//密码uint k=0;/**************************************************************************************** 函数功能:延时子程序入口参数: t出口参数:****************************************************************************************/ void delay(uint i){do{i--;}while(i);}/**************************************************************************************** 函数功能:LED显示子程序入口参数:出口参数:****************************************************************************************/ void fun(uint n){uint i;for(i=0;i<8;i++){view_clk=!view_clk;view_clk=!view_clk;view_num=tab[n][i];}}/**************************************************************************************** 函数功能:键盘初始化子程序入口参数:出口参数:****************************************************************************************/ void key_initial(void){key_clk=0;key_pl=0;key_pl=!key_pl;view_num=1; //将AD_CS拉高,目的是屏蔽ADC0831对输出显示的影响}/****************************************************************************************函数功能:判断按键子程序入口参数:出口参数:****************************************************************************************/ unsigned char read74hc165m(){uchar basic,c,KEY;key_pl=1;key_pl=0; //使能端为低电平时8位数据进入寄存器key_pl=1; //高电平数据锁存,同时165数据自动移1位basic=0;basic=basic<<1;if(key_out) basic|=1; //当输出为1时,该位置1,0时不变,其他7位不变,这样使得最后的basic 就为寄存器里面的8位数据for(c=0;c<7;c++){key_clk=0;key_clk=1;basic=basic<<1; //左移一位,为读取下一位做准备if(key_out)basic|=1;}switch (basic)//判断是哪位按键{case 0xff: KEY=0; break; //没有按键时输出为0case 0x7f: KEY=1; delay(11000); break;case 0xbf: KEY=2; delay(10995); break;case 0xdf: KEY=3; delay(10990); break;case 0xef: KEY=4; delay(10985); break;case 0xf7: KEY=5; delay(10080); break;case 0xfb: KEY=6; delay(10075); break;case 0xfd: KEY=7; delay(10070); break;case 0xfe: KEY=8; delay(10065); break;}return KEY;}/**************************************************************************************** 函数功能:密码输入子程序入口参数:出口参数:****************************************************************************************/ void key_code(void){uint a,b,i,j;while(k<6) //密码输入,165读取密码,密码为6个1~8的数字{for(j=0;j<48;j++){view_clk=!view_clk;//led清屏view_clk=!view_clk;}key_initial();a=read74hc165m(); //读取165的数据if(a!=0) //判断有无按键{key_initial();b=read74hc165m(); //再读取165的数据if(b==0) //按键去抖,判断按键是否放开{key_ram[k++]=a; //把按键的值放到暂存数组key_ram中fun(5); fun(5);fun(5);fun(5); fun(5); fun(5);//输出接收显示"-"for(i=0;i<6;i++)delay(11000);}}}}/**************************************************************************************** 函数功能:主程序入口参数:出口参数:****************************************************************************************/ void main(){uint i=0,j=0,m=0,n;for(j=0;j<48;j++){view_clk=!view_clk;//led清屏view_clk=!view_clk;}while(1){while(i<3) //判断密码错误次数{key_code(); //获取按键输入值key_initial();m=read74hc165m(); //读取键盘值if(m==1) //规定K8键为确认键{key_initial();n=read74hc165m(); //再读取165的数据if(n==0){ //按键去抖,判断按键放开if(key_ram[0]==code_ram[0]&&key_ram[1]==code_ram[1]&&key_ram[2]==code_ram[2]&&key_ram[ 3]==code_ram[3]&&key_ram[4]==code_ram[4]&&key_ram[5]==code_ram[5])//判断输入的密码是否与设定的密码一致{fun(5); fun(1); fun(2); fun(3); fun(4); fun(5); //一致则输出显示OPENi=5; //给i赋值使其跳出循环}else //不一致,则输出显示NO{fun(5); fun(5); fun(4); fun(1); fun(5); fun(5);k=0;i++; //计数器加1for(j=0;j<6;j++){delay(11000);}}}}}if(i==3) //错误次数i达三次,则输出显示LOCK{i=5; //给i赋值使其跳出循环fun(5); fun(7); fun(1); fun(8); fun(0); fun(5);}}}程序功能分析:由于硬件条件的限制,本实验的密码值只能从1~8中选择。
单片机课程设计 电子密码锁的设计
目录摘要----------------------------------------------------------- 3 关键字------------------------------------------------------------------------------------- 3 第一章前言----------------------------------------------------------------------------- 3 第二章基本功能设计--------------------------------------------------------------- 4⏹ 2.1 实验任务----------------------------------------------------------------- 4⏹ 2.2基本设计------------------------------------------------------------------ 4⏹ 2.3 系统框图-------------------------------------------------------------- -- 5 第三章硬件设计----------------------------------------------------------------------- 5 3.1硬件工作接线口---------------------------------------------------------------- 5 3.2 LED显示器结构与原理------------------------------------------------------- 6 3.3复位电路----------------------------------------------------------------------------- 6 3.4按键方式--------------------------------------------------------------------------- 7 3.5电路原理图------------------------------------------------------------------------- 8 3.6 元器件清单-------------------------------------------------------------------------9第四章软件设计-------------------------------------------------------------------- 10 4.1软件结构---------------------------------------------------------------------------------- 10 4.2源程序--------------------------------------------------------------------------------------12 第五章心得体会----------------------------------------------------------------------- 13 第六章参考文献----------------------------------------------------------------------- 14【摘要】电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,我们采取的是单片机,它具有超大规模集成电路技术,有极强的数据处理能力,I/O口多以它为核心设计的密码锁,结构小,功能强,现在很多单位甚至家里的各个家用电器,还有保险箱都需要它。
基于51单片机的简易电子密码锁毕业课程设计报告
前言随着电子技术的发展,具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。
电子密码锁与普通机械锁相比,具有许多独特的优点:性好,防盗性强,可以不用钥匙,记住密码即可开锁等。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
下面就是现在主流电子密码锁:目前常见的遥控式电子防盗锁主要有光遥控和无线电遥控两类。
键盘式电子密码锁从目前的技术水平和市场认可程度看,使用最为广泛的是键盘式电子密码锁,该产品主要应用于保险箱、保险柜和金库,还有一部分应用于保管箱和运钞车。
卡式电子防盗锁使用各种“卡”作为钥匙的电子防盗锁是当前最为活跃的产品,无论卡的种类如何多种多样,按照输入卡的操作方式,都可分为接触式卡和非接触式卡两大类。
生物特征防盗锁人的某些与生俱来的个性特征(如手、眼睛、声音的特征)几乎不可重复,作为“钥匙”就是唯一的(除非被逼迫或伤害)。
因此,利用生物特征做密码的电子防盗锁,也特别适合金融业注重“验明正身”的行业特点。
人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。
随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。
电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。
但较实用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定围,难以普与,所以对它的研究一直没有明显进展。
课程设计 基于8051单片机电子密码锁的设计
一、设计总说明随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
本次基于8051单片机电子密码锁的设计,其主要具有如下功能:(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能改密码。
修改密码之前必须再次输入密码,在输入新密码时候需要二次确以防止误操作。
(3)报警、锁定键盘功能。
密码输入用发光管显示,当连续3次输入错误密码,系统声光报警。
电子密码锁的设计主要由三部分组成:4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED提示灯等。
密码锁设计的关键问题是实现密码的输入、清楚、更改、开锁等功能:(1)密码输入功能:按下一个数字键,一个“-”就显示在最右边的数码管上,同时将先前输入的所有“-”向左移动一位。
(2)密码清除功能:当按下清除键时,清除前面输入的所有值,并清除所有显示。
(3)密码更改功能:将输入的值作为新的密码。
(4)开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如果确锁打开,否则不打开。
主要的设计实施过程:首先,选用8051单片机,以及选购其他电子元器件。
第二步,设计硬件电路。
第三步,编写单片机语言实现功能。
第四部,分别进行软件和硬件的调试。
最后,联合软、硬件调试整个系统,完成本次课程设计。
关键词:4×4矩阵键盘;8051单片机;密码锁;密码二次确认二、绪论2.1背景随着社会物质财富的日益增长,安全防盗已成为社会问题。
而锁自古以来就是把守门户的铁将军,人们对它要求甚高,既要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题。
基于单片机的电子密码锁课程设计报告
单片机课程设计题目基于单片机的电子密码锁设计郑州科技学院单片机课程设计任务书一、设计题目基于单片机的电子密码锁设计二、设计任务与要求(1)本设计为防止密码被窃取在输入密码时屏幕上显示8。
(2)设计开锁密码位为六位密码的电子密码锁。
(3)能够在密码正确时显示“1HELLO”,密码错误时显示“2ERROR”,输入密码的位数时显示为8的个数。
(4)4×4的矩阵键盘中包括0-9的数字键确认键和消除键的功能键。
(5)本产品具备报警功能,当输入密码错误时蜂鸣器响(6)在密码输入过程中,若输入错误,可以利用“C”键删除刚才输入的错误的数字。
在输入密码的过程中可以随时对输入的密码进行修改。
三、主要参考文献[1] 何宏主编.单片机原理与接口技术.[M]北京:国防工业出版社. 2006.07[2] 赵益、徐晓林、周振峰. 电子密码锁的系统原理. [M]北京:清华大学出版社. 2003.[3] 张培仁.基于C语言编程MCS- 51单片机原理与应用.北京:清华大学出版社. 2002. 12四、设计时间2015 年01月16日至2015 年01月16 日指导教师签名:年月日目录1 电子密码锁的背景 (1)2 总体设计方案的确定 (2)2.1 电子密码锁设计要求 (2)2.2 总体设计方案选定 (2)3 系统硬件设计 (3)3.1 设计原理 (3)3.2 单片机STC89C52简介 (3)3.4七段数码管显示器部分 (7)3.5 键盘设计 (8)3.6 蜂鸣器模块 (8)4 系统软件设计 (9)4.1 主程序模块 (9)5 系统制作及调试 (11)5.1 焊接注意事项 (11)5.2 硬件调试问题及解决方法 (11)6 结论 (12)参考文献 (13)附录1:实物图 (14)附录2:元件清单 (15)附录3:电路原理图 (16)附录4:程序 (17)1 电子密码锁的背景随着社会物质财富的日益增长,如何实现家庭防盗这一问题也变的尤其的突出,而锁自古以来就是把守门户的铁将军,人们对它要求甚高,即要安全可靠地防盗,又要使用方便。
电子密码锁单片机课程设计
课程设计任务书课程名称单片机原理及应用课题基于单片机的密码锁设计专业班级测控技术与仪器0601班任务书下达日期 2014 年 2 月 24 日任务完成日期2014 年 3月 7 日第1章系统概述1.1系统功能 (1)1.2设计内容及要求 (1)第2章系统方案设计2.1总体方案 (2)2.2系统组成 (2)第3章硬件设计3.1按键电路设计 (9)3.2指示灯及报警蜂鸣器的电路设计 (9)3.3显示电路设计 (10)第4章软件设计4.1主程序设计 (11)4.2按键识别与编码设计 (11)4.3显示程序设计 (13)4.4密码修改程序设计 (15)第5章系统调试5.1软件模拟调试 (16)5.2硬件接线及调试 (17)第6章总结6.1课程设计总结 (18).附:A、硬件图B、主程序流程图C、程序清单第1章系统概述1.1系统功能本次设计使用ATMEL公司的AT 80C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。
(3)状态指示、报警、锁定键盘功能。
密码输入正确时有GOOD提示信息、密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘,并且相应的有指示灯指明状态。
电子密码锁的设计主要由三部分组成:4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED提示灯,报警蜂鸣器等。
1.2设计内容及要求(1)密码的设定,此密码是固定在程序存储器ROM中,假设预设的密为“12345”共5位密码。
(2)密码的输入:采用两个按键来完成密码的输入,其中一个按键为功能键另一个按键为数字键。
在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。
然后进入密码的判断比较处理状态并给出相应的处理过程。
(3)按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。
单片机课程设计报告电子密码锁
单片机课程设计报告电子密码锁This manuscript was revised on November 28, 2020山东交通学院单片机原理与应用课程设计院(部):轨道交通学院班级:自动化121学生姓名:学号:指导教师:时间: 2015.6.1—2015.6.12课程设计任务书题目电子密码锁设计系 (部) 轨道交通学院专业班级自动化121学生姓名学号06 月 01 日至 06 月 12 日共 2 周指导教师(签字)系主任(签字)年月日目录3.总体设计 (2)44.5密码比较模块 (6) (6) (8) (9)附录 (10)摘要设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL912 24C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。
在keil4软件中编程,系统可实现6位密码的处理,并通过控制步进电机控制密码箱门的电子锁,同时还可以修改改密码。
利用单片机系统制作的密码箱安全性能更高,更易操作且体积小。
关键词:单片机、密码锁、修改密码1.设计要求本实验将实现六位数的电子密码锁。
要求使用4X4 行列式键盘作为输入,并用LCD 实时显示。
具体要求如下:1. 开机时LCD显示“welcome to use”,初始化密码为“123456”,密码可以更改。
2. 按下“10”,开始则显示“Enter Please:”。
3. 随时可以输入数值,并在LCD上实时显示‘*’。
当键入数值时,为了保密按从左到右依次显示‘*’,可键入值为0~9。
4. 按下“13”键,则表示确定键按下,进行密码对比。
如相符则在LCD第一行显示“Open the door!”,同时指示灯亮起并且步进电机旋转一定的角度;如不符,则LCD第一行显示“Wrong password!”,并且蜂鸣器同时提示一下。
基于单片机电子密码锁的课程设计
基于单片机电子密码锁的课程设计本文将介绍基于单片机电子密码锁的课程设计,包括设计目的、设计理念、硬件设计、软件实现和实验结果。
通过这篇文档,读者可以了解到使用单片机进行电子密码锁设计的方法和步骤,并了解到电子密码锁在现代生活中的应用。
一、设计目的本次课程设计的主要目的是为了加深学生对单片机的理解和应用,同时锻炼学生的设计能力和实践能力。
通过电子密码锁的设计,可以培养学生的系统思维和解决问题的能力,同时也可以让学生了解到电子密码锁在现代生活中的应用。
二、设计理念电子密码锁是一种智能化的安全设备,其设计理念是通过输入密码来进行开锁,实现门禁控制和安全防护的功能。
本次课程设计的设计理念是通过单片机控制电子密码锁的开关,实现对门禁的控制和管理。
同时,本次设计还考虑到了密码的安全性和可靠性,确保用户信息的安全和可靠性。
三、硬件设计1、硬件模块本次课程设计的硬件模块主要包括单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块。
2、模块连接单片机模块、显示屏模块、键盘模块、电子锁模块和电源模块之间通过连线进行连接。
其中,单片机模块和显示屏模块之间通过串口进行通讯,单片机模块和键盘模块之间通过IO 口进行通讯,单片机模块和电子锁模块之间通过IO口进行通讯,电源模块则为整个系统提供电源供应。
四、软件实现1、程序流程本次课程设计的程序流程主要包括初始化、密码输入、密码验证、开锁和关闭等步骤。
其中,初始化主要是对各个模块进行初始化和设置,包括显示屏、键盘、电子锁等模块的初始化和设置;密码输入是通过键盘输入密码,将密码存储在单片机中;密码验证是对密码进行比对,如果密码正确,则开锁,否则显示密码错误的提示信息;开锁则是对电子锁进行控制,将开关状态进行切换;关闭则是对电子锁进行控制,将开关状态进行切换。
2、代码实现本次课程设计的代码实现主要采用C语言进行编写,并通过Keil C IDE进行编辑和调试。
具体代码可以参照下面的代码:int main(void){ //初始化模块Init_LCD(); Init_Keypad(); Init_Lock(); while (1) { //获取用户输入的密码Get_Password(); //判断密码是否正确if(Check_Password()) { //解锁Unlock_Lock();//显示解锁成功信息Display_LCD("UnlockSuccessed"); } else { //显示解锁失败信息Display_LCD("Unlock Failed"); } }}五、实验结果通过本次课程设计,设计并制作出了一款基于单片机电子密码锁。
基于C51单片机的电子密码锁课程设计
10/11学年第二学期《单片机控制系统设计与调试》课程设计任务书指导教师:班级:地点:机房、单片机实验室课程设计题目:密码锁的设计一、课程设计目的1.灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到PCB制版,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。
2.能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。
3.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。
二、课程设计内容(包括技术指标)1. 主要设计内容:使用数码管显示器来显示密码输入的相关信息,通过10位数字按键(0~9)设置4位数字(0~9)密码,2位功能按键A(输入校验密码并验证密码)和B (设置新密码),利用继电器模拟电子门锁作出是否开门以及报警等反应。
2. 具体设计内容:上电时内定初始密码为“0000”,红色发光二极管点亮,绿色发光二极管熄灭,数码管显示器显示“初始状态”,“初始状态”由设计者自行设计,但不可省略。
功能按键A:实现设置新密码功能,存储新密码并显示,一旦设定新密码,则初始密码失效。
功能按键B:实现输入校验密码并验证密码功能,显示校验密码并进行密码比较。
密码输入正确则继电器启动,并使红色发光二极管熄灭,绿色发光二极管点亮,数码管显示器提示“密码正确”,“密码正确”状态的显示内容由设计者自行设计,但不可省略,持续2~5S后继电器关闭,绿色发光二极管熄灭,红色发光二极管点亮;●密码输入错误则持续红色发光二极管点亮,绿色发光二极管熄灭状态,蜂鸣器报警,数码管显示器提示“密码错误”,“密码错误”状态的显示内容由设计者自行设计,但不可省略,持续2~5S后蜂鸣器停止报警;●校验密码连续输入错误3次,则持续红色发光二极管点亮,绿色发光二极管熄灭状态,蜂鸣器报警,数码管显示器提示“密码连续错误3次”,“密码连续错误3次”状态的显示内容由设计者自行设计,但不可省略,持续2~5S后蜂鸣器停止报警,新密码失效,恢复初始密码使用。
基于C单片机的电子密码锁课程设计
基于C单片机的电子密码锁课程设计基于C单片机的电子密码锁课程设计随着科技的不断发展,越来越多的电子产品应运而生,所以安全已成为一种越来越严重的问题。
电子密码锁作为一种常见的安全产品,在保护身份信息以及财物安全方面起到了重要的作用。
在本篇文章中,我们将会介绍一种基于C单片机的电子密码锁课程设计。
1. 课程设计的目的和意义本课程设计的目的在于让学生掌握电子密码锁的基本原理及设计方法,通过使用C单片机和软件来实现密码锁的设计和开发。
此外,设计过程还可以增强学生的团队合作精神、锻炼其技术能力,促进其对电子技术的认识和理解。
通过这个课程设计,学生可以掌握C单片机的基本操作,了解数字电路设计和开发,掌握密码锁设计和开发的基本技能,为未来的工作打下坚实的基础。
2. 课程设计的主要内容本设计的主要内容涵盖了电子门锁设计的所有基本知识和操作,包括:(1)单片机选择:本设计选用STC89C52RC作为单片机核心模块,因为它集成了丰富的资源和接口,可以方便地实现密码锁的功能。
(2)密码锁的设计:通过4X4矩阵键盘输入密码,并通过蜂鸣器进行声音提示以及LED灯进行信息提示。
(3)电子门锁的控制:通过LCD液晶屏幕来显示输入密码的结果,通过电机来实现门锁的控制。
(4)电路设计:本设计还设计了一个基于C单片机的数字电路并进行相关的测试,并阐述了设计电路时所需的基本理论知识。
3. 设计过程设计电子密码锁需要经过以下的基本步骤:(1)确定所需功能:包括锁头的设计、键盘的设计、输入电路的设计、解锁电路的设计。
这些可以通过对电子密码锁内部部件的分析得出。
(2)编写代码:根据所需功能的定义编写相应的代码程序,并通过仿真软件模拟电子密码锁的工作效果。
(3)选用元件:在电子密码锁中使用元件需要注意功耗和可靠性问题。
(4)电路设计:确定电路中的各元件及其相应的连接方式,包括锁头、键盘、蜂鸣器、LED灯、电机等。
(5)电路测试:通过测试来验证电子密码锁的实际工作效果。
基于单片机的电子密码锁的课程设计
基于单片机的电子密码锁的课程设计随着科技的发展,电子密码锁在日常生活中得到越来越广泛的应用。
电子密码锁具有安全性高、易于操作、使用方便等优点,受到了广泛的欢迎。
因此,在大学的课程设计中,基于单片机的电子密码锁也成为了一个热门的课程设计课题。
本文将介绍这个课程设计的步骤、具体内容和实现方法。
一、课程设计的步骤课程设计步骤主要包括需求分析、电路设计、程序设计和实验验证。
在需求分析阶段,需要明确电子密码锁的基本功能与操作流程,包括输入密码、判断密码正确性、开关门等。
在电路设计阶段,需要考虑到电路的可靠性、安全性以及实现的复杂度等因素。
在程序设计阶段,需要编写代码和测试程序。
在实验验证阶段,需要将课程设计投入实际应用,并测试其功能、稳定性等指标。
二、课程设计的具体内容1.硬件设计硬件设计主要包括电路设计和元器件选择两个部分。
电路设计主要包括输入密码电路、密码储存电路、密码判断电路和驱动开锁电路等。
元器件选择主要包括单片机、键盘、LCD屏幕和驱动芯片等。
2.软件设计软件设计主要包括系统流程设计、密码的输入和储存、密码的判断和开锁等功能的编写和测试。
3.系统整合系统整合是将硬件和软件组合到一起,实现功能的完整性并检测系统的稳定性和实用价值。
三、实现方法1.铁电非易失存储器电子密码锁需要存储用户密码信息,可以使用铁电非易失存储器来实现密码数据的存储和读取,铁电非易失存储器比普通存储器更加安全和稳定。
2.芯片加密在硬件电路的设计中,可以使用芯片加密的技术来提高电子密码锁的安全性。
通过软件和加密芯片相结合,可以防止非法破解和恶意攻击。
3.矩阵键盘在电子密码锁输入密码时,可以使用矩阵键盘来实现。
矩阵键盘的输入方式相比普通电子锁更加安全和方便。
综上所述,基于单片机的电子密码锁的课程设计不仅可以提高学生的电子技术和程序设计能力,还可以实现实用价值,为社会贡献力量。
基于80C51单片机的电子密码锁的设计与制作
基于80C51单片机的电子密码锁的设计与制作随着当今社会物质财富的日益增长和人们生活水平的不断提高,安全成为现代居民最关心的问题之一。
而锁自古以来就受到人们关注,人们对它要求甚高,即要求可靠安全地防盗,又要使用简单方便,这也是制锁者长期以来潜心研制的主题。
传统的门锁既要备有大量的钥匙,又要担心钥匙丢失后的麻烦。
随着单片机的问世,出现了带微处理器的密码锁,它除具有电子密码锁的功能外,还引入了智能化、科技化等功能。
从而使电子密码锁具有很高的安全性、可靠性、可用性。
目前大部分西方发达国家已经大量应用智能门禁系统,可以通过多种的更加安全更加方便可靠的方法来实现安全的管理。
但电子密码锁在我国的应用还不广泛,成本还很高,希望通过不断地努力使电子密码锁能够在我国及居民的日常生活中得到广泛应用,这也是一个国家生活水平的体现。
介绍了美国Atmel公司的单片机AT89C51与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD1602显示器显示、报警、开锁等电路,用汇编语言编写主控芯片的控制程序,设计了一款可以更改密码具有报警功能的电子密码锁。
经实验证明,该电子密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。
关键词:电子密码锁;单片机;STC89C51/AT89C51从上文我们知道了电子密码锁在人们生活中的实用性,这样并没有结束,因为制作一个这样的密码锁对于一个即将走出校园的大学毕业生来说至关重要,对于今后想从事硬件电路设计的朋友来说有一次锻炼和学习机会更为重要,通过制作调试可以更为全面的了解单片机运行机理,而且有一个好的毕业设计(实物制作和论文)成绩更是你今后找工作的一个门面,有志向做一个好的毕业设计的朋友或有疑惑的朋友可随时请联系我,qq:814574753邮箱:814574753@。
我将为您呈现一个好的实物制作和论文制作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机系统课程设计成绩评定表设计课题:基于89C51的电子密码锁的设计学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:基于89C51的电子密码锁的设计专业班级:自动F1203学生姓名:学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书目录1 硬件组成与方案设计 (5)1.1 硬件组成 (5)1.2 方案设计 (5)2 单元电路设计 (5)2.1 时钟电路设计 (5)2.2 复位电路设计 (6)2.3 键盘电路设计 (7)2.4 显示电路设计 (7)2.5 整体电路图设计 (10)3 系统软件工作流程图 (10)3.1 主程序工作流程 (10)3.2 键盘扫描程序 (11)4 系统功能实际测试 (12)4.1 程序实际编译测试 (12)4.2 单片机实际操作演示 (12)总结 (18)参考文献 (19)附录A:整体电路图 (20)附录B:详细程序 (21)概述:自从人类开始制造锁以来长期所使用的锁都是机械锁,通俗的讲就是弹子芯锁。
而传统的弹子芯锁,由于其本身锁芯密齿的有限加之开锁工具钥匙的容易复制性,使得其安全性大大降低。
随着人们生活质量的提高,如何实现安全有效的防盗这一问题受到越来越多人的关注。
传统的机械锁由于安全性能太差,被撬的事件屡见不鲜。
相比之下,电子密码锁因其保密性强,使用灵活性好,安全系数高,受到了广大用户的欢迎。
电子密码锁作为一种新型的锁,安全性有了较大的提高,还省去了传统机械锁的钥匙,使用者只要记得其密码,便可以开启,从而大大提高了防盗功能。
本文主要设计了一种以单片机AT89C51为核心的电子密码锁。
详细地介绍了该电子密码锁以及其外围电路的设计过程。
电子密码锁主要由三部分组成:键盘输入部分、单片机最小系统部分、液晶显示部分。
通过外围键盘来进行密码输入,单片机则负责把输入的密码与设定好的密码进行比对从而判断是否输入正确,而液晶显示部分则负责进行相关提示信息的显示。
1 硬件组成与方案设计1.1 硬件组成硬件组成如图1.1所示:图1.1硬件组成示意图1.2 方案设计该系统采用外围矩阵键盘来进行密码的输入,单片机则执行键盘扫描程序来获取相应的键值从而达到输入密码的功能,同时,单片机与1602液晶显示屏相连,来显示输入密码等相关提示信息方便用户使用。
当用户连续输入错误密码三次时则电子密码锁自锁,无法继续输入密码,从而提高了电子密码锁的安全2 单元电路设计2.1 时钟电路设计时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地工作。
因此时钟频率直接影响单片机的速度。
常用的时钟产生方法有两种:内部时钟方式以及外部时钟方式。
本设计采用的是内部时钟方式。
其中内部时钟方式是利用芯片内部的振荡器,然后在引脚XTAL1和XTAL2两端跨接晶体或陶瓷谐振器,就构成了稳定的自激振荡器。
其发出的脉冲直接送入内部时钟电路。
外接晶振时,C1和C2的值通常选择为30pF左右,C1和C2对频率有微调作用。
晶体的频率选择12MHz。
为了减少寄生电容,更好地保证振荡器稳定可靠地工作,振荡器和电容应尽可能安装得遇单片机芯片靠近。
如图2.1所示图2.1 时钟电路2.2 复位电路设计复位是单片机的初始化操作,单片机在启动运行时,都需要先复位,它的作用是CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。
故复位关系到一个单片机系统能否可靠地工作。
本设计采用的是按键电平复位,按复位键之后复位端通过电阻与Vcc电源连通。
为保证复位可靠,应保证复位高电平持续时间大于两个机器周期,R4电阻值为200欧姆,R5电阻值为10K,C3电容值为22uF。
如图2.2所示图2.2 复位电路2.3 键盘电路设计计算机所使用的键盘有全编码键盘和非编码键盘两种,本设计采用的是非编码键盘。
非编码键盘只是简单地提供行和列的矩阵,其它工作都靠软件来完成,由于其经济实用,目前在单片机应用系统中多采用这种方法。
本设计中采用了非编码矩阵键盘,通过四根行线四根列线与单片机相连,通过单片机内部程序从而实现计算键值,进行密码输入的功能。
如图2.3所示图2.3键盘电路2.4 显示电路设计单片机的显示方式有点阵显示,数码管显示以及液晶屏显示。
本设计采用的是液晶屏显示方式。
液晶显示模块已作为很多电子产品中都可以看到,显示的主要是数字、专用符号和图形。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数产品的通过器件,如在计算器、万用表、电子表及很多家用电子据总线D0-D7和RS,R/W,EN 三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
引脚功能说明:第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
如图2.4.1所示图2.4.1显示部分电路如图2.4.2所示图2.4.2 1602型LCD外形尺寸图2.5 整体电路图设计如图2.5所示图2.5 整体电路图3 系统工作流程图3.1 主程序工作流程主程序首先初始化外围显示电路,并显示相关信息提示用户输入密码。
用户按下确认键开始输入密码。
单片机则执行键盘扫描程序,获取相应键值与设定密码进行比对,若正确则执行解锁。
输入错误则提醒用户再一次输入,若连续错误输入三次时电子密码锁自锁,用户无法继续输入密码。
程序流程图如图3-1所示图3.1 主程序流程图3.2 键盘扫描程序键盘扫描程序是本设计的核心程序,是单片机能否正确读取按键对应键值的关键所在。
通过软件延时来去除按键时的抖动影响,之后通过单片机内部程序来获取相应键值。
键盘扫描流程图如图3-2所示。
图3.2 键盘扫描流程图4 系统功能实际测试4.1 程序实际编译测试在Keil编译环境下编译通过,0错误,0警告。
生成HEX文件4.2 单片机实际操作演示在单片机实际操作过程中,使用的程序烧录软件为STC-ISP软件,该软件可以对51内核的单片机进行相关程序的烧写,使用十分方便。
启动软件之后,首先软件进行相应的设置。
选择单片机的型号,由于51内核的单片机具有一定的通用性,故选择了STC89C52RC型号的单片机。
接着打开前面所生成好的HEX文件。
然后设置端口,本次实际操作中选用的是端口3(COM3)与笔记本相连,故端口设置为COM3。
设置完之后的软件截图如图4.3所示。
图4.1 烧录软件设置设置完成之后点击DownLoad下载按钮,并按下单片机上的电源按键,程序烧录到单片机中,单片机开始运行程序。
(1)程序开始运行时,如下图所示。
图4.2 开始运行画面(2)按下confirm按键,开始输入密码。
如下图所示。
图4.3开始输入密码(3)密码的输入。
如下图所示。
图4.4 密码输入(4)密码输入错误时,显示相应信息。
如下图所示。
图4.5 密码输入错误(5)当连续三次输入密码错误时,显示相应提示信息。
如下图所示。
图4.6 连续密码错误输入3次(6)密码正确输入。
如下图所示。
图4.7 密码正确输总结学习了一年的单片机课程,自己对单片机的设计也有了一定的了解,通过这次课程设计,我得到了很多收获和体会,以及一个工程设计的基本过程。
增强了查阅参考资料,查阅手册,图表和文献资料的自学能力。
在进行本系统的设计过程中虽然遇到很多的问题,比如说画图,设计等各种问题都让自己懊恼不已。
但是通过自己的思考以及与同学之间的探讨得到了一定程度的解决。
在该设计完成之后进行了模拟仿真,最终的效果还是令人满意的。
同时,由于设计的时间以及能力有限,本设计还存在着一些不合理的地方,比如用户无法自己设定密码,只能靠原始程序来进行设定。
同时采用的过于简陋的机械键盘,在用户输入密码时可能会产生误操作等。
但是从整体来看,通过这一个设计我还是得到了不少的锻炼。
使用Proteus软件进行模拟仿真,使用Keil 来进行源程序的编写,使用Visio软件来绘制流程图等。
这些都大大提高了我的动手能力,为以后的设计打下了良好的基础。
参考文献[1] 张迎新.单片微型计算机原理、应用及接口技术(第2版)[M].北京:国防工业出版社,2004[2] 祁伟, 杨亭. 单片机C51程序设计教程与实验[M].北京:北京航空航天大学出版社.[3] 楼然苗.李光飞.单片机课程设计指导[M].北京:北京航空航天大学出版社.附录A:整体电路图附录B:详细程序主函数部分:#include <reg52.h>#include"key.h"#include"lcd.h"uchar code show_0[]="Please input the password:"; uchar code show_1[]="The cipher is:" ;uchar code show_2[]="********";uchar code show_3[]="The password is wrong!";uchar code show_4[]="This is the last time,";uchar code show_5[]="Please try it tomorrow!";uchar code show_6[]="you are right!";uchar init_pswd[]={8,8,8,8,8,8,8,8};uchar pswd[8]={0};uchar pswd_1[8]={0};void play(uchar *j,uchar k) //K是显示的个数,j是地址{uchar i;for(i=0;i<k;i++){dat_w(*(j+i));delay(20);}}main(){uchar j=0,i=0,sum_1=0; loop:init();clear();gotoxy(1,0);play(show_0,16); gotoxy(2,0);play(show_0+17,10);/****密码输入****/do{key();}while(ki!=15);clear();gotoxy(1,0);play(show_1,15);do{flag=0;key();gotoxy(2,0);if(flag==1&&ki<=9){pswd[i]=ki;play(show_2,i);i++;}if(ki==14) //14则退出.break;}while(i<=8);for(i=0;i<=7;i++){sum_1=init_pswd[i]-pswd[i]+sum_1;if(sum_1!=0){clear();j++;if(j==3)clear();gotoxy(1,0);play(show_4,16);gotoxy(2,0);play(show_4+16,14);delay(500);delay(500);clear();gotoxy(1,0);play(show_5+7,16);while(1); //三次输入密码失败,自锁}gotoxy(1,0);play(show_3,16);gotoxy(2,5);play(show_3+15,7);delay(500);clear();goto loop;if(sum_1==0){clear();gotoxy(1,0);play(show_6,15);do{key();}while(ki!=13);loop1:clear();/****第一次输密码***/ i=0;do{flag=0;key();if(flag==1&&ki<=9){pswd[i]=ki;i++;clear();gotoxy(1,0);play(show_2,i);}}while(i<=7);clear();/***第二次输密码****/ i=0;sum_1=0;do{flag=0;key();if(flag==1&&ki<=9){pswd_1[i]=ki;i++;clear();gotoxy(1,0);play(show_2,i);}}while(i<=7);for(i=0;i<=7;i++){sum_1=sum_1+ pswd_1[i]-pswd[i]; }if(sum_1==0){clear();for(i=0;i<=7;i++){init_pswd[i]=pswd[1];}while(1);}if(sum_1!=0){clear();goto loop1;}}}}LCD部分#ifndef _lcd_h#include <reg52.h>#define uchar unsigned char #define uint unsigned int sbit E=P0^7;sbit RW=P0^6;sbit RS=P0^5;/***写命令***/void cmd_w(uchar cmd) {RW=0;RS=0;E=1;P2=cmd;delay(1);E=0;}/***写数据***/void dat_w(uchar dat){RW=0;RS=1;E=1;P2=dat;delay(1);E=0;}/***清屏****/void clear(void){cmd_w(0x01); //清屏cmd_w(0x02); //清屏回到左上角}/***初始化**/void init(void){cmd_w(0x38);cmd_w(0x0d);}/***光标定位****/void gotoxy(uchar x,uchar y) //x是行数,y是列数{if(x==1){cmd_w(0x80+y);}else{cmd_w(0xc0+y);}}#endifKEY部分#ifndef _key_h#define _key_h#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar ki=0,flag; //flag是按键标志ki是获得的键盘数/***1ms延时**/void delay(uint k){k=k*125;while(k--);}/***键盘编号程序**/ uchar number(uchar k) {uchar sum;switch(k){case 1:sum=0;break;case 2:sum=1;break;case 4:sum=2;break;case 8:sum=3;break;default:break;}return sum;}/***键盘程序**/key(void){uchar m,n;.P3=0x0f;delay(1);if(P3!=0x0f){P3=0x0f;delay(3);m=P3;if(m!=0x0f){m=m^0x0f;m=number(m);m=4*m;P3=0xf0;delay(1);if(P3!=0xf0){n=P3^0xf0;n=n>>4;n=number(n);ki=m+n; //ki是获得的键盘号flag=1;do.{P3=0x0f;}while(P3!=0x0f); //松开按键才可以继续}}}}#endif。