基于51单片机简易密码锁设计

合集下载

基于51单片机密码锁设计与调试 电子信息工程毕业设计论文

基于51单片机密码锁设计与调试 电子信息工程毕业设计论文

目录第一部分设计任务与调研 (1)第二部分设计说明 (2)第三部分设计成果 (5)第四部分结束语 (11)第五部分致谢 (12)第六部分参考文献 (13)第一部分设计任务与调研1.1设计的主要任务给抽屉设计一个四位密码的单片机密码锁控制系统,实现开锁功能,自动报警功能,改密功能,并取得仿真模拟调试成功。

1.2设计的思路本设计采用单片机为主控芯片,结合外围电路,组成电子密码锁,为了防止密码被窃取要求在输入密码时在LCD屏幕上显示*号,开锁密码位为四位。

能够让LCD1602显示器在密码正确时显示open!,密码错误时显示ERROR,输入密码时显示PASSWORD。

实现输入密码错误超过限定的三次电子密码时报警。

1.3设计的方法使用学校编写程序所学的单片机和C语言知识,利用在电工实训中学到的焊接技术焊接控制模块和LED接线及CAD所学的知识绘制驱动电路和控制电路,制作详细的设计方案和资料搜集后进行实际操作,通过程序设计,模拟仿真调试,修订完善后制作出成品。

1.4调研的目的和总结由于对电子密码锁的一些情况并不了解,为了使自己的电子密码锁能够更加完善,所以需要查阅大量的资料,通过查阅的资料与自己的想法进行一些结合做出取舍,最后获得了一些总结。

本设计从经济实用的角度出发,采用宏晶公司的单片机STC89C51与低功耗CMOS型作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警、开锁等电路,用C语言编写主控芯片的控制程序,设计了一款可以多次更改密码具有报警功能的电子密码锁。

经实验证明,该密码锁具有设计方法合理,简单易行,成本低,安全实用等特点,符合住宅、办公室用锁要求,具有推广价值。

第二部分设计说明2.1设计方案2.1.1系统框架图本次设计选用单片机STC89C51作为系统的核心元件,利用单片机灵活的编程设计和丰富的IO端口及其控制的准确性,实现基本的密码锁功能。

在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD1602显示器用于显示作用。

大学毕设论文__基于51单片机的密码锁设计程序

大学毕设论文__基于51单片机的密码锁设计程序

#include "1302.h"void write_ds1302_byte(uchar dat){uchar i;for(i=0;i<8;i++){T_IO=dat&0x01;T_CLK=1;T_CLK=0;dat=dat>>1;}}uchar read_ds1302_byte(){uchar i;for(i=0;i<8;i++){ACC=ACC>>1;ACC7=T_IO;T_CLK=1;T_CLK=0;}return (ACC);}void write_ds1302_dat(uchar addr,uchar dat) {T_EN=0;T_CLK=0;T_EN=1;write_ds1302_byte(addr);write_ds1302_byte(dat);T_CLK=1;T_EN=0;}uchar read_ds1302_data(uchar addr){uchar date;T_EN=0;T_CLK=0;T_EN=1;write_ds1302_byte(addr);date=read_ds1302_byte();T_EN=0;T_CLK=0;return (date);}void set_real_time(uchar *pclock){uchar i,addr=0x80;EA=0;write_ds1302_dat(0x8e,0x00);for(i=0;i<7;i++){write_ds1302_dat(addr,*pclock);pclock++;addr+=2;}// write_ds1302_dat(0x8e,0x80);EA=1;}void get_real_time(uchar Curtime[]){uchar j;uchar address=0x81;EA=0;for(j=0;j<7;j++){Curtime[j]=read_ds1302_data(address);address+=2;}EA=1;}#ifndef __1302_H__#define __1302_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit T_IO=P2^5;sbit T_CLK=P2^4;sbit T_EN=P1^0;sbit ACC0=ACC^0;sbit ACC7=ACC^7;void write_ds1302_byte(uchar dat);uchar read_ds1302_byte();void write_ds1302_dat(uchar addr,uchar dat);uchar read_ds1302_data(uchar addr);void set_real_time(uchar *pclock);void get_real_time(uchar Curtime[]);#endif#include "delay.h"#include "1602.h"void lcd_busy_wait() /*LCD1602 忙等待*/{lcd_rs_port = 0;lcd_rw_port = 1;lcd_en_port = 1;lcd_data_port = 0xff;while (lcd_data_port&0x80);lcd_en_port = 0;}void write_com(uchar command) /*LCD1602 命令字写入*/ {lcd_busy_wait();lcd_rs_port = 0;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = command;lcd_en_port = 1;lcd_en_port = 0;}void write_data(uchar dat)lcd_busy_wait();lcd_rs_port=1;lcd_rw_port =0;lcd_en_port=0;P0=dat;lcd_en_port=1;lcd_en_port=0;}void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat) {x_pos&=0x0f;y_pos&=0x01;if(y_pos==0){x_pos=x_pos+0x80;}else{x_pos=x_pos+0x80+0x40;}write_com(x_pos);lcd_busy_wait();lcd_rs_port=1;lcd_rw_port=0;lcd_en_port=0;P0=dat;lcd_en_port=1;lcd_en_port=0;}void lcd_init() /*LCD1602 初始化*/{lcd_delay(20);write_com(0x38);lcd_delay(100);write_com(0x38);lcd_delay(50);write_com(0x38);lcd_delay(10);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0c);lcd_data_port = 0xff; /*释放数据端口*/}#ifndef __1602_H__#define __1602_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcd_rs_port=P3^5;sbit lcd_rw_port=P3^6;sbit lcd_en_port=P3^4;#define lcd_data_port P0void lcd_busy_wait();void write_com(uchar command);void write_data(uchar dat);void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat); void lcd_init();#endif#include "2402.h"#include "delay.h"void i2c_start(){scl=1;delay1();sda=1;delay1();sda=0;delay1();}void i2c_stop(){sda=0;delay1();scl=1;delay1();sda=1;delay1();}void i2c_ack(){uchar i;scl=1;delay1();while((sda==1)&&(i<250)) i++;scl=0;delay1();}void i2c_nack(){scl=1;delay1();sda=1;scl=0;delay1();}void i2c_write_byte(uchar date)// { //uchar i,temp;temp=date;for(i=0;i<8;i++)//{ //temp=temp<<1;//scl=0; //delay1();; //sda=CY;//delay1();//scl=1;//} //scl=0; //delay1();//sda=1;//delay1();//}//uchar i2c_read_byte(){uchar i,temp=0;scl=0;// delay1();;// sda=1;delay1();for(i=0;i<8;i++){temp=temp<<1;scl=1;delay1();temp=temp|sda;scl=0;delay1();}return (temp);}void write_at2404(uchar addr,uchar dat) {i2c_start();i2c_write_byte(0xa0);i2c_ack();i2c_write_byte(addr);i2c_ack();i2c_write_byte(dat);i2c_ack();i2c_stop();delay3(5000);}uchar read_at2402(uchar addr){uchar temp;i2c_start();i2c_write_byte(0xa0);i2c_ack();i2c_write_byte(addr);i2c_ack();i2c_start();i2c_write_byte(0xa1);i2c_ack();temp=i2c_read_byte();i2c_nack();i2c_stop();return (temp);}#ifndef __2402_H__#define __2402_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit scl=P2^1;sbit sda=P2^0;void i2c_start();void i2c_stop();void i2c_ack();void i2c_nack();void i2c_write_byte(uchar);uchar i2c_read_byte();//void write_at2404(uchar addr,uchar dat); uchar read_at2402(uchar addr);#endif#include"delay.h"void delay(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=200;b>0;b--);}void lcd_delay(uchar ms) {uchar j;while(ms--){for(j=0;j<250;j++){;}}}void delay1(){ ; ;}void delay3(uint q){uint e;for(e=0;e<q;e++);}#ifndef __DELAY_H__#define __DELAY_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned intvoid delay(uchar x);void lcd_delay(uchar ms); void delay1();void delay3(uint m);#endif#include "display.h"void display(){P0=0;dula=1;dula=0;P0=0x7f;wela=1;wela=0;}#ifndef __DISPLAY_H__#define __DISPLAY_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;void display();#endif#include "delay.h"//一般放在最前面这个前后由调用先后决定着#include "scan.h"#include "1602.h"//extern void write_data(uchar dat);//extern void write_com(uchar command);uchar key;uchar temp,count,aa,bb,cc; /*一般将这些变量定义在C文件中当主函数需要时用extern引用*/ bit shu_flag,modify_flag,rst;bit fun_flag; //功能键标志位没使用bit down_flag,up_flag,open_flag;void keyscan(){P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){case 0xee: key=0;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xde: key=1;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xbe: key=2;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0x7e: key=3;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;// write_data('*');count++;}while(temp!=0xf0);{temp=P1;temp=temp&0xf0;}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){case 0xed: shu_flag=1;key=4;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break; //aa,bb,cc定时器中使用case 0xdd: shu_flag=1;key=5;write_data('*'); //每次按键清零count++;if(count>6) count=0;aa=0;bb=0;cc=0;break; //保证在按键器件不会自动返回case 0xbd: shu_flag=1;key=6;write_data('*'); //count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0x7d: shu_flag=1;key=7;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500); // 松手检测屏蔽蜂鸣器噪音污染}// beep=1;// write_data('*');count++;}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){ //fun_flag 功能键标志位case 0xeb: key=8; shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xdb: key=9; shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xbb: modify_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break; //修改键case 0x7b: rst=1;fun_flag=1;aa=0;bb=0;cc=0;break; //返回键}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){ //清除键case 0xe7: //key=12;shu_flag=1;break;aa=0;bb=0;cc=0;switch(count){case 1: write_com(0x80+0x40+5);write_data(' ');write_com(0x80+0x40+5);break;case 2: write_com(0x80+0x40+6);write_data(' ');write_com(0x80+0x40+6);break;case 3: write_com(0x80+0x40+7);write_data(' ');write_com(0x80+0x40+7);break;case 4: write_com(0x80+0x40+8);write_data(' ');write_com(0x80+0x40+8);break;case 5: write_com(0x80+0x40+9);write_data(' ');write_com(0x80+0x40+9);break;case 6: write_com(0x80+0x40+0x0a);write_data(' ');write_com(0x80+0x40+0x0a);break;}case 0xd7: key=13;up_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break; //开门键case 0xb7: key=14;down_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break;case 0x77: key=13;open_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break;while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;if(count>0) count--;break;} //清除数字}}}#ifndef __SCAN_H__#define __SCAN_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid keyscan();#endif/***********************************************************名称:电子密码锁时间:2014年8月2日16:33:48 WRITE BY:KengkengToday is Valentine's Day程序功能:1 :开机1302显示时间,按下key15:开门键进入输入密码界面2 :输入密码输入错误超过三次电子锁锁死倒计时60s之后重新设置蜂鸣器快速响3 :输入正确进入菜单页面两个选择key13:开门key10:修改密码4 :修改已输入密码可由key12键清除重新输入5 :选择key13开门打开继电器显示倒计时15s开门蜂鸣器慢响提示15s内开门否则15后关门关闭继电器并自动返回时间页面6 :选择key10修改密码共两次两次密码一致时设置成功否则会一直提示输入密码7 :修改的密码存入2402中上电读出8 :修改密码无限循环直到输入正确为止可以使用key11:返回键返回9 :在10s内无任何按键按下时自动返回时间页面可重新进入10:在20s内无任何按键按下时进入掉电模式外部中断唤醒键盘列表:00 01 02 0304 05 06 0708 09 修改返回清除开锁切换开门修改modify_flag 返回rst 清除key12 //切换down_flag// 开锁up_flag 开门open_flag//切换的功能跟返回大致相同***********************************************************/#include<reg52.h>#include<intrins.h>#include "delay.h" //delay.h最好放在最前面#include "scan.h"#include "1302.h"#include "2402.h"#include "1602.h"#include "display.h"#define uchar unsigned char#define uint unsigned intextern uchar key;extern uchar temp,count,aa,bb,cc; /*一般将这些变量定义在C文件中extern声明不是定义当主函数需要时用extern引用*/extern bit shu_flag,modify_flag,rst;extern bit fun_flag; //功能键标志位没使用extern bit down_flag,up_flag,open_flag;uchar data lcd1602_line1[]={" 2014/08/02 000"};uchar data lcd1602_line2[]={" 10:42:50 "};uchar data time_data_buff[7]={0x50,0x42,0x10,0x02,0x08,0x06,0x14};uchar code Weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};//二维数组八行三列bit mod_flag,rst_flag;uchar code num_to_char[] = {"0123456789ABCDEF"};uchar k,s,w;bit return_flag=0;//切换时间页面标志位bit sleep_flag;//进入掉电模式标志位uchar m,l;bit k_flag=0;bit b_flag=0; //倒计时标志位bit flag10; //保护标志位bit flag3,flag4,flag2,flag1;/*数字标志位修改密码标志位返还标志位1 2 3 4 保护数据标志位,防重复写入*/ sbit beep=P2^3;//sbit sda=P2^0; //IO口定义//sbit scl=P2^1;uchar code table[]={"Enter password:"};uchar code table1[]={"Error!try again:"};uchar code table2[]={"Welcome to China"};uchar code table4[]={"Set password: "};uchar code table5[]={"Input again: "};uchar code table6[]={" Fuck you!!! "};uchar code table7[]={" Get out!!!! "};uchar code table8[]={" Set succed "};uchar code table9[]={"Be patient..."};uchar code table10[]={" Count down..."};uchar code table12[]={"Please select "};uchar code table13[]={"KEY10:For modify"};uchar code table14[]={"KEY13:For open "};uchar code table15[]={"Open the door"};void T0_init(){TMOD=0x11;TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。

基于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.In traditional identity, we tend to use password encryption method, but this method only "anti-anti-villain is not a gentleman." In the eyes of clever hackers, password consists of several characters fragile too vulnerable. Now, the development of science and technology so that we have a new option - biometrics. The biometric technology used in notebook, door locks, etc., they can file for protection of property, and can be identifiable. biometric technology in fingerprint primary origin research, it is also the most widely used biometric technology.The system design of fingerprint recognition electron password lock based on Single-chip microprocessor is developed in the thesis. The system STC89C52 MCU as the core module, through the serial communication control ZFM-60 fingerprint module for taking fingerprints and store fingerprint data and liquid crystal display by HS12864-15C ratio than on the processes and results, supported by simulation of DC relays and LEDs unlock action. The system is small, cost-effective, and fast and suitable for families and units.Key Words:Single-chip microprocessor, password, Fingerprint recognition目录第一章绪论 (1)1.1课题研究意义 (1)1.2国内外指纹密码锁发展历史及现状 (3)1.3本文主要内容 (4)第二章整体设计方案 (5)2.1方案比较与论证 (5)2.2系统总体设计 (7)2.2.1 系统功能描述 (7)2.2.2系统总体框架 (7)2.3本章小节 (8)第三章系统硬件设计 (9)3.1单片机及最小系统 (9)3.1.1 STC89C52单片机介绍 (9)3.1.2外部晶振设计 (12)3.1.3复位电路设计 (13)3.2指纹模块设计 (15)3.2.1指纹识别技术简介 (15)3.2.2 指纹模块简介 (16)3.2.3 指纹模块指令 (18)3.2.4 指纹模块接口电路设计 (21)3.3按键电路设计 (21)3.4液晶显示模块设计 (23)3.4.1 FYD12864工作流程 (24)3.4.2 FYD12864指令说明 (24)3.4.3 FYD12864液晶显示接口电路设计 (29)3.5本章小节 (31)第四章系统软件设计 (32)4.1系统工作过程分析 (32)4.2主程序流程图 (33)4.3键盘程序流程设计 (35)4.4LCD显示模块程序流程设计 (35)4.5指纹识别程序设计 (36)4.5.1 指纹模块通讯协议说明 (36)4.5.2 指纹模版的采集存储 (38)4.5.3 指纹比对程序设计 (39)4.6K EIL编程 (40)4.7本章小结 (41)第五章实物制作与调试 (42)5.1电路的焊接 (42)5.2程序的烧写 (44)5.3小灯、继电器的调试 (45)5.4液晶的调试 (45)5.5指纹模块、按键的调试 (46)5.6本章小结 (47)总结 (48)参考文献 (49)附录一 (50)附录二 (51)英文原文 (56)中文翻译 (65)第一章绪论我们今天的工作生活中,很多场合需要身份验证。

