基于51单片机的密码锁完整版程序

合集下载

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图(很详细) 一、基本组成:单片机小系统+4*4矩阵键盘+1602显示+DC电机基本电路:键盘和和显示键盘接P1口,液晶的电源的开、关通过P2.7口控制电机(控制口P2.4)二、基本功能描述:1.验证密码、修改密码a)锁的初始密码是123456(密码最长为10位,最短为1位)。

2.恢复初始密码a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。

但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态a)在实际使用中,锁只有在开门时才被使用。

因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。

b)同时将LCD背光灯关闭4.DC电机模拟开锁动作。

a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。

DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。

三、密码锁特点说明:1.0 输入将被以字符形式输入,最长为10位。

超过10位时系统将自动截取前10位、但不作密码长度溢出提示。

2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。

3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。

4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。

5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。

6.0 修改密码键和恢复初始密码键最好置于室内。

这是Proteus仿真结果:输入密码123456:显示结果:密码正确时电机启动、电机将持续5秒:这是键盘:开锁键是接INT0引脚接的一个独立按键,用于唤醒CPU工作、进而开启整个系统密码正确时可以修改密码:再次输入新密码,两次输入相同时、更改有效当然你可以随时放弃修改密码改进:1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。

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

基于51单片机的密码锁程序
*输入:row cloum dat
*************************************************/
void lcd_char(uchar row ,uchar cloum,uchar dat)
{
if(row==1)
{
lcd_writecom(0x80+cloum);
lcd_writedata(dat);
}
else
{
lcd_writecom(0x80+0x40+cloum);
lcd_writedata(dat);
}
}
/*********************************************
名称:lcd_string(uchar row,uchar cloum,uchar *p)
}
/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.
* 输入 : x
* 输出 : 无
***********************************************************************/
uchar init_password[6]="123456";
uchar a[5]="RIGHT";
uchar b[16]="The new password";
unsigned char code pu[282]={

(完整word版)基于51单片机的智能密码锁

(完整word版)基于51单片机的智能密码锁

单片机的电子密码锁目录第一章绪论......................................................... . (2)1.1电子密码锁简介......................................................... .. (2)1.2电子密码锁设计的背景及意义............................................................................. . (3)第2章总体设计............................................................................. . (3)2.1设计分析............................................................................. (3)2.2系统结构............................................................................. (4)第3章硬件电路设计............................................................................. (5)3.1单片机最小系统设计............................................................................. . (5)3.1.1时钟电路............................................................................. (5)3.1.2 复位电路 ............................................................................ . (6)3.1.3 最小系统 ............................................................................ (6)3.2 矩阵键盘设计 ............................................................................ . (7)3.3 LCD显示模块设计 ............................................................................ (8)3.4 开锁机构 ............................................................................ ............................................... .93.5 报警机构 ............................................................................ ............................................... .103.6 硬件综合设计 ............................................................................ ....................................... .10第4章软件设计 ............................................................................ ........................................ (11)4.1 软件总体设计 ............................................................................ .. (11)4.2 键盘扫描子程序 ............................................................................ ................................... .124.3 定时器中断子程序 ............................................................................ ......................... . (14)4.4 密码输入子程序 ............................................................................ . (15)4.5 报警子程序 ............................................................................ (16)总结 ............................................................................ ................................................................ .17参考文献 ............................................................................ ...................................................... (18)附录程序源代码 ............................................................................ ....................................... . (19)摘要:本文中将要介绍的单片机电子密码锁是一种通过判断密码输入是否正确来控制电路或是芯片的工作状态,进而控制锁的打开和闭合。

51单片机密码锁程序.

51单片机密码锁程序.

/*停止条件*/ void Stop(void) { Sda=0; Scl=1; Nop(); Sda=1; Nop(); } /*应答位*/ void Ack(void) { Sda=0;
Nop(); Scl=1; Nop(); Scl=0; } /*反向应答位*/ void NoAck(void) { Sda=1; Nop(); Scl=1; Nop(); Scl=0; } /*发送数据子程序,Data 为要求发送的数据*/ void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; Nop(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } /*读一字节的数据,并返回该字节值*/ uchar Read(void) { uchar temp=0; uchar temp1=0; //判断是否传送完成 //将待发送数据暂存 temp
= {"===Coded Lock==="}; = {" correct "}; = {" error "}; = {" pass "}; = {" open "}; = {"SetNewWordEnable"}; = {"input: "}; = {"ResetPasswordOK "};
unsigned char code initword[] unsigned char code Er_try[] unsigned char code again[]

基于51单片机多功能电子密码锁

基于51单片机多功能电子密码锁

#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define KEY P3 //键盘输入端口#define No_key 20 //无按键时的返回值#define lcddata P2 //1602的数据输入端口sbit lcden= P1^2。

sbit lcdrs= P1^0。

sbit lcdrw= P1^1。

sbit light= P1^3。

sbit light1= P1^4。

uchar j 。

//用来统计输入个数的全局变量uchar aa。

//用来在定时器中计数的全局变量uchar code table[]= " Hello!"。

uchar code table1[]=" OK! " 。

uchar code table2[]="Enter please:" 。

uchar code key_table[16] ={1,2,3,10,4,5,6,11,7,8,9,12,0,13,14,15}。

uchar password[]={2,0,1,0,9,3} 。

//设定初始密码uchar save[6]。

//保存输入的数据uchar conflag 。

//确认标志uchar lockflag。

//锁键盘标志uchar startflag。

//开始标志void delay(uint z>。

//延时子函数void wright_com(uchar com>。

//写指令函数void wright_data(uchar date> 。

//写数据函数void init(>。

//初始化void display_OK(>。

// 显示OKvoid delete(>。

//删除输入的最后一个数uchar keyscan(> 。

大学毕设论文__基于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单片机的密码锁(可改密码)

实习报告实习名称:单片机应用实习院(系)名称:电气与信息工程学院专业班级:xxxxxxxxx学生姓名:xxxxxx学号:xxxxxx指导教师:xxxxxxxxxx黑龙江工程学院教务处制2014年7月目录第1章总体设计方案 (4)1.1总体设计方案 (4)第2章硬件电路设计 (5)2.1单片机最小系统电路设计 (5)2.2液晶显示模块 (6)2.3键盘输入模块 (7)2.4 AT24C02密码存储模块 (8)2.5 系统供电电路设计 (9)2.6 蜂鸣器和继电器模块 (10)第3章系统软件设计 (11)3.1软件总体设计思路 (11)3.2主程序流程设计 (12)总结 (13)参考文献 (14)附录 (15)附录一 (15)附录二 (15)实习任务书学生姓名xxxx 系部电气与信息工程学院专业班级测控12-1指导教师姓名xxx 职称副教授讲师是否外聘□是否题目名称键盘式电子密码锁一、设计的内容、目的和意义本次实习是有关于键盘式电子密码锁的设计。

在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。

若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。

随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。

为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。

密码锁具有安全性高、成本低、功耗低、易操作等优点。

本次实习的目的是实现电子密码锁的功能,并运用单片机技术设计一个结构简单,并且相对低成本的密码锁。

二、设计的技术指标要求1、研究方法(1)总体按照最优化的方法进行软件设计和硬件设计,走软件实现道路;(2)对软硬件进行模块划分,并对各单元电路结合EDA工具进行论证设计;(3)在查阅文献基础上展开设计,力求创新。

2、技术要求(1)采用6位密码(2)报警、锁定键盘功能。

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

毕业设计基于51单片机的密码锁设计程序
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);
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs_port=P3^5;
sbit lcd_rw_port=P3^6;
sbit lcd_en_port=P3^4;
#define lcd_data_port P0
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);
void 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);
T_EN=0;

