开锁程序流程图
输入密码
输入密码正
Y 返回 开锁成功 确? N 报警程序 确认程序 按开锁键 LCD初始化 开锁
6仿真图
7制作
本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可,当然也可以用继电器的常开触点去控制电磁铁吸合线圈。本系统共有两部分构成,即硬件部分与软件部分。其中硬件部分由电源输入部分、键盘输入部分、密码存储部分、显示部分、报警部分组成,软件部分对应的由主程序、初始化程序、LCD显示程序、键盘扫描程序、启动程序、关闭程序、键功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
8调试
密码锁主控制部分电源需要用5V直流电源供电,把频率为50Hz、有效值为220V的单相交流电压转换为幅值稳定的5V直流电压。其主要原理是把单相电经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所
以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流压。
9心得体会
本设计从经济实用的角度出发,采用美国Atmel公司的单片机AT89S51与低功耗CMOS型E2PROM AT24C02作为主控芯片与数据存储器单元,结合外围的键盘输入、显示、报警等电路并用汇编编写主控芯片的控制程序,研制了一款可以多次更改密码具有报警功能的电子密码锁。设计完全可行可以达到设计目地。使用单片机制作的电子密码锁具有软硬件设计简单,易于开发,成本较低,安全可靠,操作方便等特点,可应用于住宅、办公室的保险箱及档案柜等需要防盗的场所,有一定的实用性。该电路设计还具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路,修改密码等多种功能。可在意外泄密的情况下随时修改密码。保密性强,灵活性高,特别适用于家庭、办公室、学生宿舍及宾馆等场所
10源程序
#include
//定义密码位数
sbit lcd1602_rs=P2^5; sbit lcd1602_rw=P2^6; sbit lcd1602_en=P2^7; sbit Scl=P3^4; sbit Sda=P3^5;
//24C02串行时钟 //24C02串行数据 //报警
sbit ALAM = P2^1; sbit KEY = P2^0; sbit open_led=P2^2; bit operation=0; bit pass=0;
//开锁
//开锁指示灯
//操作标志位 //密码正确标志 //重置输入充许标志
//3秒按键标志位 //锁定键盘标志
bit ReInputEn=0; bit s3_keydown=0; bit key_disable=0;
unsigned char countt0,second; //t0中断计数器,秒计数器 void Delay5Ms(void);
unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};
//控盘扫描控制表
unsigned char code start_line[] = {\ %unsigned char code name[]
= {\
unsigned char code Error[] = {\ error \ unsigned char code Locktrue[] = {\ true \
unsigned char code SetNew[] = {%unsigned char code Input[] = {\ \ unsigned char code ResetOK[] = {%unsigned char code initword[] = {%unsigned char code Er_try[] = {%unsigned char code again[] = {\ %unsigned char InputData[6];
unsigned char CurrentPassword[6]={1,3,1,4,2,0};
unsigned char TempPassword[6]; unsigned char N=0;
//密码输入位数记数 unsigned char ErrorCont; //错误次数计数 unsigned char CorrectCont;
//正确输入计数 unsigned char ReInputCont;
//重新输入计数
unsigned char code initpassword[6]={1,2,3,4,5,6}; void Delay5Ms(void)
{unsigned int TempCyc = 5552;
while(TempCyc--);}
void Delay400Ms(void) {unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) {TempCycB=7269; while(TempCycB--);}} void mDelay(uint t) //延时 { uchar i; while(t--)
{for(i=0;i<125;i++)
{;}}}
void Nop(void)
//空操作
{ _nop_(); _nop_(); _nop_();
_nop_();}
/*起始条件*/ void Start(void) { Sda=1;
Scl=1;
//显示名称 //输入错误 //输入正确
//INPUT
//输入密码暂存区 //当前密码值
Nop(); Sda=0; Nop();}
/*停止条件*/ 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)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库51单片机课程设计 电子密码锁 - 图文(2)在线全文阅读。
相关推荐: