2 设计思想
2.1 硬件设计思想
2.11 键盘设计
本设计使用7按键,从上到下,从左至右依次设为确认键,数字1,数字2,数字3,数字4,数字5,数字6,用来输入密码,如下图
2.12 数字显示设计
使用共阳极七段数码管来显示输入的数字,图如下:
5
2.13 检验密码电路设计
使用LED灯和蜂鸣器来提示输入的密码是否正确,若密码正确,绿灯亮,若密码错误,红灯闪烁,蜂鸣器响,电路如图:
2.2软件设计思想
电子密码锁工作的主要过程是从键盘开始输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
密码的设定,在此程序中密码是固定的,预设的密码为\共6位密码。 在单片机内部预设六位密码,在使用密码解锁器时,要按预设的密码依次输入才能完成解锁。预设密码以外的数字都不能解开密码锁(如输入非6位或输入6位与预设密码不同的数字)
输入密码时,数码管要在单片机的控制下同步显示输入的数字。
6
3 电路原理与电路图
3.1 电路原理
单片机最小系统。一个AT89S52单片机做为控制电路,运用其P2口来实现密码的输入和蜂鸣器的报警,通过P0口给数码显示管高低不同电平信号,来实现输入密码的显示,P1接指示灯。
3.2 电路原理图
4 流程图
4.1流程图
7
5 程序清单与仿真结果
5.1 程序清单
#include
sbit mm1=P2^0;//密码按键1-8 sbit mm2=P2^1; sbit mm3=P2^2; sbit mm4=P2^3; sbit mm5=P2^4; sbit mm6=P2^5; sbit mmok=P2^6; sbit l1=P1^0; sbit l2=P1^2; sbit fmq=P2^7;
void init() {
P0=0xff;//禁止数码管显示 mm1=1; mm2=1; mm3=1; mm4=1; mm5=1; mm6=1; mmok=1; fmq=1; l1=1; l2=1; }
void delayms(unsigned int t) {
unsigned int i,j; for(i=t;i>0;i--) for(j=114;j>0;j--); }
void main() {
unsigned
mmsr,bn,bn1,bn2,bn3,bn4,bn5; mmsr=0; bn=0; bn1=0;
bn2=0; bn3=0; bn4=0; bn5=0; mmsr=1; init(); while(1) { if(mmsr==1) { if(mm5==0) //系统8位程序密码532416 { delayms(10); if(mm5==0) { bn=1; P0=0xff;//消隐 P0=0x92;//显示5 } } if((mm3==0)&(bn==1)) { delayms(10); if((mm3==0)&(bn==1)) { bn1=1; P0=0xff;//消隐 P0=0xb0;//显示3 char
} } if((mm2==0)&(bn1==1))
8