51单片机密码锁程序

51单片机密码锁程序
sbit open=P2^5; //锁开指示灯,绿灯。低电平亮
sbit beep=P2^0; //蜂鸣器,低电平叫
sbit red=P2^1; //红灯,低电平亮
sbit close=P2^7; //锁合指示灯,黄色。低电平亮
1 2 3 确定
0
---------------------------------------------------------------------------------------------------------------------------------------------------------*/
初始密码为四位,1,2,3,4 如果想修改密码的长度,可将程序中的密码长度4改为你想设置的长度值
初始密码1,2,3,4也可在函数init_main()函数中修改
密码锁上电后,锁合灯亮,初始密码为1,2,3,4 。
当输入的四位密码按确定键后,密码正确时锁开灯亮,锁合灯灭。当不正确时,锁合灯继续亮,蜂鸣器短报警
pwflag = 0; // 密码标志先置为0
last_pwflag=0;
close=0; //锁合灯亮,其它灯灭
delay();
red=1;
delay();
delay();
delay();
delay();
red=0;
delay();
delay();
delay();
delay();
red=1;
}
//快闪红灯,重新输入自定义密码
void flashred_S(void)
case 0xdb: return 8;break;

基于51单片机密码锁的汇编程序

基于51单片机密码锁的汇编程序

