基于51单片机电子密码锁设计讲解

合集下载

简易电子密码锁(基于51单片机)报告

简易电子密码锁(基于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文件。

基于51单片机电子密码锁设计PPT

基于51单片机电子密码锁设计PPT

3晶振时钟电路与复位电路
7
晶振时钟电路
复位电路
系统电路图
8
电路PCB板
9
4.软件设计
10
软 件 设 计 流 程 图
5.程序调试
11
调试本程序需要用到KEIL C51,及51开 发板一块及其配套的下载烧录软件
首先打开KEIL C51主程序,新建工程, 新建文本框写入程序,保存,检查是否有语 法错误,经反复检查无误后汇编,生成51单 片机可执行的HEX文件。然后用51开发板相 匹配的烧录软件把HEX文件写入单片机 。
学的精神去解决问题。很多事情看起来是很简单的问题,但实际
做起来去会发现有许多奥妙!这是因为其中蕴含着许多科学的问
题。运用科学的方法去解决问题,这是我这次实训给我带来的思
想上的改变。学习上,使自已在大学所以的知识在这次得到实践
,学到一些书本上无法学到的经验,对电子元件有了进一步的认
识。
电子锁是信息化时代发展的产物,应时而生,我9C51
开锁驱动电路
电磁阀
通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而 达到开锁的目的。本设计通过P3.0接一个3极管驱动继电器打开 电磁阀线圈实现开关门。
当用户输入的密码正确而且是在规定的时间及次数输入之内 ,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁 ,达到开门的目的。
1
89C52
51单片机的电子锁设计 九组 DZ0901
密码锁的功能
2
开关锁,修改密码
还原,记忆
输入密码
目录
3
1.系统设计
2.硬件设计
3.软件设计
4.程序调试
1.系统设计
4
系统总设计结构图

基于51单片机的电子密码锁

基于51单片机的电子密码锁

电子密码锁一、工作原理本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O 线的数目,在按键比较多的时候,通常采用这样方法。

每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N ×M个按键的键盘。

在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

4×4矩阵键盘的工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

扫描原理把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。

由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。

利用51单片机设计一个用16个按键输入,6位数字输出显示的电子时钟。

如图1-1所示。

图1-1按键分布图具体要求和按键功能介绍如下:1. 上电后,6 位数码管显示“—”;2. 设置6 位密码,密码通过键盘输入,按“确定”键确认,如密码正确,将锁打开;3. 密码由用户自己设定,若密码正确即锁被打开,则指示灯被点亮;4. 若密码1 次输入错误,则报警;5. 按Set 键,修改密码;6. 按Cle 键可清除已输入的密码,重新进行输二、系统硬件组成本次设计的主要有键盘,数码管,STC89C52芯片,以及LED灯。

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告课程:单片机原理学院:电子与信息工程学院专业:班级:姓名:学号:指导老师:完成日期:目录一、矩阵按键 (1)(1)按键接口 (1)(2)按键开关的抖动问题 (1)二、LCD1602液晶 (2)(1)1602 液晶的介绍 (2)(2)液晶的读写时序介绍 (4)(3)1602 液晶的指令介绍 (6)三、设计 (7)(1)输出密码后,显示LCD1602 (7)(2)输出密码后,交替亮灭显示LED (7)四、程序设计 (7)(1)主程序 (7)(二)LCD1602程序 (9)(3)矩阵键盘程序 (10)五、仿真截图 (12)(1)输出密码后,显示LCD1602 (12)(2)输出密码后,交替亮灭显示LED (15)基于51单片机的密码锁设计一、矩阵按键(1)按键接口键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向单片机输入指令、地址和数据。

一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

(2)按键开关的抖动问题组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。

在下图1、图2中,当按键被按下时,P1.0输入为高电平;当按键按下后,P1.0输入为低电平。

由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1.0输入端的波形如图2所示。

这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对单片机而言,这已是一个“漫长”的时间。

图1图2按键抖动波形为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。

单片机中常用软件法,因此,对于硬件方法我们不介绍。

软件法,就是在单片机获得P1.0口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或更长一些时间后再次检测P1.0口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。

基于51单片机的电子密码锁系统设计制作,电路图+源程序

基于51单片机的电子密码锁系统设计制作,电路图+源程序

基于51单片机的电子密码锁系统设计制作,电路图+源程序这款基于51单片机的电子密码锁系统,单片机用STC89C52RC单片机,电路简单,制作过程中不需要进行调试,支持密码掉电保存功能!密码储存于单片机内部自带的的EEPROM中,不需要外置AT24C01保存密码,是学习电子密码锁比较好的教学试验系统,主要功能如下:1、1602液晶菜单显示。

2、6位密码,密码可重置,重置密码时,先输入原始密密,正确后输入新密码,再交输入新密码,两次输入的密码一致辞时,密码修改成功。

开锁时,密码通过键盘输入,若密码正确,则将锁打开,诺密码不正确时,无法开锁,密码输入错误三次时,蜂鸣器报警并且锁定键盘,10分钟。

3、支持掉电保存密码功能。

单片机中的密码是储存于单片内部的EEPROM中,在密码锁系统断电时,储存在密码锁系统中的密码不会丢失。

4、密码锁系统采用5V继电器模拟开锁过程。

5、输入的正确时,继电器吸合2-3秒,开锁指示灯亮2-3秒,模拟开锁。

6、密码错误报警且有错误提示(显示Error)。

7、密码正确开锁指示。

8、4X4矩阵键盘输入。

9、随时可修改密码存储,支持掉电保存密码功能,功能更为实用。

10、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。

修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。

源程序如下:1. #include<reg52.h>2. #define uint unsigned int3. #define uchar unsigned char4. void key_scan();5. uchar count0,count1,count3,num,n=0,temp,a,j,count4;6. uchar mima[8]; //初始密码存储区7. uchar tab_key[50]; //输入密码存储区8. uchar code table[]={9. 0x3f,0x06,0x5b,0x4f,10. 0x66,0x6d,0x7d,0x07,11. 0x7f,0x6f,0x77,0x7c,12. 0x39,0x5e,0x79,0x71};13. bit enterflag; //确认键按下与否的标志14. bit mimaflag; //密码正确与否的标志15. bit xiugaiflag; //修改密码标志16. bit enter1flag; //修改密码确认键标志17. sbit red=P3^7;18. sbit bell=P3^6;19. sbit rs=P2^0;20. sbit rw=P2^1;21. sbit lcden=P2^2;22. sbit scl=P3^4;23. sbit sda=P3^5;24. uchar code table1[]="input the passco";25. uchar code table2[]="de: --------";26. uchar code table3[]="*";27. uchar code table4[]="right (^_^) ";28. uchar code table5[]="first error";29. uchar code table6[]="second error";30. uchar code table7[]="third error see ";31. uchar code table8[]="u tomorrow (^_^)";32. uchar code table9[]="define the passc";33. uchar code table10[]="ode: --------";34. uchar code table11[]="code is new";35. //******************************键盘消抖函数*******************************36. void delay1()37. { ;; }38. void delay2(uchar x)39. {40. uchar a,b;41. for(a=x;a>0;a--)42. for(b=100;b>0;b--);43. }44.45. void delay(uint z)46. {47. uint x,y;48. for(x=z;x>0;x--)49. for(y=110;y>0;y--);50. }51.52. //****************************e^2room的初始化*******************************53. void start() //开始信号54. {55. sda=1;56. delay1();57. scl=1;58. delay1();59. sda=0;60. delay1();61. }62.63. void stop() //停止64. {65. sda=0;66. delay1();67. scl=1;68. delay1();69. sda=1;70. delay1();71. }72. //****************************应答信号*************************************73. void respond()74. {75. uchar i;76. scl=1;77. delay1();78. while((sda==1)&&(i<250))i++;79. scl=0;80. delay1();81. }82. //*****************************写字节操作函数**********************************83. void write_byte(uchar date)84. {85. uchar i,temp;86. temp=date;87. for(i=0;i<8;i++)88. {89. temp=temp<<1; //保持最高位,左移到进位CY90. scl=0;91. delay1();92. sda=CY;93. delay1();94. scl=1;95. delay1();96. }97. scl=0;98. delay1();99. sda=1;//总线释放100. delay1();101. }102. //*******************************读字节操作函数***************************** 103. uchar read_byte()104. {105. uchar i,k;106. scl=0;107. delay1();108. sda=1;109. delay1();110. for(i=0;i<8;i++)111. {112. scl=1;113. delay1();114. k=(k<<1)|sda; //或运算,放到最低位115. scl=0;116. delay1();117. }118. return k;119. }120. //**********************************写地址函数****************************** 121. void write_add(uchar address,uchar date)122. {123. start();124. write_byte(0xa0);125. respond();126. write_byte(address);127. respond();128. write_byte(date);129. respond();130. stop();131. }132. //*******************************读地址函数************************************* 133. uchar read_add(uchar address)134. {135. uchar date;136. start();137. write_byte(0xa0);138. respond();139. write_byte(address);140. respond();141. start();142. write_byte(0xa1);143. respond();144. date=read_byte();145. stop();146. return date;147. }148. //****************************LCD1602的初始化******************************* 149. void write_com(uchar com)150. {151. rs=0;152. lcden=0;153. P0=com;154. delay(5);155. lcden=1;156. delay(5);157. lcden=0;158. }159.160. void write_date(uchar date)161. {162. rs=1;163. lcden=0;164. P0=date;165. delay(5);166. lcden=1;167. delay(5);168. lcden=0;169. }170.171. //***************************************密码比较函数******************************** 172. bit mimacmp()173. {174. bit flag;175. uchar i;176. for(i=0;i<8;i++)177. {178. if(mima[i]==tab_key[i])179. flag=1;180. else181. {182. flag=0;183. i=8;184. }185. }186. return(flag); //返回flag187. }188.189. ////**********************************LCD显示函数开始**************************************190. void lcd_display()191. {192. uchar i=0;193. write_com(0x80+0x40+8);194. for(i=0;i<n;i++)195. {196. write_date(table3[0]);197. }198. }199.200. //****************************************键盘功能分配函数群开始****************************201. //** 0 ** 1 **2 ** 3**202. //** 4** 5** 6 **7 **203. //**8** 9** 确认(A) **无效(B)204. //**取消(C)**修改密码键(D)**确认修改键(E)**无效(F)205.206. void key_manage1()207. {208. tab_key[n]=0;209. n++;210. if(xiugaiflag==1)211. {212. mima[count4]=0;213. count4++;214. }215. }216.217. void key_manage2()218. {219.220. tab_key[n]=1;221. n++;222. if(xiugaiflag==1)223. {224. mima[count4]=1;225. count4++;226. }227. }228.229. void key_manage3()230. {231.232. tab_key[n]=2;233. n++;234. if(xiugaiflag==1)235. {236. mima[count4]=2;237. count4++;238. }239. }240.241. void key_manage4() 242. {243. tab_key[n]=3; 244. n++;245. if(xiugaiflag==1) 246. {247. mima[count4]=3; 248. count4++;249. }250. }251.252. void key_manage5() 253. {254. tab_key[n]=4; 255. n++;256. if(xiugaiflag==1) 257. {258. mima[count4]=4; 259. count4++;260. }261. }262.263. void key_manage6() 264. {265. tab_key[n]=5; 266. n++;267. if(xiugaiflag==1) 268. {269. mima[count4]=5; 270. count4++;271. }272. }273. void key_manage7() 274. {275. tab_key[n]=6; 276. n++;277. if(xiugaiflag==1) 278. {279. mima[count4]=6; 280. count4++;281. }282. }283. void key_manage8() 284. {285. tab_key[n]=7; 286. n++;287. if(xiugaiflag==1) 288. {289. mima[count4]=7; 290. count4++;291. }292. }293.294. void key_manage9()295. {296. tab_key[n]=8;297. n++;298. if(xiugaiflag==1)299. {300. mima[count4]=8;301. count4++;302. }303. }304. void key_manage10()305. {306. tab_key[n]=9;307. n++;308. if(xiugaiflag==1)309. {310. mima[count4]=9;311. count4++;312. }313. }314. //**********************************确认键**************************************************************315. void key_manage11()316. {317. enterflag=1; //确认键按下318. if(n==8) //只有输入8个密码后按确认才做比较319. mimaflag=mimacmp();320. else321. mimaflag=0;322. if(enterflag==1)323. {324. enterflag=0;325. n=0;326. //用FFFFFFFF清除已经输入的密码327. for(count3=0;count3<8;count3++)328. {329. delay(5);330. tab_key[count3]=0x0f;331. }332.333. TR1=1; //打开计数器1334. count1=0; //定时器1由50MS累计到1S 所用的计数器335. if(mimaflag==1)336. {337. a=0;338.339. write_com(0x01);340. write_com(0x80);341. for(count3=0;count3<16;count3++)342. {343. write_date(table4[count3]); //密码正确,显示RIGHT,绿灯亮344. delay(5);345. }346. }347.348. else349. {350. n=0;351. red=0;352. bell=0;353. a++;354. if(a==1)355. {356. for(count3=0;count3<8;count3++) //ffffffff清除密码357. {358. delay(5);359. tab_key[count3]=0x0f;360. }361. write_com(0x01); 362. write_com(0x80);363. for(count3=0;count3<16;count3++)364. {365. write_date(table5[count3]); //密码错误,显示 first error,红灯亮366. delay(5);367. }368. TR1=1;369. }370. if(a==2)371. {372. for(count3=0;count3<8;count3++) //ffffffff清除密码373. {374. delay(5);375. tab_key[count3]=0x0f;376. }377. write_com(0x01);378. write_com(0x80);379. for(count3=0;count3<16;count3++)380. {381. write_date(table6[count3]); //密码错误,显示SECOND ERROR,红灯亮382. delay(5);383. }384. TR1=1;385. }386.387. if(a==3)388. {389. for(count3=0;count3<8;count3++) //ffffffff清除密码390. {391. delay(5);392. tab_key[count3]=0x0f;393. }394. write_com(0x01);395. write_com(0x80);396. for(count3=0;count3<16;count3++)397. {398. write_date(table7[count3]); //密码错误,显示third error see,红灯亮399. delay(5);400. }401. write_com(0x80+0x40);402. for(count3=0;count3<16;count3++)403. {404. write_date(table8[count3]);//密码错误,显示 U TOMORROW ,红灯亮405. delay(5);406. }407. TR1=0;408.409. }410.411. }412. }413.414. }415. void key_manage12()416. {417. tab_key[n]=11;418. n++; //密码计数清零419.420. }421. //****************************************************取消键********************************************422. void key_manage13()423. {424.425. n=0; //密码计数清零426. write_com(0x80); //指针所指位置427. for(count3=0;count3<16;count3++)428. {429. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD:430. delay(5);431. }432. write_com(0x80+0x40);433. for(count3=0;count3<16;count3++)434. {435. write_date(table2[count3]); //开机显示--------436. delay(5);437. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码438. }439.440. }441. //*******************************************修改密码键********************************** 442. void key_manage14()443. {444. uchar aa=0;445. n=0;446. xiugaiflag=1;447. write_com(0x01);448. write_com(0x80);449. for(count3=0;count3<16;count3++)450. {451. write_date(table9[count3]); //显示define the password452. delay(5);453. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码454. }455. write_com(0x80+0x40);456. for(count3=0;count3<16;count3++)457. {458. write_date(table10[count3]); //显示--------459. delay(5);460. }461. TR0=1;462.463. }464. //******************************************修改密码键的确认键********************************465. void key_manage15()466. {467. n=0;468. enter1flag=1;469. if(enter1flag==1)470. {471. enter1flag=0;472. count4=0;473. for(count3=0;count3<16;count3++)474. {475. tab_key[count3]=0x0f; //用FFFFFFFF清楚已经输入的密码476. }477. write_com(0x01);478. write_com(0x80);479. for(count3=0;count3<16;count3++)480. {481. write_date(table11[count3]);482. delay(100);483. }484. TR1=1;485. count1=0;486. }487. }488. void key_manage16()489. {490. tab_key[n]=15;491. n++;492. }493.494. //****************************************定时器1的50MS,共延时1秒*****************************495. void time_1() interrupt 3496. {497.498. TH1=(65536-50000)/256;499. TL1=(65536-50000)%256;500. if(count1<20)501. {502. count1++;503. }504. else //计时到1S505. {506. TR1=0;507. count1=0;508. mimaflag=0;509.510. red=1;511. bell=1;512. //显示FFFFFFFF513. write_com(0x01);514. write_com(0x80);515. for(count3=0;count3<16;count3++)516. {517. write_date(table1[count3]); //显示INPUT THE PASSCODE518. delay(5);519. }520. write_com(0x80+0x40);521. for(count3=0;count3<16;count3++)522. {523. write_date(table2[count3]); //开机显示FFFFFFFF524. delay(5);525. }526. }527.528. }529. //***********************************************定时0**********************************************530. void time_0() interrupt 1531. {532.533. TH0=(65536-50000)/256;534. TL0=(65536-50000)%256;535. if(count4<8)536. {537. key_scan();538. }539. else540. {541. TR0=0;542. count4=0;543. }544. }545.546. //初始化函数547. void init()548. {549.550. uchar i;551. lcden=0;552. write_com(0x38); //打开显示模式设置553. write_com(0x0c); //打开显示,光标等等设置未零554. write_com(0x06); //当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,555. write_com(0x01); //清零指令556. write_com(0x80); //指针所指位置557.558. //定时器初始化559. TMOD=0x11; //T0,T1工作方式1560. TH0=(65536-2000)/256;561. TL0=(65536-2000)%256; //T0初始化2MS563. TH1=(65536-50000)/256;564. TL1=(65536-50000)%256; //T1初始化50MS565.566. TR1=0;567. ET1=1;568. EA=1;569. TR0=0;570. ET0=1;571.572. count0=0; //初始没有密码输入,故为零573. enterflag=0; //没有确认键按下574. mimaflag=0; //密码正确与否键先置零575.576. red=1; //红灯不亮577. //************密码存入EPROM中**********************************578. sda=1;579. delay(5);580. scl=1;581. delay(5);582. for(i=0;i<8;i++)583. {584. write_add(i,8);585. delay2(100);586. }587. for(i=0;i<8;i++)588. {589. mima[i]=read_add(i);590. delay(5);591. }592.593. }594. void main()595. { rw=0;596. init();597. write_com(0x80); //指针所指位置598. for(count3=0;count3<16;count3++)599. {600. write_date(table1[count3]); //第一行显示INPUT THE PASSPORD: 601. delay(5);602. }603. write_com(0x80+0x40);604. for(count3=0;count3<16;count3++)605. {606. write_date(table2[count3]); //开机显示FFFFFFFF607. delay(5);608. }609. while(1)610. {611. key_scan(); //调用键盘扫描函数612. lcd_display();613. }614.615. }616. //**************************************************键盘扫描函数开始********************************619. //**********扫描第一行*********620. P1=0xfe;621. temp=P1;622. temp=temp&0xf0;623. if(temp!=0xf0)624. {625. delay(100);626. if(temp!=0xf0)627. {628. temp=P1;629. switch(temp)630. {631. case 0xee:632. key_manage1();633. break;634.635. case 0xde:636. key_manage2();637. break;638.639. case 0xbe:640. key_manage3();641. break;642.643. case 0x7e:644. key_manage4();645. break;646. }647. while(temp!=0xf0)648. {649. temp=P1;650. temp=temp&0xf0;651. }652. }653. }654. //**************************************************扫描第二行***********************************655. P1=0xfd;656. temp=P1;657. temp=temp&0xf0;658. if(temp!=0xf0)659. {660. delay(100);661. if(temp!=0xf0)662. {663. temp=P1;664. switch(temp)665. {666. case 0xed:667. key_manage5();668. break;669.670. case 0xdd:671. key_manage6();674. case 0xbd:675. key_manage7();676. break;677.678. case 0x7d:679. key_manage8();680. break;681. }682. while(temp!=0xf0)683. {684. temp=P1;685. temp=temp&0xf0;686. }687. }688. }689. //*********************************************扫描第三行***********************************690. P1=0xfb;691. temp=P1;692. temp=temp&0xf0;693. if(temp!=0xf0)694. {695. delay(100);696. if(temp!=0xf0)697. {698. temp=P1;699. switch(temp)700. {701. case 0xeb:702. key_manage9();703. break;704.705. case 0xdb:706. key_manage10();707. break;708.709. case 0xbb:710. key_manage11();711. break;712.713. case 0x7b:714. key_manage12();715. break;716. }717. while(temp!=0xf0)718. {719. temp=P1;720. temp=temp&0xf0;721. }722. }723. }724.725. //***************************************************扫描第四行****************************************727. temp=P1;728. temp=temp&0xf0; 729. if(temp!=0xf0) 730. {731. delay(100);732. if(temp!=0xf0) 733. {734. temp=P1;735. switch(temp) 736. {737. case 0xe7:738. key_manage13(); 739. break;740.741. case 0xd7:742. key_manage14(); 743. break;744.745. case 0xb7:746. key_manage15(); 747. break;748.749. case 0x77:750. key_manage16(); 751. break;752. }753. while(temp!=0xf0) 754. {755. temp=P1;756. temp=temp&0xf0; 757. }758. }759. }760. }复制代码。

基于51单片机的电子密码锁课程设计报告

基于51单片机的电子密码锁课程设计报告

单片机原理与应用课程设计报告题目基于51单片机地电子密码锁设计系别物理与电子工程学院专业电子信息科学与技术学生姓名学号班级2013年 12月26日摘要电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关地闭合,完成开锁、闭锁任务地电子产品.在保密性、操作地方便性、密码地可变性、和一些自动化地功能上已经远远超过了机械密码锁.因此其应用非常广泛.而且由于其使用微型计算机地特质,导致其可以灵活地挂载电子化设备,比如界面友好地显示设备,方便快捷地输入设备等.本文简要介绍了一种基于A T89C51单片机地电子密码锁设计,主要采用汇编程序完成整个软件地设计,可以实现简易地电子密码锁功能.关键词:4×4矩阵键盘;AT89C51;密码锁;单片机目录一、绪论 (3)二、系统所要完成地功能 (3)三、系统总体方案设计 (4)四、硬件电路设计 (6)4.1单片机最小系统 (6)4.2 键盘电路设计 (6)4.3 LCD显示电路 (8)4.4 开锁电路 (8)五、软件设计 (9)六、系统调试 (13)七、心得体会 (13)参考文献 (14)附录 (15)源程序清单 (15)实物图 (23)一、绪论在日常地生活和工作中, 住宅与部门地安全防范、单位地文件档案、财务报表以及一些个人资料地保存多以加锁地办法来解决.若使用传统地机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣.随着科学技术地不断发展,人们对日常生活中地安全保险器件地要求越来越高.为满足人们对锁地使用要求,增加其安全性,用密码代替钥匙地密码锁应运而生.密码锁具有安全性高、成本低、功耗低、易操作等优点.在安全技术防范领域,具有防盗报警功能地电子密码锁逐渐代替传统地机械式密码锁,克服了机械式密码锁密码量少、安全性能差地缺点,使密码锁无论在技术上还是在性能上都大大提高一步.随着大规模集成电路技术地发展,特别是单片机地问世,出现了带微处理器地智能密码锁,它除具有电子密码锁地功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高地安全性、可靠性,应用日益广泛.随着人们对安全地重视和科技地发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世.但是这些产品地特点是针对特定地指纹和有效卡,只能适用于保密要求地箱、柜、门等.而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点.加上其成本较高,一定程度上限制了这类产品地普及和推广.鉴于目前地技术水平与市场地接收程度,电子密码锁是这类电子防盗产品地主流. 二、系统所要完成地功能基于以上思路,本文主要介绍一种使用STC公司地STC11F16XE单片机电子密码锁地设计,其主要具有如下功能:1、密码确认功能:密码通过矩阵键盘输入,若密码输入正确,则将通过驱动口发出高电平信号作为机械制动开锁地依据完成开锁功能.同时在主界面上显示:“The keywords is ok!”2、密码设置功能:单片机刚刚上电复位后会通过LCD1602界面提示设置密码:“Please set the keywords!”而且设置地密码是可重复地,程序运行中可再次通过输入相应密码然后修改.3、在密码输入错误时系统会通过LCD1602界面提示密码输入错误字符:“The keywords i sfalse!”同时不做开锁动作.4、本次设计中利用一只LED代替机械制动系统,灯亮表示开锁,灯灭表示闭锁.在本次地设计中,具体实现系统设计地过程如下:1、完成硬件地设计.通过PROTEL99SE绘制单片机最小系统板和矩阵键盘地原理图和PCB版图,然后通过实验室地腐蚀液腐蚀出来,焊上元件,下载测试程序调试.完成软件地设计.通过Keil uVision3软件,编辑好源汇编程序,然后编译和修改直到编译器通过为止.把编译好地HEX文件下载到单片机内部运行,通过查找系统功能上地不足和可修改地地方,然后回过去修改源文件,最终成型.三、系统总体方案设计方案一:采用数字电路控制.利用数字电路地逻辑运算功能,然后设计成电子密码锁,也可以完成系统地设计,甚至直接用FPGA完成设计就更加方便了.但是如果用FPGA完成则显得非常地浪费,因为,FPGA一方面价格昂贵,另一方面用功能如此强大地芯片制作功能如此简单地系统是一种耗费资源地行为,极不可取,故这里不采用此方案.方案二:采用DSP芯片TMS320F2812完成电子密码锁地设计.由于DSP芯片在逻辑运算和数学运算上地强大,完成电子密码锁地设计非常容易,而且容易实现.但是DSP芯片TMS320F2812地价格昂贵,故此处不采用此方案.方案三:采用51系列单片机STC11F16XE为核心来完成控制方案,然后实现电子密码锁地设计.我们可以利用单片机灵活地编程设计和丰富地IO端口,及其控制地准确性,不但能实现基本地密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能.其原理如图3-1所示.图3-1单片机控制方案通过比较以上三种方案,单片机方案有较大地活动空间,不但能实现所要求地功能而且能在很大地程度上扩展功能,而且还可以方便地对系统进行升级,所以我们采用第三种方案.设计地效果场景如下:1、输入密码用矩形键盘,包括数字键、字母键和功能键.2、用液晶显示屏LCD1602显示字符和操作界面.3、用发光二极管代替开锁地电路,发光表示开锁,熄灭表示闭锁.4、打开电源后,显示器显示“Please set the keywords !”提示用户设置密码,用户可以在此时输入一个8位地密码.输入至8位后系统自动跳转到另一界面,显示字符“The keywords set ok !”5、在完成上面地步骤后,系统再次跳换到另一个界面:“Please input the keywords !”此时系统提示用户输入正确地密码以完成开锁地功能.用户此时可以通过矩阵键盘来完成输入密码地功能.输入位数为8位数.6、若输入密码正确则系统会显示:“The keywords is ok !” ,同时点亮LED 灯完成开锁.否则系统将显示“The keywords is false!”并且不做任何动作.在本次设计中,硬件主要完成单片机最小系统和矩阵键盘地设计,软件主要由矩阵键盘子程序、显示初始化程序、显示字符子程序、数据比较子程序、数据寄存子程序和子程序调度主程序等组成.四、硬件电路设计4.1、单片机最小系统设计单片机地最小系统中包括外接晶振、复位电路和P0口地上拉电阻.其原理图如图4.1所示:图4.1 单片机最小系统4.2、键盘电路设计本设计中使用矩阵键盘作为输入设备,它最大地优点就是可以减少单片机I/O总线地占用,节省资源,而且可以产大量地不同组输入数据.在按键比较多地时候,通常采用这样方法.其原理如图4.2所示:.图4.2 矩阵键盘原理图每一条水平(行线)与垂直线(列线)地交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键地键盘.在这种行列式矩阵键盘非键盘编码地单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下地程序段.当确认有按键按下后,下一步就要识别哪一个按键按下.对键地识别通常有两种方法:一种是常用地逐行扫描查询法;另一种是速度较快地线反转法.对照图4.2所示地4×4键盘,说明线反转地工作原理.首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断.方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线地电平状态读入累加器A中.如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1.判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现地.方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下地键不在此列;如果不全为1,则所按下地键必在此列,而且是在与零电平行线相交地交点上地那个键.本次电路地设计中,矩阵键盘地具体地功能设计如表3.1:表4.1 按键功能按键键名功能说明1-9键数字键输入密码A--F键字母键输入密码4.3、LCD显示电路由于LCD1602地引脚中有一个对比调整电压,因此电路设计中主要就是对它串联可调电阻和对背光灯串联可调电阻地设计.这里我们采用P0口地并口总线和LCD1602数据总线相对应.控制线采用P2.2、P2.3、P2.4三个位组成,分别控制RS、RW和E.在程序中用指令EQU定义.由于显示电路比较简单,故不截图单独说明.4.4、开锁电路在本次设计中,基于节省材料地原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁.电路图如3.3所示.当P2.0口输出低电平时,二极管发光,表示开锁.图4.3 开锁电路五、软件设计5.1、软件设计思路电子密码锁工作地主要过程是LCD1602液晶显示器提示开始输入密码,通过矩阵键盘输入密码,同时由液晶显示器显示输入地情况,到输入完成后系统自动作出判断,作出开锁或闭锁处理.密码地设定,在本设计中地程序中输入地密码是保存在30H—46H中地.在输入过程中,首先输入密码地长度,接着根据密码地长度输入密码地位数,直到所有长度地密码都已经输入完毕;或者输入确认功能键之后,才能完成密码地输入过程.进入密码地判断比较处理状态并给出相应地处理过程.5.2 各个子程序地设计1、键盘扫描子程序键盘扫描流程图如图4.2.1图5.1 键盘扫描流程图键盘扫描子程序如下:KEY1: MOV A,P1 //键盘程序入口ORL A,#0F0HCPL AJZ KEY1ACALL DELAY10MSMOV A,P1ORL A,#0F0HCPL AJZ KEY1MOV P1,#7FH // 确认有键按下 MOV P1,#7FHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI1 // 开始各种相应处理MOV P1,#0BFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI2MOV P1,#0DFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI3MOV P1,#0EFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI42、液晶显示初始化程序初始化程序主要完成各种显示功能地配置:MOV P0,#01H //显示程序入口初始化ACALL ENABLEMOV P0,#38HACALL ENABLEMOV P0,#0FHACALL ENABLEMOV P0,#06HACALL ENABLEMOV P0,80H3、液晶显示部分程序液晶显示程序主要完成读时序和写时序地功能:ENABLE: CLR RSCLR RWCLR EACALL DELAY10MSSETB ERETDAT1: SETB RSCLR RWCLR EACALL DELAY10MSSETB ERET其中,ENABLE子程序主要完成对LCD1602地写控制地功能,DAT1子程序主要完成对其地写数据地功能.4、数据比较判断子程序BIJIAO: ACALL DELAYMOV P0,#01HACALL ENABLEACALL PLEASEACALL INPUTACALL PASSWORD MOV R3,#8MOV R1,#2AHACALL MAINCLR CMOV A,20HSUBB A,2AHJNZ ZHONGZHIMOV A,21HSUBB A,2BHJNZ ZHONGZHIMOV A,22HSUBB A,2CHJNZ ZHONGZHIMOV A,23HSUBB A,2DHJNZ ZHONGZHIMOV A,24HSUBB A,2EHJNZ ZHONGZHIMOV A,25HSUBB A,2FHJNZ ZHONGZHIMOV A,26HSUBB A,30HJNZ ZHONGZHIMOV A,27HSUBB A,31HJNZ ZHONGZHI此子程序根据输入地密码自动和设置地密码进行比对,并且依据其是否相等作出判断而跳转至不同地其他地子程序中去做相应地操作.六、系统调试本次调试采用实物调试.首先设计电子密码锁地源程序,源程序经过汇编后,生成地目标文件下载到单片机内部,运行并做操作后查看和预期结果是否一样.经过不断地修改,效果见附页.其中主要包括了开机界面地显示,输入密码正确后地显示,提示输入密码地界面显示和开锁后地效果.七、心得体会实践是检验真理地唯一标准,当然也是检验学习成果地标准.在经过一段时间地学习之后,我们需要了解自己地所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学地知识在实践中来检验.这次课程设计终于顺利完成了,由于我们对于单片机地应用并不熟悉,因此,我们请了硕勋励志班地优秀同学给我们进行指导.虽然老师并不要求做出实物,但硕勋班地那位同学认为要在实践中我们才能学到更多,理解地更全面.因此,我们在那位同学地指导下做出了实物,虽然并不完美,但却比理论学习地更多,实践是检验真理地唯一标准.当然我们在设计中也遇到了很多问题,仿真软件不熟悉,指令指针应用不熟悉,实务操作就更是困难,真正体现出书到用时方恨少,我们女生在实践方面地劣势也严重地凸显出来.开始地时候,几乎是寸步难行,编程,操作什么地都要靠硕勋班同学细心地解释指导,慢慢地才生疏地上手了,在这里要诚挚地感谢硕勋励志班地同学,耐心地指导我们.其实一直到最后作品出来了,我们也没有真正地理解了所有地东西,只是明白了许多零零散散地概念,这也证明了没有什么是可以轻易学到地.这次我们最大地心得就是要想真正地学习某一方面地东西,就必须全心全意心无旁骛地朝着这个方向走下去..在做设计期间,在励志班同学地指导下,通过自身地不断努力,无论是思想上,学习上,都取得了长足地发展和巨大地收获.顾起此次单片机课程设计,至今我们感慨颇多,地确,从选题到定稿,从理论到实践,在整整两星期地日子里,可以说得是苦多于甜,但是可以学到很多很多地地东西,同时不仅可以巩固了以前所学过地知识,而且学到了很多在书本上所没有学到过地知识.通过这次课程设计使我们懂得了理论与实际相结合是很重要地,只有理论知识是远远不够地,只有把所学地理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己地实际动手能力和独立思考地能力.在设计地过程中遇到问题,可以说得是困难重重,这毕竟第一次做地,难免会遇到过各种各样地问题,同时在设计地过程中发现了自己地不足之处,对以前所学过地知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过地知识重新温故.参考文献[1] 李朝青.单片机原理及接口技术(简明修订版)[M].北京:北京航空航天大学出版社,1998[2] 李全利.单片机原理及接口技术[M].高等教育出版社,2003[3] PROTEL99 SE电路设计与制板[M].机械工业出版社,2007[4] 杨将新,李华军,刘到骏等.单片机程序设计及应用(从基础到实践)[J].电子工业出版社,2006[7] 黄智伟.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社, 2005附录源程序清单ORG 0000HRS EQU P2.2RW EQU P2.3E EQU P2.4AJMP STARTORG 2000HDB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HORG 0030HSTART: MOV DPTR,#2000H //系统初始化MOV SP,#60HMOV R3,#8MOV R1,#20HSETB P2.0MOV P0,#01H //显示程序入口初始化ACALL ENABLEMOV P0,#38HACALL ENABLEMOV P0,#0FHACALL ENABLEMOV P0,#06HACALL ENABLEMOV P0,80HACALL ENABLEACALL PLEASEACALL SEETACALL PASSWORDACALL MAINACALL XIANSHI1ACALL BIJIAOAJMP $MAIN: MOV P1,#0FHKEY1: MOV A,P1 //键盘程序入口ORL A,#0F0HCPL AJZ KEY1ACALL DELAY10MSMOV A,P1ORL A,#0F0HCPL AJZ KEY1MOV P1,#7FH // 确认有键按下 MOV P1,#7FHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI1 // 开始各种相应处理MOV P1,#0BFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI2MOV P1,#0DFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI3MOV P1,#0EFHMOV A,P1ORL A,#0F0HCPL AJNZ CHULI4CHULI1: MOV P1,#07FH //键值生成程序部分 MOV A,P1JNB ACC.0,C1Z1JNB ACC.1,C1Z2JNB ACC.2,C1Z3JNB ACC.3,C1Z4C1Z1: MOV A,#3AJMP WANCC1Z2: MOV A,#7AJMP WANCC1Z3: MOV A,#11AJMP WANCC1Z4: MOV A,#15AJMP WANCCHULI2: MOV P1,#0BFHMOV A,P1JNB ACC.0,C2Z1JNB ACC.1,C2Z2JNB ACC.2,C2Z3JNB ACC.3,C2Z4C2Z1: MOV A,#2AJMP W ANCC2Z2: MOV A,#6AJMP W ANCC2Z3: MOV A,#10AJMP W ANCC2Z4: MOV A,#14AJMP W ANCCHULI3: MOV P1,#0DFHMOV A,P1JNB ACC.0,C3Z1JNB ACC.1,C3Z2JNB ACC.2,C3Z3JNB ACC.3,C3Z4C3Z1: MOV A,#1AJMP W ANCC3Z2: MOV A,#5AJMP W ANCC3Z3: MOV A,#9AJMP W ANCC3Z4: MOV A,#13AJMP W ANCCHULI4: MOV P1,#0EFHMOV A,P1JNB ACC.0,C4Z1JNB ACC.1,C4Z2JNB ACC.2,C4Z3JNB ACC.3,C4Z4C4Z1: MOV A,#0AJMP W ANCC4Z2: MOV A,#4AJMP W ANCC4Z3: MOV A,#8AJMP W ANCC4Z4: MOV A,#12AJMP W ANCWANC: MOV @R1,A //键值显示程序 INC R1MOVC A,@A+DPTRMOV P0,AACALL DAT1DJNZ R3,MM1MM0: AJMP ZUIHOUMM1: AJMP MAINZUIHOU: RETXIANSHI1: MOV P0,#01HACALL ENABLE //清屏MOV P0,#50H //PACALL DAT1MOV P0,#41H //AACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#57H // WACALL DAT1MOV P0,#4FH //OACALL DAT1MOV P0,#52H //RACALL DAT1MOV P0,#44H //DACALL DAT1MOV P0,#2DH //-ACALL DAT1ACALL SEETMOV P0,#2DHACALL DAT1 //-MOV P0,#4FHACALL DAT1 //OMOV P0,#4BHACALL DAT1 //KMOV P0,#21HACALL DAT1 //!ACALL DELAYMOV P0,#01H //清屏ACALL ENABLERETDELAY10MS:MOV R0,#5DEL1: MOV R4,#192DEL2: MOV R2,#255DJNZ R2,$DJNZ R4,DEL2DJNZ R0,DEL1RETDELAY: MOV 30H,#50DY1: MOV 31H,#200DY2: MOV 32H,#200DJNZ 32H,$DJNZ 31H,DY2DJNZ 30H,DY1RETBIJIAO: ACALL DELAYMOV P0,#01HACALL ENABLEACALL PLEASEACALL INPUTACALL PASSWORDMOV R3,#8MOV R1,#2AHACALL MAINCLR CMOV A,20HSUBB A,2AHJNZ ZHONGZHIMOV A,21HSUBB A,2BHJNZ ZHONGZHIMOV A,22HSUBB A,2CHJNZ ZHONGZHIMOV A,23HSUBB A,2DHJNZ ZHONGZHIMOV A,24HSUBB A,2EHJNZ ZHONGZHIMOV A,25HSUBB A,2FHJNZ ZHONGZHIMOV A,26HSUBB A,30HJNZ ZHONGZHIMOV A,27HSUBB A,31HJNZ ZHONGZHITRUE: MOV P0,#01HACALL ENABLE //清屏MOV P0,#50H //PACALL DAT1MOV P0,#41H //AACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#57H // WACALL DAT1MOV P0,#4FH //OACALL DAT1MOV P0,#52H //RACALL DAT1MOV P0,#44H //DACALL DAT1MOV P0,#2DH //-ACALL DAT1MOV P0,#49H //IACALL DAT1MOV P0,#53HACALL DAT1 //SMOV P0,#2DHACALL DAT1 //-MOV P0,#4FHACALL DAT1 //OMOV P0,#4BHACALL DAT1 //KMOV P0,#21HACALL DAT1 //!CLR P2.0// LCALL DELAYAJMP EDDZHONGZHI: MOV P0,#01HACALL ENABLE //清屏MOV P0,#50H //PACALL DAT1MOV P0,#41H //AACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#57H // WACALL DAT1MOV P0,#4FH //OACALL DAT1MOV P0,#52H //RACALL DAT1MOV P0,#44H //DACALL DAT1MOV P0,#2DH //-ACALL DAT1MOV P0,#49H //IACALL DAT1MOV P0,#53HACALL DAT1 //SMOV P0,#2DHACALL DAT1 //-MOV P0,#46HACALL DAT1MOV P0,#61HACALL DAT1MOV P0,#6CHACALL DAT1MOV P0,#53HACALL DAT1MOV P0,#65HACALL DAT1SETB P2.0EDD: AJMP BIJIAORETPLEASE: MOV P0,#50H //P ACALL DAT1MOV P0,#6CH //LACALL DAT1MOV P0,#65H //eACALL DAT1MOV P0,#61H //aACALL DAT1MOV P0,#73H //sACALL DAT1MOV P0,#65H //eACALL DAT1MOV P0,#2DH //-ACALL DAT1RETINPUT: MOV P0,#69H // iACALL DAT1MOV P0,#6EH //nACALL DAT1MOV P0,#70H //pACALL DAT1MOV P0,#75H //uACALL DAT1MOV P0,#74H //tACALL DAT1MOV P0,#2DH //-ACALL DAT1RETPASSWORD: MOV P0,#50H //P ACALL DAT1MOV P0,#41H //AACALL DAT1MOV P0,#53H //SACALL DAT1MOV P0,#0C0HACALL ENABLEMOV P0,#53H //SACALL DAT1MOV P0,#57H // WACALL DAT1MOV P0,#4FH //OACALL DAT1MOV P0,#52H //RACALL DAT1MOV P0,#44H //DACALL DAT1MOV P0,#21HACALL DAT1RETSEET: MOV P0,#73HACALL DAT1MOV P0,#65HACALL DAT1MOV P0,#74HACALL DAT1RETCHU: ACALL PLEASEACALL INPUTACALL PASSWORDRETENABLE: CLR RSCLR RWCLR EACALL DELAY10MSSETB ERETDA T1: SETB RSCLR RWCLR EACALL DELAY10MSSETB ERET硬件实物图。

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告一、引言随着科技的不断发展,安全问题越来越受到人们的关注。

密码锁作为一种常见的安全防护设备,在保护个人财产和隐私方面发挥着重要作用。

本设计报告介绍了一种基于 51 单片机的密码锁系统,该系统具有成本低、可靠性高、操作简单等优点,适用于家庭、办公室等场所。

二、系统总体设计(一)设计目标设计一个基于 51 单片机的密码锁系统,实现以下功能:1、密码输入与验证功能。

2、密码修改功能。

3、错误输入次数限制及报警功能。

4、开锁状态指示功能。

(二)系统组成本系统主要由 51 单片机、矩阵键盘、液晶显示屏(LCD)、电磁锁驱动电路、报警电路等组成。

1、 51 单片机作为核心控制器,负责处理密码输入、验证、修改等操作,并控制其他模块的工作。

2、矩阵键盘用于输入密码和执行相关操作。

3、 LCD 显示屏用于显示系统状态和提示信息。

4、电磁锁驱动电路用于控制电磁锁的开关。

5、报警电路在密码输入错误次数超过限制时发出报警信号。

三、硬件设计(一)51 单片机选型本设计选用 STC89C52 单片机,该单片机具有丰富的 I/O 口资源、较高的性价比和良好的稳定性。

(二)矩阵键盘设计矩阵键盘采用 4×4 行列式结构,通过扫描的方式获取按键值。

(三)LCD 显示屏接口设计选用 1602 液晶显示屏,通过并行接口与单片机连接,实现数据的传输和显示。

(四)电磁锁驱动电路设计电磁锁采用直流电源供电,通过三极管驱动电路控制其开关。

(五)报警电路设计报警电路采用蜂鸣器实现,当密码输入错误次数超过限制时,单片机输出高电平驱动蜂鸣器发声报警。

四、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机端口初始化、LCD 初始化等。

然后进入密码输入状态,等待用户输入密码。

用户输入密码后,进行密码验证,如果密码正确,则打开电磁锁,并显示开锁成功信息;如果密码错误,则记录错误次数,并显示错误提示信息。

基于51单片机的指纹密码锁设计

基于51单片机的指纹密码锁设计

基于51单片机指纹电子密码锁设计摘要随着人民生活水平的提高,如何实现家庭防盗这一问题也变得尤其突出,传统的机械锁由于其构造简单,安全性低,无法满足人们的需求。

随着电子产品向智能化和微型化的不断发展,单片机已成为电子产品研制和开发中首选的控制器,所以具有防盗报警功能的电子密码锁控制系统逐渐代替传统的机械式密码控制系统,克服了机械式密码锁控制的密码量少,安全性能差的缺点。

在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是”防君子不防小人”。

在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击.现在,科技的发展让我们有了新的选择——生物识别技术。

将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

生物识别技术的发展主要起始于指纹研究,它亦是目前应用最为广泛的生物识别技术。

本设计开发了一款基于单片机的指纹识别电子密码锁系统。

该系统以STC89C52单片机作为模块核心,通过串口通信控制ZFM—60指纹模块实现录取指纹并存储指纹数据,并通过HS12864-15C液晶显示比对流程及比对结果,辅以直流继电器与发光二极管模拟开锁的动作.本系统具有体积小、性价比高、传输速度快、适合家庭及单位使用.关键词:单片机,密码锁,指纹识别51 single fingerprint-based electronic code lockdesignABSTRACTWith the improvement of people's living standards,how to achieve family security issue has become particularly prominent,the traditional mechanical locks because of its simple structure, low security,can not meet people’s needs. As electronic products to intelligent miniaturized and the continuous development of SCM has become the electronic product research and development preferred controller,the electronic lock control system with anti-theft alarm function gradually replace the traditional mechanical control systems with code,overcome password less, poor safety performance shortcomings of mechanical lock control。

基于51单片机的电子密码锁系统整体方案设计

基于51单片机的电子密码锁系统整体方案设计

基于51单片机的电子密码锁系统整体方案设计2.1设计目标2.1.1 设计方案这次的设计主要采用STC89C52单片机作为主控的芯片,而且和外围电路相结合,外围电路是由矩阵键盘,液晶显示器和密码存储这些部分组成的。

矩阵键盘就是用来输入代码和实现各种功能。

通过矩阵键盘输入的密码,再经过单片机对用户以前输入的密码和之前保存的密码进行比较,然后就判断密码的正确与否,最后就进行开锁和报警等各种其他功能。

这个电子密码锁是用STC89C52单片机为核心的芯片,然后配上相应的硬件电路,来完成密码的设置、存储和识别的功能,单片机接收键盘输入的代码,然后和以前保存的的六位密码进行比较,六位密码有298万多组密码可以供给人们进行随意的变换,保密性能特别高,可以选择的密码组是连续的进行排列的,如果输入的密码正确的话,就能进行开锁;如果输入的密码不正确,单片机就会通过通信线路向报警器发出报警的信号。

2.1.2 设计内容(1).密码输入正确可以选择打开或关闭密码锁(2).电子锁的密码有掉电保存的功能,用的是AT24C02芯片进行密码的保存。

(3).可以进行密码的修改(6位数的密码),在修改密码的前面要再次输入刚开始的密码,输入新的密码的时候要输入两次进行确认。

(4).还有报警和锁定键盘的功能,当输入密码错了3次,系统就会把键盘锁住一分钟而且还会有蜂鸣器的声音进行提示。

2.1.3基本内容(1)当输入密码错了3次,系统就会把键盘锁住一分钟而且还会有蜂鸣器的声音进行提示。

(2)矩阵键盘中有0-9的数字键和别的功能键(3)这个电子密码锁有报警的功能,当密码输入错误时候蜂鸣器就会响而且LED灯会亮。

(4)用户可以自己修改设定密码,在修改密码的前面要再次输入密码,在输入新的密码的时候要进行二次的确认。

2.2主控部分选用单片机为系统的核心部件,可以实现控制和处理作用。

单片机有很丰富的资源,快的速度,编程简单这些特点。

用单片机内部的随机存取存储器和只读存储器以及一些其它的引脚资源,用外部的液晶显示器和键盘的输入来进行传输数据和显示的功能,基本上可以达到设计指标。

基于C51单片机的电子密码锁的设计

基于C51单片机的电子密码锁的设计

名称:基于C51单片机的电子密码锁的设计目录第一章.引言............................................. - 1 - 第二章.系统概述......................................... - 2 -2.1 系统说明:...................................... - 2 -2.2 功能简介:...................................... - 2 - 第3章.所需芯片简介.................................... - 3 -3.1 基于51内核系列单片机简介....................... - 3 -3.2 AT89C51............................. 错误!未定义书签。

3.3 总体硬件设计.................................... - 4 - 第4章系统软件设计与调试............................... - 8 - 第5章软件仿真技术在单片机系统设计中的运用..............- 16 -5.1 基于Proteus的系统仿真..........................- 16 - 结论..................................................- 19 - 致谢.. (20)摘要:单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等,无不含有CPU控制器,即单片机。

基于51单片机的密码锁设计概要

基于51单片机的密码锁设计概要

基于51单片机的密码锁设计概要设计一个基于51单片机的密码锁,通过输入正确的密码来打开锁。

以下是设计的概要:1. 系统组成部分:- 51单片机控制模块- LCD显示模块- 按键输入模块- 电机驱动模块- 电源供应模块2. 密码锁工作流程:- 初始状态:系统进入初始状态,显示提示信息和空密码框。

- 输入密码:用户通过按键输入密码。

- 密码比对:系统将输入的密码与保存的密码进行比对。

- 密码正确:如果密码正确,则显示开锁成功信息,并触发电机驱动模块,打开锁。

- 密码错误:如果密码错误,则显示错误信息,并记录错误次数。

- 达到最大错误次数:如果错误次数达到最大设定次数,则锁定系统。

- 重置密码:用户可以通过特定操作来重置密码。

- 修改密码:用户可以通过特定操作来修改密码。

3. 系统设计:- 51单片机控制模块:负责控制整个系统的工作流程。

接收按键输入、控制LCD显示、比对密码、控制电机驱动模块等。

- LCD显示模块:可以显示系统提示信息、密码输入框、错误信息等。

- 按键输入模块:提供按键输入接口,用于用户输入密码和特定操作。

- 电机驱动模块:用于控制锁的开关动作,根据单片机控制模块的指令来打开或关闭锁。

- 电源供应模块:提供电源给整个系统,确保系统正常工作。

4. 密码存储和比对:- 使用EEPROM来储存密码,以防止密码丢失。

- 在输入密码时,系统从EEPROM中读取正确的密码,并与用户输入的密码进行比对。

5. 锁定功能:- 设置一个最大错误次数,当错误次数达到设定的最大值时,系统将锁定并停止进一步的密码输入,直到进行密码重置。

6. 特定操作:- 重置密码:用户在已经登录的情况下,通过按下指定的按键组合,进入密码重置模式,并可以重新设置密码。

- 修改密码:用户在已经登录的情况下,通过按下指定的按键组合,进入密码修改模式,并可以修改当前的密码。

7. 安全性设计:- 为了防止密码泄露,系统设计中不应显示实际的密码字符,而是以掩码形式显示用户的输入。

基于51单片机电子密码锁的设计1详解

基于51单片机电子密码锁的设计1详解

淮阴工学院课程设计说明书作者: 学号:学院: 计算机与软件工程学院专业: 物联网题目: 单片机密码锁金鹰胡荣林指导教师:2016 年 6 月课程设计中文摘要目录1 绪论 (1)1.1 引言 (1)1.2 电子密码锁的背景 (1)1.3 键盘式电子密码锁的特点 (2)2.1系统总设计结构图 (3)2.2 开锁机构的设计 (3)3.2.1键盘电路及连线图 (7)3.2.3 开锁和报警电路及连线图(由LED灯和扬声器电路代替) (8)3.3 整体电路图的绘制 (8)4.2 系统软件设计总流程图 (10)5 程序调 (11)5.1 程序调试需要用到的软件和工具 (11)5.2 调试过程 (11)总结 (12)结束语 (13)参考文献 (14)附录 (15)1 绪论1.1 引言在这个信息和科技高速发展的时代,人们的生活水平越来越高,随之应运而生的人们的安全意识也越来越强,然而传统的机械锁由于设计和工艺简单,操作和携带不便,已经不能满足人们对于安全保证和生活便利的需求,于是电子密码锁本着它自身的保密性高、操作简单、灵活好用等特性逐渐进入人们的视野,并已被广大群众接纳和使用。

锁是用以关住某个确定的空间或范围或某种器物的,必须以钥匙或密码打开的器件。

锁,从古至今,发展到现在已有近千年的历史了,人们对它的结构、原理也随着时间的增加研究的近乎透彻,因此,开锁的方法和工具早已不仅仅局限于配套的钥匙,种类也层出不穷。

现代社会中,由于各种矛盾冲突十分剧烈,人们的思想道德观念,价值观念,文化修养水平等参差不齐,人们的思想境界良莠不齐,善良、正直的人们能够自觉规范自已的行为,不是自己的东西不会眷恋,没有钥匙就不会乱闯乱动。

但是,生活中同样还存在着一些道德观念较差的人,总有着不劳而获的“梦想”,他们在受到诱惑的时候,往往会想方设法利用各种手段撬门开锁,使广大居民防不胜防。

之所以出现这种情况,除了人们的道德观外,还有一个很重要的原因,就是传统锁具都存在致命的弱点,例如,锁芯采用常见的铜、铝、锌等材料,抵抗不了强力破坏;再者,锁具制作工艺,技术落后,无法阻止先进技术手段的开启。

基于51单片机的密码锁设计

基于51单片机的密码锁设计

基于单片机的密码锁设计1 引言1.1设计目的随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。

电子密码锁就是通过键盘输入一组密码完成开锁过程。

研究这种锁的初衷,就是为提高锁的安全性。

目前,国内自行研制开发的电子锁,应用还不广泛。

国内的不少企业也引进了世界上先进的技术,发展前景非常可观。

希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。

1.2设计要求本次课程设计要求使我们能够掌握并且实际运用课本知识。

通过利用所学的电子技术知识正确分析并设计电路,将适当电路运用到实际电路中,将课本知识转化为实际能力。

1.3设计方法(1)系能够从键盘中输入密码,并相应地在显示器上显示…*‟;能够判断密码是否正确,正确则开锁,错误则输出相应信息。

(2)密码由程序直接设定,不可用户自己设定。

(3)具有自动报警功能。

密码不正确,相应红灯亮,蜂鸣器发出报警声来提示。

(4)具有手动复位功能。

2设计方案及原理2.1系统总体设计根据以上分析,本次电子密码锁设计的主要重点是以下几个部分:4x3矩阵键盘设计、LCD信息显示和密码的比较和处理。

当然,除了这几个部分外还有报警等功能模块。

其中矩阵键盘用于输入数字密码和进行各种功能的实现。

由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路是报警。

系统整体框图如图1所示。

图1 系统整体框图2.2本设计硬件资源分配P3.0~P3.7用于LCD液晶显示作用。

P1.6、P1.7用于蜂鸣器和报警灯的控制。

P1.4用于开锁电路的控制。

P2.0~P2.7用于键盘电路的控制。

P1.0~P1.2用于LCD显示模块的控制端口的控制。

3硬件设计3.1.1芯片选择本次设计采用AT89C51贴片芯片,AT89C51是一个低电压,高性能CMOS 8位单片机,通过用Keil软件编写程序,然后装到单片机里面去,然后让它对整个系统进行信息的处理,如可以让它处理矩阵键盘传过来的信息,并根据编好的程序来确定哪个按键按下,并处理相应按键对应的功能,然后把相应的信息反应到单片机的各个引脚,来实现按键实现的现象,如:显示是否开启锁,报警等。

基于51单片机电子密码锁的课程设计-

基于51单片机电子密码锁的课程设计-

基于单片机的电子密码锁设计摘要随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤为突出。

在科学技术不断发展的今天,电子密码防盗锁作为防盗卫士的作用显得日趋重要。

本文从经济实用的角度出发,系统由STC89C52与低功耗CMOS型E²PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、LCD显示、报警、开锁等电路模块。

它能完成以下功能:正确输入密码前提下,开锁;错误输入密码情况下,报警;密码可以根据用户需要更改。

用C语言编写的主控芯片控制程序与EEPROM AT24C02读写程序相结合,并用Keil软件进行编译,设计了一款可以多次更改密码,具有报警功能的电子密码控制系统。

本密码锁具有设计方法合理,简单易行,成本低,安全实用,保密性强,灵活性高等特点,具有一定的推广价值。

关键词:电子密码锁;报警;液晶显示Design of Electric Password Lock Based on MCUAbstractAs people's living standards improve, the question how to achieve home security has become particularly prominent. In science and technology is developing continuously, electronic code lock as a security guard's role is increasingly important.This article from the economical point of view, the system by the STC89C52 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 performs the following functions: enter the password correctly under the premise of unlocking; wrong password case the alarm; password can be changed according to user needs. Master in C language control program and EEPROM AT24C02 chip to read and write process are combined and compiled with the Keil software, designed a number you can change the password, the password with an electronic alarm control system.The lock has a reasonable design, simple, low cost, safe and practical, confidentiality, flexibility, and high, with some promotional value.Key Words:Electric Password lock;Alarm; LCD Display目录引言 (1)第1章绪论 (2)1.1 电子密码锁的背景与研究意义 (2)1.2电子密码锁的现状及发展趋势 (2)1.3本章小结 (4)第2章系统整体方案设计 (4)2.1 设计目标 (4)2.2 主控部分的选择 (5)2.3 密码输入方式的选择 (5)2.4 本章小结 (5)第3章硬件系统设计 (6)3.1系统芯片介绍 (6)3.1.1单片机STC89C52功能介绍 (6)3.1.2 LCD1602显示器介绍 (7)3.1.3存储芯片AT24C02介绍 (8)3.1.4 I2C总线介绍 (8)3.2 硬件电路设计 (10)3.2.1 复位电路 (10)3.2.2 晶振电路 (11)3.2.3存储电路 (11)3.2.4 键盘输入电路 (13)3.2.5 显示电路 (13)3.2.6 电源输入电路 (14)3.2.7 报警电路 (15)3.2.8 开锁电路 (15)3.3 本章小结 (16)第4章软件程序设计 (17)4.1 主程序流程图 (17)4.2 按键软件设计 (17)4.2.1 按键功能程序流程图 (17)4.2.2 按键功能子程序 (18)4.3 密码设置软件设计 (19)4.3.1 密码设置程序流程图 (19)4.3.2 密码设置子程序 (20)4.4 开锁软件设计 (20)4.4.1 开锁程序流程图 (20)4.4.2 开锁功能子程序 (21)4.5 本章小结 (22)第 5 章系统仿真、调试及结论 (23)5.1 Proteus软件简介 (23)5.2 进入Proteus ISIS (23)5.3 工作界面 (23)5.4 各模块的电路图及说明 (25)5.4.1 电子密码锁系统主模块AT89C51单片机 (25)5.4.2 电子密码锁系统的键盘模块 (26)5.4.3 电子密码锁系统的显示模块 (26)5.4.4 电子密码锁系统的晶振复位电路 (27)5.4.5电子密码锁系统的掉电存储及报警电路 (27)5.4.6 电子密码锁系统的开锁电路 (27)5.4 本章小结 (28)结论与展望 (29)致谢 (30)参考文献 (31)附录A 密码锁电路原理图 (32)附录B 一篇引用的外文文献及其译文 (33)附录C 主要参考文献的题录及摘要 (39)附录D 主要C语言源程序 (41)插图清单图2- 1系统整体设计框图 (4)图3- 1 STC89C52引脚分布图 (6)图3- 2 AT24C02引脚图 (8)图3- 3开始结束信号图 (9)图3- 4复位电路原理图 (11)图3- 5晶振电路原理图 (11)图3- 6掉电存储电路原理图 (12)图3- 7键盘输入原理图 (13)图3- 8显示电路原理图 (14)图3- 9电源输入电路原理图 (14)图3- 10报警电路原理图 (15)图3- 11密码锁开锁机构示意图 (15)图3- 12开锁电路原理图 (16)图4- 1主程序流程图 (17)图4- 2按键功能流程图 (18)图4- 3密码设置流程图 (19)图4- 4开锁流程图 (21)图5- 1 Proteus启动时的屏幕 (23)图5- 2 Proteus ISIS的工作界面 (24)图5- 3 Proteus运行按键 (24)图5- 4 Proteus仿真图 (25)图5- 5 STC89C52单片机引脚图 (25)图5- 6键盘输入模块 (26)图5- 7密码显示模块 (26)图5- 8晶振及复位电路 (27)图5- 9掉电存储及报警电路 (27)图5- 10开锁电路 (28)表格清单表3-1 LCD1602引脚接口说明表 (8)表3-2 LCD1602基本操作程序 (15)引言在当今社会,安全防盗已成为社会问题,而锁自古以来就是防盗的重要工具,目前国内大部分人使用的还是传统的机械锁,然而,眼下假冒伪劣的机械锁互开率非常之高,此外,即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。

基于51单片机的智能密码锁设计

基于51单片机的智能密码锁设计

基于51单片机的智能密码锁设计摘要:目前使用的智能密码锁大多数是基于单片机技术,本次设计以AT89C51作为主控芯片与数据存储单元,结合矩阵键盘的输入、LCD液晶显示、报警、开锁等。

用keil软件编写的控制程序,设计了一款具有设定和修改密码,并且具有报警功能的智能密码锁控制系统。

这种密码锁具有设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有比较强的实用性。

关键词:矩阵键盘;LCD;电磁锁;报警The design of the intelligent password lock based on 51 single chip microcomputerAbstract:The intelligent password lock most currently used are based on single chiptechnology, the design takes AT89C51 as the main control chip and the data storage unit, combined with the matrix keyboard input, the LCD liquid crystal display, alarm, lock etc.. Control program is compiled with keil software, designed a set and modify the password, and has intelligent cipher alarm lock control system.The cipher lock has the advantages of simple design, easy development, low cost, safe and reliable, convenient, safe and file cabinets need security can be applied to residential, office space, a relatively strong practical.Keywords: matrix keyboard; LCD; electromagnetic lock; alarm目录1、引言.................................. 错误!未定义书签。

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告

基于51单片机的密码锁设计报告基于51单片机的密码锁设计报告一、引言随着人们对个人财产安全的关注日益加深,密码锁作为一种智能识别系统,能够提供比传统机械锁更高的安全性和便利性。

51单片机作为一种常见的微控制器,具有体积小、价格低廉、易于编程和扩展等优点,因此被广泛应用于各种控制系统。

在本设计中,我们将基于51单片机构建一个密码锁系统。

二、系统总体设计本系统主要由51单片机、液晶显示屏(LCD)、矩阵键盘、报警模块和电源模块组成。

其中,51单片机作为主控芯片,负责处理用户输入的密码、控制LCD显示和报警模块。

LCD用于显示用户输入的密码和操作提示信息。

矩阵键盘用于用户输入密码。

报警模块在密码错误时发出警报。

电源模块为系统提供稳定的工作电压。

三、硬件设计1、51单片机:采用AT89C51或STC89C52等常见的51单片机。

2、液晶显示屏:选用1602 LCD,显示效果清晰,操作简单。

3、矩阵键盘:采用4×4键盘,按键布局可根据实际需求调整。

4、报警模块:使用蜂鸣器和LED进行声音和灯光提示。

5、电源模块:为系统提供+5V稳定电压。

四、软件设计本系统的软件设计主要分为以下几个模块:1、密码管理:包括密码设置、密码修改和密码重置等功能。

2、密码验证:在用户输入密码后,系统通过与预设的密码进行比对,判断密码是否正确。

3、系统提示:通过LCD显示操作步骤和提示信息,引导用户正确使用密码锁。

4、报警处理:在密码错误时,启动报警模块,发出警报声音和灯光提示。

五、系统调试与结果在完成硬件设计和软件编程后,我们对系统进行了调试和测试。

结果表明,基于51单片机的密码锁系统能够实现预设的功能,包括密码输入、密码验证、错误提示和报警等。

同时,系统运行稳定,具有良好的可靠性和安全性。

六、结论本设计基于51单片机的密码锁系统,实现了对密码的存储、输入和验证等功能,具有较高的安全性和便利性。

通过扩展报警模块,系统能够有效地应对非法入侵等情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计目的1.1课题简介如何实现防盗是很多人关心的问题,传统的机械锁由于其构造简单,被撬的事件屡见不鲜,使人们的人身及财产安全受到很大威胁。

电子密码锁是一种依靠电子电路来控制电磁锁的开与闭的装置,开锁需要输入正确密码,若密码泄露,用户可以随时更改密码。

因此其保密性高,使用灵活性好,安全系数高,可以满足广大用户的需要,现在广泛使用的有红外遥控电子密码锁,声控密码锁,按键密码锁等。

1.2课题研究目的本设计是一种基于单片机的密码锁方案,根据基本要求规划单片机密码锁的硬件电路和软件程序,同时对单片机的型号选择、硬件设计、软件流程图、单片机存储单元的分配等都有注释。

现在很多地方都需要密码锁,电子密码锁的性能和安全性大大超过了机械锁,为了提高密码的保密性,必须可以经常更改密码,以便密码被盗时可以修改密码。

本次设计的密码锁具备的功能:LED数码管显示初始状态“——————”,用户通过键盘输入密码,每输入一位密码,LED数码管相应有一位变为“P”,若想重新输入密码,只需按下“CLR”键。

密码输入完毕后按确认键“#”,密码锁控制芯片将输入的密码与密码锁控制芯片中存储的密码相比,若密码错误,则不开锁,会有红灯亮提示,同时显示“Error”。

若正确,则开锁,会有绿灯亮提示,同时显示“PASS”。

用户可以根据实际情况随意改变密码值或密码长度,密码输入正确后可以按下“CHG”修改密码,输入新密码时每输入一位新密码相应有一位变为“H”,以便提示用户此时输入的是新密码,修改新密码时若想重新输入新密码只需按下“CLR”键即可。

输入新密码后按确认键即修改成功,新密码写入单片机内部RAM中,以便以后用来确认密码的正确性。

按下复位键,系统恢复初始状态,密码也恢复初始密码,本设计中初始密码是“096168”。

本次设计中硬件主要由我完成,软件主要由张振完成。

二、硬件设计2.1概述本系统主要由单片机最小系统、电源电路、输入键盘电路、输出显示电路、开锁电路等组成,系统框图如图1所示:图1 系统框图 2.2最小系统1.单片机:单片机最小系统包括单片机、晶振电路、复位电路等,最小系统是整个系统的核心部分,也是设计中首先应该设计的部分,其中单片机的选择直接决定着之后整个设计应该如何进行, 因为我们刚刚学完单片机,学习时是以MCS-51单片机为主的,对51系列单片机最熟悉,因此决定选用51系列单片机, 51系列单片机中Atmel89C51应用最为广泛,且价格较低,性能完全能满足本次设计,因此决定选用AT89C51芯片。

AT8 9C51外形及引脚排列如图2所示:图2 AT89C51外形及引脚排列AT89C51主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·1000次写入/擦除循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2.晶振电路图3 晶振电路AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。

这个放大器与作为反馈元件的片外石英晶体一起构成自激振荡器,晶振电路如图3所示。

石英晶体振荡电路对外接电容C2和C3虽没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度,一般电容使用30pF±10pF,这里使用30pF的独石电容。

因此晶振电路中使用12M晶振,30pF独石电容。

3.复位电路如图4所示为80C51单片机复位电路。

结合实际需求,本次设计加入了手动复位。

RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C51型单片机将复位,为保证微分脉冲宽度足够大,这里取10μF电容、10KΩ电阻。

若按下复位键,则C1被短路,R1两端电压为Vcc,产生的高电平时间足以使单片机复位图4 复位电路关于复位电路的计算如下:AT89C51的最低复位电平是0.7VccV1 为电容最终可充到的电压值Vt 为t时刻电容上的电压值则,Vt=V1×[1-exp(-t/RC)]即,t = RC×Ln[V1/(V1-Vt)]在C1充电到0.7Vcc前,R1上电压均大于0.7Vcc,即为有效复位电压,因此需要求电容充电到0.3Vcc的时间。

将V1=Vcc,Vt=0.3Vcc代入上式: 0.3VCC=Vcc×[1-exp(-t/RC)]即[1-exp(-t/RC)]=0.3;∴exp(-t/RC)=0.7∴- t/RC=ln(0.7)∴t/RC=ln(1.43) ln(1.43)≈0.35也就是t=0.35RC。

带入R=10K C=10μF得。

t=0.35×10K×10uf=35ms∵时钟周期T=1/f=1/12M=1μs∴2个机器周期=2T=4μs∴t>>2μs所以复位电路中电容选10μF电解电容,10K电阻,一只按键开关可以使电路上电复位和手动复位。

4.存储器设定电路最小系统电路的最后部分是存储器的设定,如果把31脚(EA)接地,则采用外部程序存储器,如果将其接Vcc,则采用内部程序存储器。

AT89C51具有4KB可编程闪烁存储器,足以满足本设计要求,因此不采用外部程序存储器,即将31脚(EA)接Vcc,如图5所示:图5 存储器设定电路2.3电源电路本次设计的电源采用以前模拟电路课程设计做的直流稳压电源,电源采用LM7805三端稳压器,外形及引脚排列如图6所示用LM7805来组成稳压电源所需的外围元件较少,LM7805电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。

该系列集成稳压IC型号中的LM78xx后面的数字代表该三端集成稳压电路的输出电压,如lm7805表示输出电压为正5V ,因为本设计中单片机和各个芯片的工作电压均为5V ,因而采用LM7805。

图6 LM7805图7 直流稳压源电路电源电路如图7所示,220V 市电通过变压器降压成12V 的交流电,经过整流桥整流,再经7805稳压到5V 。

C1、C2和C3具有滤波功能,使电流更加稳定,保证了系统的稳定运行。

2.4键盘电路本设计采用矩阵式键盘,又称行列式键盘,是将I/O 线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,行列线分别连接到按键开关的两端,当键按下时,两导线连通。

这种设计能减少键盘与单片机I/O 接线的数目,只需要N 个行线和M 个列线就可以实现N ×M 个键的操作,在按键比较多的时候,通常采用这种方法。

其电路如图8所示:图8 矩阵式键盘电路图行线作为输入,通过上拉电阻接+5V ,被钳位在高电平状态。

列线作为输出,7805通过列线输出扫描码,通过行线读入行线状态来判断是哪一键被按下。

图示电路中各键的键值从第一行左起依次为11H、 12H、 14H、18H、21H、22H、24H、28H、41H、42H、44H、48H、81H、82H、84H、88H。

键盘各键值通过查键值表可以转换为相应的代码,代表不同的值。

本设计中要用到13个键,分别为0~9键用于输入六位密码,确认键‘#’用于输入密码完毕后确认,清除键‘CLR’用于想重新输入时清楚之前输入的密码,修改密码键‘CHG’用于输入密码验证正确后选择修改密码,剩余三个键未用,可以留待以后扩展功能,键盘如图9所示:图9 键盘2.5显示电路本系统设计的显示电路是为了给用户以提示而设置的。

考虑到节约单片机的口资源,本系统的显示采用串行显示的方式,只使用单片机的两个串行口P3.0(RXD)和P3.1(TXD),就可以完成单片机的显示功能。

本部分电路主要使用七段数码管和移位寄存器芯片74LS164。

单片机将要显示的数据信号传送到移位寄存器芯片74LS164寄存,再由移位寄存器控制数码图10 74LS164管脚图管的显示,从而实现移位寄存点亮数码管显示。

由于单片机的时钟频率达到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输的。

仿佛是全部数码管同时显示的一样。

74LS164是串行输入带锁存的8位移位寄存器,其管脚图见图10,真值表见表1当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。

串行数据输入端(A,B)可控制数据。

当 A、B 任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下 Q0 为低电平。

当 A、B 有一个为高电平,则另一个就允许输入数据,并在 CLOCK 上升沿作用下决定 Q0 的状态. 表1 74LS164真值表74LS164主要特性:串行输入带锁存时钟输入,串行输入带缓冲异步清除最高时钟频率可高达36Mhz功耗:10mW/bit工作温度:0°C to 70°CVcc最高电压:7V输入最高电压:7V最大输出驱动能力:高电平:-0.4mA数码低电平:8mA图11 LED数码管显示电路显示电路如图11所示,每一片74LS164的CLR端均接Vcc。

从单片机串口输出的信号先送到第1片移位寄存器74LS164的AB端,由于移位脉冲的作用,使数据向右移最终从移到Q7脚,第1片的Q7脚接第2片的AB端,以此类推,在移位寄存器的移位作用下,第1个8位数据送到第6片74LS164,第2个8位数据送到第5片74LS164,以此类推,每一个八位数据出现在74LS164的并行输出端,每片74LS164的八个输出脚接七段数码管数码管的八个输入数据脚,七段数码管数码管根据74LS164上的数据状态显示相应的数字,从而达到显示的目的,移位寄存器74LS164还兼作数码管的驱动。

数码管按段数分为七段数码管和八段数码管,其外形及管脚图如图12所示,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形图12 七段共阳极数码管外形及管脚图成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

相关文档
最新文档