当前位置:首页 > 基于51单片机电子密码锁设计
号。
一般地,电容C2和C3取30pF左右,晶体的振荡频率范围是1.2-12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。
单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。单片机复位条件:必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。 3.3.3 显示系统
图4 显示电路
3.3.4 矩阵按键模块
图5 矩阵按键模块
8
4 软件设计与分析
4.1 软件设计的组成
该系统由延时子函数、LCD12864液晶测忙子函数、LCD12864液晶写数据子函数、LCD12864液晶初始化子函数、矩阵键盘扫描子函数、密码子函数、密码修改子函数、主函数和数据定义这几部分组成。
4.2 各子程序设计
4.2.1 键盘扫描子程序
键盘扫描流程图如图6:
开 始 设置处值 送入行扫描处值 调消除抖动 子 程 序 Y C=0? N N R5=0? A=0? 读P1值 设C=1左移测列 Y 设C=1右移扫描列 调用显示子程序 N C=0? Y 结束 图6 键盘扫描流程图
键盘扫描子程序如下:
void keyscan() {
uchar temp1,temp2;
P1=0xfe;//令第一列为低电平,检测第1列 temp1=P1;
if(temp1!=0xfe) {
delay(5); //去抖 temp2=P1;
if(temp1==temp2) {
switch(temp2) {
case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();} else alarm();
break;
4.2.2 LED显示子程序
LED显示流程图如图7: 开 始
载入按键值
按键值+74LS138的扫描值
送P0口输出
图7 LED显示流程图
LED显示子程序如下: void display()
{ uchar i,j,cs=0x7f; for(i=num;i>0;i--) {
P0=table[0]; cs=_crol_(cs,1); P2=cs;
10
delay(10); }
for(j=4-num;j>0;j--) {
P0=table[1]; cs=_crol_(cs,1); P2=cs; delay(10); } }
4.2.3 密码比较和程序报警
密码比较和报警流程图如图8:
开 始 比较第一位 Y 比较下一位 Y N 清除显示 N 记录错误次数 N 6位比较完? 3次则报警 Y 正确开锁
清 零 图8 密码比较和报警流程
密码比较和报警程序: if((sk[11]==1)&(cp[0]==0))
{ GotoXY(0,0); print(\提示输入旧密码 count7=1;count2=1;count6=0;sk[11]==0;}
共分享92篇相关文档