基于51单片机密码锁的汇编程序ORG 0000HENTER1 EQU 05HCHECK1 EQU 06HCHECK2 EQU 07HSJMP STARTORG 0080HSTART:ACALL INITIALBEGIN:MOV 20H,#04HMOV 21H,#50HLOOP: ACALL KEYMOV R0,21HMOV @R0,AINC 21HDEC 20HACALL DISPLAYMOV A,20HJNZ LOOPACALL KEYACALL ENTERJB ENTER1,WAY1ACALL ZEROACALL WRONGAJMP BEGINWAY1: ACALL CHECKJB CHECK1,WAY2 AJMP WAY11WAY2: ACALL ZERO CLR P3.3ACALL KEYACALL RESETSETB P3.3ACALL ZEROAJMP BEGINWAY11: ACALL CHECK11 ACALL ZEROJB CHECK2,WAY22 ACALL WRONGAJMP BEGINWAY22: CLR P3.3 ACALL KEYACALL RESET22SETB P3.3ACALL ZEROAJMP BEGINENTER:SUBB A,#0AH JNZ E1SETB ENTER1RETE1: CLR ENTER1 RETINITIAL:MOV R3,#00H MOV 40H,#00H MOV 41H,#01H MOV 42H,#02H MOV 43H,#03HMOV 50H,#00H MOV 51H,#00H MOV 52H,#00H MOV 53H,#00HMOV 60H,#03HMOV 61H,#03H MOV 62H,#03H MOV 63H,#03H RETCHECK:MOV R5,#04H MOV R0,#50HMOV R1,#40HM2: MOV 2EH,@R0 MOV A,@R1CJNE A,2EH,M1INC R0INC R1DEC R5DJNZ R5,M2SETB CHECK1RETM1: CLR CHECK1 RETRESET:SUBB A,#0BHJZ MOD1RETMOD1: MOV 24H,#04H MOV 25H,#70HMOV 26H,#50HLOOP3:ACALL KEYMOV R0,25HMOV @R0,AMOV R1,26HMOV A,#0FHMOV @R1,AINC 26HINC 25HDEC 24HMOV A,24HJNZ LOOP3ACALL KEYACALL ENTERACALL ZEROJB ENTER1,RESETAGAIN ACALL WRONG1AJMP MOD1L3: RETRESETAGAIN:MOV 24H,#04H MOV 25H,#75HMOV 26H,#50HLOOP4: ACALL KEYMOV R0,25HMOV @R0,AMOV R1,26HMOV A,#0FHMOV @R1,AINC 26HINC 25HDEC 24HMOV A,24HJNZ LOOP4ACALL KEYACALL ENTERACALL ZEROJB ENTER1,RESETCHECK ACALL WRONG1AJMP RESETAGAINRESETCHECK:MOV R5,#04H MOV R0,#70HMOV R1,#75HW2: MOV 2EH,@R0MOV A,@R1CJNE A,2EH,W1INC R0INC R1DEC R5DJNZ R5,W2AJMP FINALW1: ACALL WRONG1 AJMP MOD1FINAL: MOV 40H,70H MOV 41H,71HMOV 42H,72HMOV 43H,73HAJMP L3CHECK11:MOV R5,#04H MOV R0,#50HMOV R1,#60HM22: MOV 2EH,@R0MOV A,@R1CJNE A,2EH,M11INC R0INC R1DEC R5DJNZ R5,M22SETB CHECK2RETM11: CLR CHECK2 RETRESET22:SUBB A,#0BH JZ MOD2RETMOD2: MOV 24H,#04H MOV 25H,#70HMOV 26H,#50H LOOP33:ACALL KEY MOV R0,25HMOV @R0,AMOV R1,26HMOV A,#0FHMOV @R1,AINC 26HINC 25HDEC 24HMOV A,24HJNZ LOOP33ACALL KEYACALL ENTERACALL ZEROJB ENTER1,RESETAGAIN2 ACALL WRONG1AJMP MOD2L33: RETRESETAGAIN2:MOV 24H,#04H MOV 25H,#75HMOV 26H,#50HLOOP44: ACALL KEYMOV R0,25HMOV @R0,AMOV R1,26HMOV A,#0FHMOV @R1,AINC 26HINC 25HDEC 24HMOV A,24HJNZ LOOP44ACALL KEYACALL ENTERACALL ZEROJB ENTER1,RESETCHECK2 ACALL WRONG1AJMP RESETAGAIN2RESETCHECK2:MOV R5,#04H MOV R0,#70HMOV R1,#75HW22: MOV 2EH,@R0MOV A,@R1CJNE A,2EH,W11INC R0INC R1DEC R5DJNZ R5,W22AJMP FINAL2W11: ACALL WRONG1 AJMP MOD2FINAL2: MOV 60H,70H MOV 61H,71HMOV 62H,72HMOV 63H,73HAJMP L33KEY: ACALL KS1JNZ LK1ACALL DISPLAYAJMP KEYLK1: ACALL T12MS ACALL KS1JNZ LK2AJMP KEYLK2: MOV A,#0EFH MOV R2,AMOV R4,#00HLK4: MOV A,R2 MOV P1,AMOV A,P1JB ACC.0,LONE MOV A,#00HAJMP LKPLONE: JB ACC.1,LTWO MOV A,#01HAJMP LKP LTWO: JB ACC.2,LTHR MOV A,#02HAJMP LKPLTHR: JB ACC.3,NEXT MOV A,#03H LKP: ADD A,R4 PUSH ACCLK3: ACALL KS1JNZ LK3POP ACCRETNEXT: INC R4INC R4INC R4INC R4MOV A,R2JNB ACC.7, KNDRL AMOV R2,AAJMP LK4KND: RETKS1: MOV A,#0FH MOV P1,AMOV A,P1CPL AANL A,#0FHRETT12MS:MOV R7,#18H TM: MOV R6,#0FFH TM6: DJNZ R6,TM6 DJNZ R7,TMRETDISPLAY:MOV R2,#04H MOV R0,#50HMOV R1,#01H START2: MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,AMOV A,R1MOV P2,AACALL DL1INC R0MOV A,R1RL AMOV R1,ADJNZ R2,START2RETTAB: DB 3FH, 06H,5BH,4FH,66H,6DH,7DH,07H,4FH,6FH,77H,7CH,39H,5EH,79H ,71HDL1: MOV R7,#02HDL: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRETWRONG1: CLR P3.2MOV R7,#1EHDL22: MOV R6,#0F9HDL33: DJNZ R6,DL33DJNZ R7,DL22SETB P3.2RETWRONG: CLR P3.2MOV R7,#1EHDL2: MOV R6,#0F9HDL3: DJNZ R6,DL3 DJNZ R7,DL2SETB P3.2 ALARM: INC R3 CJNE R3,#03H,A1 AJMP WARNA1: RETWARN: CLR P3.4 MOVR5,#06HDL10: MOV R7,#0FFH DL8: MOV R6,#0FFH DL9: DJNZ R6,DL9 DJNZ R7,DL8DJNZ R5,DL10 SETB P3.4ACALL ZEROA2: DEC R3DEC R3DEC R3RETZERO: MOV 50H,#00H MOV 51H,#00H MOV 52H,#00H MOV 53H,#00HRETEND。