基于51单片机电子密码锁的设计.doc

基于51单片机电子密码锁的设计.doc

基于51单片机电子密码锁的设计..西安文理学院机械电子工程系专业课程设计报告专业班级课程题目学号学生姓名指导教师年月基于51单片机电子密码锁的设计摘要在这个信息和科技高速发展的时代,人们的生活水平越来越高,随之应运而生的人们的安全意识也越来越强,然而传统的机械锁由于设计和工艺简单,操作和携带不便,已经不能满足人们对于安全保证和生活便利的需求,于是电子密码锁本着它自身的保密性高、操作简单、灵活好用等特性逐渐进入人们的视野,并已被广大群众接纳和使用。

此次设计是以AT89C51单片机实现密码锁监控装置的检测和控制核心,实现密码信息的设定、加密、更改和错误输入发出警报等功能。

分为键盘输入(此处采用4×4矩阵键盘),显示输出(此处用LED显示屏),密码比对,实现开锁或警报的过程。

该设计根据51单片机之间的串行通信原理,便于对密码信息的随机加密和保护。

软件设计则是采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。

测试结果表明,该系统已达到本设计的各项功能的所有要求。

关键词:单片机;密码锁;4*4矩阵键盘;显示屏。

word教育资料目录1 绪论11.1 引言11.2 电子密码锁的背景11.3 键盘式电子密码锁的特点12 系统设计22.1系统总设计结构图22.2.开锁机构设计2 2.2.1主控芯片(AT89C51单片机)的简介33 系统硬件设计53.1键盘设计53.2系统电路设计63.2.1 键盘电路及连线图63.2.2数码管显示电路及连线图73.2.3开锁和警报电路及连线图(由LED和扬声器电路代替)8 3.3整体电路图的绘制84 软件设计104.1 系统软件设计思路104.2系统软件设计总流程图105 程序调试125.1 程序调试需要用到的软件和工具12word教育资料5.2 调试过程126 设计总结12致谢13参考文献14附录15word教育资料第一章绪论1.1 引言在这个信息和科技高速发展的时代,人们的生活水平越来越高,随之应运而生的人们的安全意识也越来越强,然而传统的机械锁由于设计和工艺简单,操作和携带不便,已经不能满足人们对于安全保证和生活便利的需求,于是电子密码锁本着它自身的保密性高、操作简单、灵活好用等特性逐渐进入人们的视野,并已被广大群众接纳和使用。

基于51单片机的电子密码锁---毕业论文

基于51单片机的电子密码锁---毕业论文

目录摘要........................................................... I I Abstract ....................................................... I II1 绪论 (1)2 系统的总体设计和主要元器件介绍 (2)2.1 系统方案论证选择 (2)2.2 系统的总体思路设计 (3)2.3 主要元器件介绍 (3)2.3.1 AT89C51介绍 (3)2.3.2 继电器介绍 (6)2.3.3 LED数码管介绍 (7)2.3.4 矩阵键盘介绍 (7)3、硬件设计 (9)3.1 单片机主控制模块(含晶振、复位基本工作电路) (9)3.2 键盘输入模块 (9)3.3 显示模块 (10)3.4 报警模块 (11)3.5 开锁模块 (11)4、软件设计 (12)4.1 系统程序设计流程图 (12)4.2 系统程序设计 (12)5、系统仿真设计 (17)5.1 Proteus 软件介绍 (17)5.2 Proteus 仿真图 (18)总结 (19)参考文献 (20)附录 (21)致谢 (27)基于单片机的电子密码锁仿真设计摘要电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

本文以AT89C51单片机为核心器件,结合按键电路、LED数码管显示电路、报警指示电路和开锁机构,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性通过软件程序来控制整个系统实现电子密码锁的基本功能,其主要具有如下功能:●密码通过键盘输入,若密码正确,则将锁打开●密码输入错误,蜂鸣器将报警提示●用户可以自由设定密码本密码锁具有设计方法合理,简单易行成本低,安全实用等特点,具有一定的推广价值。

基于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。

一种简单的基于51单片机的电子密码锁设计

一种简单的基于51单片机的电子密码锁设计

一种简单的基于51单片机的电子密码锁设计
是来自上世纪中期美国一位名叫摩尔斯的发明家,他发明了在电报传输使
用中所运用的编码,因此摩斯密码有时也称作为摩尔斯密码,它是由一个输入
按键在输入时按住时间间隔的长短来决定的:其中短促的电信号“.”读作“DI”,而
长时间保持按键不动的“-”读作“DA”,具体而言,“滴”的间隔时间为1T,“嗒”的间
隔时间为3T,“嘀嗒”的间隔时间为1T ;字母之间的间隔时间为3T,字与字之间的间隔时间为5T,下面具体列出各个字符和摩斯密码的对照表。

2.4 电路焊接
首先电路焊接所需要的工具,如下图所示
本电子密码锁的系统电路的主芯片是AT89C51, 其中包括时钟脉冲、电阻、电解电容以及由一个按键构成的复位电路,还有一个由八段数码管组成的
密码显示器以及一个蜂鸣器和五个LED 灯管,一个NPN 三极管和一个继电器,结合上面所述的驱动电路构成了此电子密码锁的系统电路。

tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

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

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

基于51单片XX码锁的设计电子密码锁是一种通过输入密码来控制芯片或电路工作,从而控制机械开关的闭合,完成密码锁的开锁、闭锁任务的电子产品。

它有很多的种类,包括简易的电路产品,也有性价比比较高的基于芯片的产品。

现在应用比较多的电子密码锁主要以芯片为主,内部通过编程实现实际功能。

本次毕业设计通过单片机C51语言编写密码程序,用3-8译码器和74LS138驱动的数码管来显示密码数字数码管以“—〞来实时显示当前输入密码的个数。

{ 94 %:当输入密码正确时,对应的指示灯变亮;当密码不正确时,另一个对应的指示灯变亮并且发出蜂鸣声报警。

}关键词:AT89S51;单元电路;密码程序;C51语言;电子密码锁目录第一章绪论11.1 电子密码锁的背景11.2 电子密码锁的开展趋势11.3 本设计要实现的目标2第二章系统方案比照与确认42.1 系统根本方案42.1.1系统框图42.1.2各模块方案选择与论证52.1.3系统各模块的最终方案5第三章系统的硬件设计与实现113.1 系统硬件概述113.2 主要单元电路的设计123.2.1键盘扫描模块电路的设计113.2.2单片机控制模块电路的设计113.2.3声光报警模块电路的设计113.2.4数码显示模块电路的设计11第四章系统软件设计174.1 系统软件的概述174.2 子程序的设计194.2.1 自检子程序174.2.2 键盘扫描子程序174.2.3 位移子程序184.2.4 开锁子程序174.2.5 修改密码子程序18第五章系统仿真与调试215.1 系统仿真过程215.2 仿真调试过程中遇到的困难及解决方法21致谢22参考文献22附录1系统电路图22附录2系统程序22附录3系统使用说明书22第一章绪论1.1电子密码锁的背景{ 44 %:由于应用科技的不断开展,锁的成员已经包括声控锁、电子锁、磁性锁、密码锁、机械锁等等。

} {46 %:开锁时,在金属钥匙的根底上,添加一种或多种密码,并组合不同图像,不同声音等〔如视网膜、指纹等〕来控制锁的开启。

一种简单基于51单片机的电子密码锁设计应用

一种简单基于51单片机的电子密码锁设计应用

一种简单基于51单片机的电子密码锁设计应用
单片机电子密码锁的背景和设计特点
 在高科技迅速发展的今天,人们已经发明了密码锁、电子锁和激光锁等多种形式。

这些锁在传统钥匙的基础上,利用磁场、声波和光束等多种方式来控制锁的开启和关闭,从而有效地增强了锁的安全性,保护了人们的生命财产和安全,有效地防止盗贼的光顾。

 单片机又称为单片微电脑或者单片微型计算机,它有效的集合了中央处理器、只读存储器、随机存取存储器和输入输出端口等计算机功能部件。

计算机体积庞大,不易携带,导致单片机的应运而生,电子密码锁就是在单片机的外部接上简单的电路,人为的写入程序来完成其核心部分,这样不仅能够缩小锁的体积还能够降低成本,保持精度,并且能够有效的升级和改善电子密码锁。

 单片机密码锁的系统设计
 1、单片机密码锁系统的总设计结构图
 2、单片机开锁机构的设计
 单片机开锁机构的设计是将单片机送入开锁执行的机构,促使电路驱动和电磁锁吸合,进而开锁。

本文设计的电子锁通过P3.0 来接入三极管进而驱动继电器来打开电磁阀线圈进而实现开门和关门。

 根据上面的图形可知,当用户在规定的时间和输入次数内输入的密码正确时,单片密码锁便输出开门的信号,将信号传送到驱动开锁的电路,进而驱。

一种简单51单片机电子密码锁设计

一种简单51单片机电子密码锁设计

一种简单51单片机电子密码锁设计
是来自上世纪中期美国一位名叫摩尔斯的发明家,他发明了在电报传输使用中所运用的编码,因此摩斯密码有时也称作为摩尔斯密码,它是由一个输入按键在输入时按住时间间隔的长短来决定的:其中短促的电信号.读作DI,而长时间保持按键不动的-读作DA,具体而言,滴的间隔时间为1T,嗒的间隔时间为3T,嘀嗒的间隔时间为1T ;字母之间的间隔时间为3T,字与字之间的间隔时间为5T,下面具体列出各个字符和摩斯密码的对照表。

2.4 电路焊接首先电路焊接所需要的工具,如下图所示
本电子密码锁的系统电路的主芯片是AT89C51, 其中包括时钟脉冲、电阻、电解电容以及由一个按键构成的复位电路,还有一个由八段数码管组成的密码显示器以及一个蜂鸣器和五个LED 灯管,一个NPN 三极管和一个继电器,结合上面所述的驱动电路构成了此电子密码锁的系统电路。

单片电子密码锁的软件设计
3.1 单片电子锁的系统软件设计整体思路
单片电子锁的应用系统如果要完美的完成各项功能,首先必须要有比较完整的硬件当做保证,其次要得到与之想适应的设计比较合理的软件进行支持。

这是因为在信息技术飞速发展的今天,软件编程逐渐代替了许多过去用硬件完成的工作,对于一些需要很复杂的硬件电路完成的工作,如果选用软件编程则会简单了许多。

针对上述情况,充分采取和利用丰富的软件和硬件资源,采用与C51 系列单片机相适应的51 汇编语言与结构化的程序设计方法进行相应的软件编程。

3.2 单片机电子密码锁系统软件的设计流程图
4 单片电子密码锁的程序调试。

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

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

#include "1302.h"void write_ds1302_byte(uchar dat){uchar i;for(i=0;i<8;i++){T_IO=dat&0x01;T_CLK=1;T_CLK=0;dat=dat>>1;}}uchar read_ds1302_byte(){uchar i;for(i=0;i<8;i++){ACC=ACC>>1;ACC7=T_IO;T_CLK=1;T_CLK=0;}return (ACC);}void write_ds1302_dat(uchar addr,uchar dat) {T_EN=0;T_CLK=0;T_EN=1;write_ds1302_byte(addr);write_ds1302_byte(dat);T_CLK=1;T_EN=0;}uchar read_ds1302_data(uchar addr){uchar date;T_EN=0;T_CLK=0;T_EN=1;write_ds1302_byte(addr);date=read_ds1302_byte();T_EN=0;T_CLK=0;return (date);}void set_real_time(uchar *pclock){uchar i,addr=0x80;EA=0;write_ds1302_dat(0x8e,0x00);for(i=0;i<7;i++){write_ds1302_dat(addr,*pclock);pclock++;addr+=2;}// write_ds1302_dat(0x8e,0x80);EA=1;}void get_real_time(uchar Curtime[]){uchar j;uchar address=0x81;EA=0;for(j=0;j<7;j++){Curtime[j]=read_ds1302_data(address);address+=2;}EA=1;}#ifndef __1302_H__#define __1302_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit T_IO=P2^5;sbit T_CLK=P2^4;sbit T_EN=P1^0;sbit ACC0=ACC^0;sbit ACC7=ACC^7;void write_ds1302_byte(uchar dat);uchar read_ds1302_byte();void write_ds1302_dat(uchar addr,uchar dat);uchar read_ds1302_data(uchar addr);void set_real_time(uchar *pclock);void get_real_time(uchar Curtime[]);#endif#include "delay.h"#include "1602.h"void lcd_busy_wait() /*LCD1602 忙等待*/{lcd_rs_port = 0;lcd_rw_port = 1;lcd_en_port = 1;lcd_data_port = 0xff;while (lcd_data_port&0x80);lcd_en_port = 0;}void write_com(uchar command) /*LCD1602 命令字写入*/ {lcd_busy_wait();lcd_rs_port = 0;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = command;lcd_en_port = 1;lcd_en_port = 0;}void write_data(uchar dat)lcd_busy_wait();lcd_rs_port=1;lcd_rw_port =0;lcd_en_port=0;P0=dat;lcd_en_port=1;lcd_en_port=0;}void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat) {x_pos&=0x0f;y_pos&=0x01;if(y_pos==0){x_pos=x_pos+0x80;}else{x_pos=x_pos+0x80+0x40;}write_com(x_pos);lcd_busy_wait();lcd_rs_port=1;lcd_rw_port=0;lcd_en_port=0;P0=dat;lcd_en_port=1;lcd_en_port=0;}void lcd_init() /*LCD1602 初始化*/{lcd_delay(20);write_com(0x38);lcd_delay(100);write_com(0x38);lcd_delay(50);write_com(0x38);lcd_delay(10);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0c);lcd_data_port = 0xff; /*释放数据端口*/}#ifndef __1602_H__#define __1602_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit lcd_rs_port=P3^5;sbit lcd_rw_port=P3^6;sbit lcd_en_port=P3^4;#define lcd_data_port P0void lcd_busy_wait();void write_com(uchar command);void write_data(uchar dat);void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat); void lcd_init();#endif#include "2402.h"#include "delay.h"void i2c_start(){scl=1;delay1();sda=1;delay1();sda=0;delay1();}void i2c_stop(){sda=0;delay1();scl=1;delay1();sda=1;delay1();}void i2c_ack(){uchar i;scl=1;delay1();while((sda==1)&&(i<250)) i++;scl=0;delay1();}void i2c_nack(){scl=1;delay1();sda=1;scl=0;delay1();}void i2c_write_byte(uchar date)// { //uchar i,temp;temp=date;for(i=0;i<8;i++)//{ //temp=temp<<1;//scl=0; //delay1();; //sda=CY;//delay1();//scl=1;//} //scl=0; //delay1();//sda=1;//delay1();//}//uchar i2c_read_byte(){uchar i,temp=0;scl=0;// delay1();;// sda=1;delay1();for(i=0;i<8;i++){temp=temp<<1;scl=1;delay1();temp=temp|sda;scl=0;delay1();}return (temp);}void write_at2404(uchar addr,uchar dat) {i2c_start();i2c_write_byte(0xa0);i2c_ack();i2c_write_byte(addr);i2c_ack();i2c_write_byte(dat);i2c_ack();i2c_stop();delay3(5000);}uchar read_at2402(uchar addr){uchar temp;i2c_start();i2c_write_byte(0xa0);i2c_ack();i2c_write_byte(addr);i2c_ack();i2c_start();i2c_write_byte(0xa1);i2c_ack();temp=i2c_read_byte();i2c_nack();i2c_stop();return (temp);}#ifndef __2402_H__#define __2402_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit scl=P2^1;sbit sda=P2^0;void i2c_start();void i2c_stop();void i2c_ack();void i2c_nack();void i2c_write_byte(uchar);uchar i2c_read_byte();//void write_at2404(uchar addr,uchar dat); uchar read_at2402(uchar addr);#endif#include"delay.h"void delay(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=200;b>0;b--);}void lcd_delay(uchar ms) {uchar j;while(ms--){for(j=0;j<250;j++){;}}}void delay1(){ ; ;}void delay3(uint q){uint e;for(e=0;e<q;e++);}#ifndef __DELAY_H__#define __DELAY_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned intvoid delay(uchar x);void lcd_delay(uchar ms); void delay1();void delay3(uint m);#endif#include "display.h"void display(){P0=0;dula=1;dula=0;P0=0x7f;wela=1;wela=0;}#ifndef __DISPLAY_H__#define __DISPLAY_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;void display();#endif#include "delay.h"//一般放在最前面这个前后由调用先后决定着#include "scan.h"#include "1602.h"//extern void write_data(uchar dat);//extern void write_com(uchar command);uchar key;uchar temp,count,aa,bb,cc; /*一般将这些变量定义在C文件中当主函数需要时用extern引用*/ bit shu_flag,modify_flag,rst;bit fun_flag; //功能键标志位没使用bit down_flag,up_flag,open_flag;void keyscan(){P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){case 0xee: key=0;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xde: key=1;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xbe: key=2;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0x7e: key=3;shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;// write_data('*');count++;}while(temp!=0xf0);{temp=P1;temp=temp&0xf0;}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){case 0xed: shu_flag=1;key=4;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break; //aa,bb,cc定时器中使用case 0xdd: shu_flag=1;key=5;write_data('*'); //每次按键清零count++;if(count>6) count=0;aa=0;bb=0;cc=0;break; //保证在按键器件不会自动返回case 0xbd: shu_flag=1;key=6;write_data('*'); //count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0x7d: shu_flag=1;key=7;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500); // 松手检测屏蔽蜂鸣器噪音污染}// beep=1;// write_data('*');count++;}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){ //fun_flag 功能键标志位case 0xeb: key=8; shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xdb: key=9; shu_flag=1;write_data('*');count++;if(count>6) count=0;aa=0;bb=0;cc=0;break;case 0xbb: modify_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break; //修改键case 0x7b: rst=1;fun_flag=1;aa=0;bb=0;cc=0;break; //返回键}while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(15);if(temp!=0xf0){temp=P1;switch(temp){ //清除键case 0xe7: //key=12;shu_flag=1;break;aa=0;bb=0;cc=0;switch(count){case 1: write_com(0x80+0x40+5);write_data(' ');write_com(0x80+0x40+5);break;case 2: write_com(0x80+0x40+6);write_data(' ');write_com(0x80+0x40+6);break;case 3: write_com(0x80+0x40+7);write_data(' ');write_com(0x80+0x40+7);break;case 4: write_com(0x80+0x40+8);write_data(' ');write_com(0x80+0x40+8);break;case 5: write_com(0x80+0x40+9);write_data(' ');write_com(0x80+0x40+9);break;case 6: write_com(0x80+0x40+0x0a);write_data(' ');write_com(0x80+0x40+0x0a);break;}case 0xd7: key=13;up_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break; //开门键case 0xb7: key=14;down_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break;case 0x77: key=13;open_flag=1;fun_flag=1;aa=0;bb=0;cc=0;break;while(temp!=0xf0){temp=P1;temp=temp&0xf0;// beep=0;delay(500);}// beep=1;if(count>0) count--;break;} //清除数字}}}#ifndef __SCAN_H__#define __SCAN_H__#include <reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid keyscan();#endif/***********************************************************名称:电子密码锁时间:2014年8月2日16:33:48 WRITE BY:KengkengToday is Valentine's Day程序功能:1 :开机1302显示时间,按下key15:开门键进入输入密码界面2 :输入密码输入错误超过三次电子锁锁死倒计时60s之后重新设置蜂鸣器快速响3 :输入正确进入菜单页面两个选择key13:开门key10:修改密码4 :修改已输入密码可由key12键清除重新输入5 :选择key13开门打开继电器显示倒计时15s开门蜂鸣器慢响提示15s内开门否则15后关门关闭继电器并自动返回时间页面6 :选择key10修改密码共两次两次密码一致时设置成功否则会一直提示输入密码7 :修改的密码存入2402中上电读出8 :修改密码无限循环直到输入正确为止可以使用key11:返回键返回9 :在10s内无任何按键按下时自动返回时间页面可重新进入10:在20s内无任何按键按下时进入掉电模式外部中断唤醒键盘列表:00 01 02 0304 05 06 0708 09 修改返回清除开锁切换开门修改modify_flag 返回rst 清除key12 //切换down_flag// 开锁up_flag 开门open_flag//切换的功能跟返回大致相同***********************************************************/#include<reg52.h>#include<intrins.h>#include "delay.h" //delay.h最好放在最前面#include "scan.h"#include "1302.h"#include "2402.h"#include "1602.h"#include "display.h"#define uchar unsigned char#define uint unsigned intextern uchar key;extern uchar temp,count,aa,bb,cc; /*一般将这些变量定义在C文件中extern声明不是定义当主函数需要时用extern引用*/extern bit shu_flag,modify_flag,rst;extern bit fun_flag; //功能键标志位没使用extern bit down_flag,up_flag,open_flag;uchar data lcd1602_line1[]={" 2014/08/02 000"};uchar data lcd1602_line2[]={" 10:42:50 "};uchar data time_data_buff[7]={0x50,0x42,0x10,0x02,0x08,0x06,0x14};uchar code Weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};//二维数组八行三列bit mod_flag,rst_flag;uchar code num_to_char[] = {"0123456789ABCDEF"};uchar k,s,w;bit return_flag=0;//切换时间页面标志位bit sleep_flag;//进入掉电模式标志位uchar m,l;bit k_flag=0;bit b_flag=0; //倒计时标志位bit flag10; //保护标志位bit flag3,flag4,flag2,flag1;/*数字标志位修改密码标志位返还标志位1 2 3 4 保护数据标志位,防重复写入*/ sbit beep=P2^3;//sbit sda=P2^0; //IO口定义//sbit scl=P2^1;uchar code table[]={"Enter password:"};uchar code table1[]={"Error!try again:"};uchar code table2[]={"Welcome to China"};uchar code table4[]={"Set password: "};uchar code table5[]={"Input again: "};uchar code table6[]={" Fuck you!!! "};uchar code table7[]={" Get out!!!! "};uchar code table8[]={" Set succed "};uchar code table9[]={"Be patient..."};uchar code table10[]={" Count down..."};uchar code table12[]={"Please select "};uchar code table13[]={"KEY10:For modify"};uchar code table14[]={"KEY13:For open "};uchar code table15[]={"Open the door"};void T0_init(){TMOD=0x11;TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。

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

1 易密码锁设计 摘要:本设计以单片机STC89C52RC作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构(本设重点介绍主机设计),实现钥匙信息在主机上的初步认证注册、密码信息的加密、钥匙丢失报废等功能。根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。而且采用键盘输入的电子密码锁具有较高的优势。采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。测试结果表明,本系统各项功能已达到本设计的所有要求。 关键词:单片机;智能密码锁;串行通信

The Design Of The Simple Password Lock Abstract:It can carry out the key information to register in the main on board initial

attestation, the password information encrypt etc. Go to correspond by letter the principle according to the string between 51 machines, this is easy to encrypt and protect to the passwords information random. Adopt the numerical signal codes,not only can carry out many controls of the road information, raise the anti- interference that signal deliver, reduce the mistake action,but also the power consume is low, Respond quickly,the efficiency deliver is high, work stable credibility etc. The software design adoption the design thought from top to bottom, to make the system toward wear distribute type,turn to the direction development of small, strengthen the system and can expand the stability and circulate.Test the result enunciation, various functions of this system are already all request of this design. Key Words : singlechip; intelligent password lock; Serial communication; 2

目 录 概述 ............................................................................................................................. 1

1 设计目标 ............................................................................................................ 1

2硬件设计与原理 .................................................................................................. 2

2.1 设计总框图 .................................... 2 2.2 硬件设计分析 .................................. 2 2.2.1 电源的设计 ............................... 2 2.2.2 单片机最小系统 ............................ 3 2.2.3 显示系统 .................................. 8 2.2.4 矩阵按键模块 .............................. 8 2.2.5 蜂鸣器和指示灯电路 ........................ 9 3软件设计与分析 .................................................................................................. 9

3.1 软件设计的组成 ................................. 9 3.2 各部分软件分析 ................................ 9 3.2.1 延时子函数 ............................... 9 3.2.2 矩阵键盘扫描子函数 ...................... 10 3.2.3 检验密码正误子函数 ....................... 10 3.2.4锁定,鸣笛程序 ............................ 11 3.2.5显示子程序 ................................ 11 4软件仿真 ............................................................................................................... 14

4.1 PROTEUS简介 ................................... 14 4.2仿真图 ......................................... 15 总结 ........................................................................................................................... 19

参考文献 ................................................................................................................. 20

致谢 ........................................................................................................................... 28

附录 ........................................................................................................................... 29 3

述 随着人们生活水平的提高,传统的机械锁由于其构造的简单,被撬开的事件屡见不鲜,电子锁保密性高,能够防止不法分子多次试探密码;性价比高,因此,电子锁受到了广大的亲昵。也使得该项技术有了更好的发展前景。本作品智能密码锁控制器,以低价格高性能的8位单片机为核心,采用人性化的设计,用LCD显示和语音提示双重显示,人机界面友好。另外预留着可扩展通道,可以根据用户的要求进行其他功能的扩展。本系统安全可靠,智能化高,安装方便,是大众型电子锁的首选本系统采用以低价格高性能的8位单片机STC89C52RC为核心,STC89C52RC采用CHOMS工艺,功耗很低,并且价格合适,应用普遍,更是支持了ISP在线下载,易于开发。使用该CPU进行设计具有实际意义

1 设计目标 (1)设置8位密码,密码通过键盘输入,若密码正确,则将锁打开,初

始化密码为(12345678)。 (2)密码可以由用户自己修改设定(支持8位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。 (3)报警、锁定键盘功能。密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。 (4)电子密码锁的设计主要4×4矩阵键盘接口电路、密码锁的控制电路。 (5) 密码输入功能:按下一个数字键,一个“0”就显示在最右边的数码管上,同时将先前输入的所有“0”向左移动一位。 4

(6) 密码清除功能:当按下清除键时,清除前面输入的一个值,并可以清除所有显示。 (7) 密码更改功能:将输入的值作为新的密码。 (8) 开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,否则不打开

第二章 硬件设计与原理 以STC89C52RC单片机为核心,起着控制作用。系统包括数码管显示电路、复位电路、时钟电路、矩阵按键电路、蜂鸣器电路和发光二级管指示灯电路。设计思路分为七个模块:复位电路、晶振电路模块、STC89C51RC、数码管显示电路、矩阵按键电路、蜂鸣器电路和发光二级管指示灯电路这七个模块。

2.1 设计总框图

相关文档
最新文档