(完整版)基于51单片机的电子密码锁毕业设计论文

(完整版)基于51单片机的电子密码锁毕业设计论文

(完整版)基于51单⽚机的电⼦密码锁毕业设计论⽂⽬录第1章绪论 (1)1.1电⼦锁的发展状况 (1)1.2设计电⼦密码锁的意义及相关技术指标 (1)第2章总体设计及⽅案论证 (2)2.1单⽚机模块 (2)2.2输⼊键盘模块 (2)2.2.1独⽴式按键 (2)2.2.2矩阵式键盘 (3)2.3数码管显⽰模块 (3)2.3.1 LED静态显⽰⽅式 (3)2.3.2 LED动态显⽰⽅式 (3)2.4电源模块 (3)2.4.1蓄电池供电 (3)2.4.2双路电源供电 (3)2.5开锁电路模块 (4)2.6报警电路模块 (4)2.7最优⽅案 (4)第3章硬件电路设计 (4)3.1输⼊键盘 (4)3.2显⽰数码管 (5)3.3开锁电路 (6)3.4报警电路 (6)3.5电源电路 (7)3.6复位电路 (7)3.7振荡电路 (8)第4章软件设计 (9)4.1主程序流程图及程序 (9)4.2延时⼦程序 (11)4.3修改密码⼦程序 (11)4.4扫描键盘输⼊⼦程序 (11)4.5中断及报警⼦程序 (12)4.6显⽰⼦程序 (13)第5章设计总结 (15)参考⽂献 (16)附录Ⅰ (17)附录Ⅱ (18)第1章绪论1.1电⼦锁的发展状况随着科技的发展,传统的机械锁被破解的概率越来越⾼了,新型的盗贼也学会了与时俱进,通过各种技术⽅法和⼿段即会在短时间内开启结构复杂的机械锁,会不留痕迹的登堂⼊室,给失主和警⽅留下各种不易解惑的疑团。

由此我们想到,要是在机械锁的基础上再装上⼀把电⼦锁,就彻底杜绝了单⼀机械锁易被开启的弊端,从⽽极⼤提⾼门锁的安全防范性能。

当今世界,电⼦锁发展已经到了⾮常⾼的境界,由于电⼦元件特别是单⽚机应⽤在最近⼏年得到空前发展,电⼦锁⽆论是在功能还是在稳定性⽅⾯都有了较⼤的提⾼,在保密性⽅⾯已经做到了密码识别、指纹识别、⼈声识别等。

就整体形势⽽⾔,电⼦锁在国外发展⽐较早,所以应⽤也⽐较⼴泛,主要⽤于家庭门锁,银⾏公司等的财务保险柜锁和政府机关及⾼级宾馆等重要场合的智能控制门锁等。

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

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

基于51单片机简易密码锁程序设计//晶振11.0592MHz,T1每250微秒中断,按键P1.0-P1.7,发光二极管接P3.0-P3.3,p3.4 /*变量的定义:show_val[6]: 显示的值init_val[6]: 密码初始值key_val: 返回按键的值255-表示无按键按下key_index: 当前按键是哪一位密码T1_cnt: 定时器计数溢出数cnt_val_15s: 报警计时的数值cnt_val_5s: 待机时间计时cnt_val_4s: 输入正确,等待4秒清除开锁信号cnt_state: 计时状态error_num: 错误次数led_seg_code:数码管7段码*/#include <reg51.h>#define S1 0xEE;#define S2 0xDE;#define S3 0xBE;#define S4 0x7E;#define S5 0xED;#define S6 0xDD;#define S7 0xBD;#define S8 0x7D;#define S9 0xEB;#define S10 0xDB;#define S11 0xBB;//有源蜂鸣器sbit SPEAK=P3^5;unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;unsigned int data T1_cnt;unsigned char data key_val,key_index,key_val_old;unsigned char data state_val,error_num;unsigned char data show_val[7];char code init_val[6]={1,2,3,4,5,6};char code led_seg_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//--------延时程序----------------void delay(unsigned int i)//延时{ while(--i); }void pw_error()//密码错误信号{int i;for(i=0;i<1000;i++){SPEAK=!SPEAK;delay(1);}}void audio_out()//有源蜂鸣器{ int i;for(i=0;i<5000;i++){SPEAK=!SPEAK;delay(3);}}void init_variant(){unsigned char i;for(i=0;i<7;i++)show_val[i]=11; //led_seg_code[10]=0x00表示数码管不显示任何内容key_index=1; //没有任何输入或清除所有输入时,保存当前键的位置}//---------按键扫描---------------unsigned char scan_key(){unsigned char row,col,key;key=0;P1=0x0f;if(P1==0x0f)return(0xff);delay(10);if(P1==0x0f)return(0xff);switch(P1){case 0x0e:row=0;break;case 0x0d:row=1;break;case 0x0b:row=2;break;case 0x07:row=3;break;}P1=0xf0;switch(P1){case 0xe0:col=0;break;case 0xd0:col=1;break;case 0xb0:col=2;break;case 0x70:col=3;break;}key=row*4+col;while(P1!=0xf0);return(key);}//---------数码管显示--------------- void led_show(){P0=led_seg_code[show_val[1]]; P2=0xdf;delay(500);P0=led_seg_code[show_val[2]]; P2=0xef;delay(500);P0=led_seg_code[show_val[3]]; P2=0xf7;delay(500);P0=led_seg_code[show_val[4]]; P2=0xfb;delay(500);P0=led_seg_code[show_val[5]]; P2=0xfd;delay(500);P0=led_seg_code[show_val[6]];P2=0xfe;delay(500);}//--------定时器T1中断服务程序-----------------void timer1() interrupt 3 //T1中断{T1_cnt++;f(T1_cnt>3999) //如果计数>3999, 计时1sT1_cnt=0;switch (cnt_state){case 1://密码输入正确,需要计时4sif(cnt_val_4s<4){ cnt_val_4s++;}else{ cnt_val_4s=0;init_variant();//密码输入正确,计时到4秒时,清除输入的内容//已开锁信号清零//开锁信号清零cnt_state=0;TR1=0; //停止计时}break;case 2: //密码输入错误3次,计时15sif(cnt_val_15s<15){ cnt_val_15s++;}else{ cnt_val_15s=0;init_variant();//三次密码错误时,计时15秒,清除输入的内容// 清除所有指示和报警cnt_state=0;TR1=0; //停止计时}break;}}}//--------判断键盘输入内容与密码是否一致------unsigned char check_input_pw(){ unsigned char i,k;k=1;for(i=0;i<6;i++){ k=k && (show_val[i]==init_val[i]); }return k;}//---------主程序----------------main(){ //初始化各变量SPEAK=1;P3=0xff;cnt_val_15s=0;cnt_val_5s=0;cnt_val_4s=0;cnt_state=0;//0-待机计时5s状态;1-密码正确,计时4s状态;2-三次密码错误,处于计时15秒状态。

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

基于51单片机的密码锁设计程序_
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。
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()。
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()。
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)

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

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

课程设计基于51单片机的8位电子密码锁/****************************************************8位电子密码锁程序****************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit fmq=P3^0;sbit led1=P3^1;sbit led2=P3^2;sbit scl=P3^4;sbit sda=P3^5;uchar code wela[]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};uchar code dula[]={0x24,0xbd,0xe0,0xa8,0x39,0x2a,0x22,0xbc,0x20,0x28,0x24,0xfb,0xee,0x31,0Xef};uchar temp;uchar *play;uchar screa_ok=0;uchar at24c02[8]={0,0,0,0,0,0,0,0}; //存储源密码uchar atdata[8]={11,11,11,11,11,11,11,11}; //存储开锁密码uchar atdata1[8]={12,12,12,12,12,12,12,12}; //存储HHHHHHHH uchar atdata2[8]={11,11,11,11,11,11,11,11}; //存储修改密码uchar atdata3[8]={14,14,14,14,14,14,14,14}; //存储换密码时输入的密码void at24c02_init();void start();void stop();void respons0(); //应答void respons1() ;void write_add(uchar address,uchar date);uchar read_add(uchar address);void read_data(void);void write_data(void);uchar keyscan();void display();void keyprocess();void delay(){ ;;;;;;}void delayms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){// at24c02_init();play=atdata2;read_data();//write_data();while(1){display();keyprocess();}}void display(){uchar j;for(j=0;j<=7;j++){P1=0Xff;P0=dula[play[j]];P1=wela[j];P1=0Xff;}}uchar keyscan(){uchar num=0xff;P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:num=9;break;case 0xdb:num=0;break;case 0xbb:num=11;break;case 0x7b:num=12;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delayms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}}}return num;}void keyprocess(){uchar keydata=0;uchar i,error=0;static unsigned char flag=0;static unsigned char num=0;keydata=keyscan();if(keydata==0xff)return;switch(keydata){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 0:if(flag==1){if(num<8){atdata3[num]=13;atdata[num]=keydata;num++;}}elseif(flag==2){if(num<8){atdata1[num]=keydata;num++;}}else{if(num<8){atdata2[num]=13;atdata[num]=keydata;num++;}}break;case 11:if(flag==0&&num==8){num=0;for(i=0;i<8;i++){if(atdata[i]==at24c02[i]){;}elseerror=1;}}if(error==0){led1=0;delayms(1000);led1=1;}else{led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;}error=0;for(i=0;i<8;i++){atdata[i]=11;atdata2[i]=11;}}elseif(flag==1&&num==8) { num=0;for(i=0;i<8;i++) {if(atdata[i]==at24c02[i]) ;else{error=1;}}if(error==0){flag=2;play=atdata1;}else{led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;delayms(500);led2=0;fmq=0;delayms(500);led2=1;fmq=1;}error=0;for(i=0;i<8;i++){atdata[i]=11;atdata3[i]=14;}}break;case 12:if(num>0){num--;if(flag==1){atdata3[num]=14;}if(flag==2){atdata1[num]=12;}else{ atdata[num]=11;atdata2[num]=11;}}break;case 13:if(flag==0){play=atdata3;flag=1;}break;case 14:if(flag==2&&num==8){write_data();for(i=0;i<8;i++){at24c02[i]=atdata1[i];}led1=0;delayms(300);led1=1;delayms(300);led1=0;delayms(300);led1=1;delayms(300);led1=0;delayms(300);led1=1;for(i=0;i<8;i++){atdata2[i]=11;}play=atdata2;for(i=0;i<8;i++){atdata1[i]=12;}flag=0;num=0;}break;case 15:flag=0;play=atdata2;break;case 16:/* on=0;flag=0;num=0;play=atdata2;for(i=0;i<8;i++){atdata2[i]=11;}*/break;}}void start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons0() //应答{sda=0;delay();scl=1;delay();scl=0;delay();}void respons1() //应答{sda=1;delay();scl=1;delay();scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date) {uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();// scl=0;// delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void write_add(uchar address,uchar date) {start();write_byte(0xa0);respons0();write_byte(address);respons0();write_byte(date);respons0();stop();}uchar read_add(uchar address) {uchar date;start();write_byte(0xa0);respons0();write_byte(address);respons0();start();write_byte(0xa1);respons0();date=read_byte();respons1();stop();return date;}void read_data(){uchar i;for(i=0;i<8;i++){delayms(5);at24c02[i]=read_add(i);delayms(5);}}void write_data(){uchar i;for(i=0;i<8;i++){delayms(5);write_add(i,atdata1[i]);delayms(5);}}。

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

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

基于51单⽚机的电⼦密码锁—1这个程序是为了实现基于51单⽚机的电⼦密码锁,⽬前,程序解决了最重要之⼀的输⼊的密码和保存的正确密码相⽐较的问题。

通过定义了两个数组:uchar table2[6]; //临时密码保存uchar password[6]="123456"; //进门密码将输⼊的密码写⼊到table2[]中有⼀点需要特别注意:因为我写到table2[]数组内的是ASCII值的0-9,⽽ASCII值的0-9对应的符号却是NUT,SOH... (省略)所以在刚开始调试时,LCD1602屏幕输出的总是奇怪的字符,⽽不是我想要的0-9,通过查询ASCLL码表可以知道字符(0-9)对应的数值是48-57,所以我通过定义了⼀个新的数组,uchar smgduan[10]={48,49,50,51,52,53,54,55,56,57};以及lcd_write_data(smgduan[table2[i]]);的⽅式,实现了在LCD上输出字符0-9的功能。

在最后做两个数组⽐较时,开始同样出现了这个情况,因为数字1和字符1对应的ASCII值不同,所以password[i]不等于table2[i],需要进⾏转换,我的⽅式的是password[i]==smgduan[table2[i]];罗⾥吧嗦这个多,主要还是给未来的⾃⼰看看,当初犯得错误多么低级。

---------------------------------------------------分割线-----------------------------------------------------------------------------------下⼀版改进考虑把重复按键选择数字改成矩阵按键,加进些其他的功能。

---------------------------------------------------分割线-----------------------------------------------------------------------------------程序部分:/*这个⽅案是我写基于51单⽚机的电⼦密码锁过程中,未完成全部功能的程序。

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

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