51单片机密码锁制作的程序和流程图Word文档格式.docx
- 文档编号:16488522
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:19
- 大小:21.96KB
51单片机密码锁制作的程序和流程图Word文档格式.docx
《51单片机密码锁制作的程序和流程图Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机密码锁制作的程序和流程图Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
2.0系统的最好再增加电源监测的设计,在电池电力不够时发出提示。
这时还可以增加备用电池,这样就可以保证系统不会掉电。
但是这些都要依赖于本钱。
3.0液晶的显示最好采用中文。
通过对1602的CGRAM的操作可以实现中文显示,使得用户界面更好。
主函数:
确认函数_confirm()操作:
0_将'
\0'
置于输入table_input[]结尾
(table_input[]的长度返回值在length里面)
根据操作标识选择任务:
1_确认密码:
判定输入密码正确与否
2_修改密码:
确认第一次输入并保存
要求第二次输入
比较两次输入是否一样
根据比较结果选择任务:
修改失败,进入输入密码态
修改成功,将输入复制到table_password[]
确认函数_confirm()相关标识位目录:
flag_display;
//根据其值可以确定显示信息
flag_confirm;
//确认键根据此标识判定任务,默认为0_即为确定密码状态
flag_allow;
//允许修改密码标识,在密码比较正确时置1
flag_amend;
//第一/二次输入新密码标识
flag_M;
//允许电机开锁标识
相关变量
sbitM=P3^6;
//电机控制口
flag_confirm;
//操作任务标识位
flag_compare;
//比较输入与密码|相等时返回1,否那么返回0
staticflag_amend;
//修改密码时的标识
第一次输入前=1,输入后置2
第二次输入前=2,输入后置0
flag_display=0;
//确认键操作的返回值根据返回值可以确定显示信息
flag_allow;
//允许改密码标识,在密码比较正确时置1,不正确时置0
process_char()函数:
:
_M;
//DC电机控制口
_length;
//跟踪记录输入table_input[11]的字符长度(<
=10)
lcd_display()函数中标识位flag_display的值与意义:
=0:
不显示|不刷新显示
=1:
密码错误
=2:
密码正确
=3:
请输入新密码
=4:
请再次输入新密码
=5:
密码修改成功
=6:
密码修改失败
=7:
显示输入密码状态_Thepassword!
=8:
放弃修改密码
=9:
已开锁
流图不怎么清晰、不过下一篇就是程序了,可以从程序推出流图。
程序比较多,所以写成了几个文件,同时应用了相当多的标识位来进展信号传递。
我觉得边看程序边画它的流程图会更好地帮助我们读程序。
1.0main.c文件
*include<
reg52.h>
string.h>
*include"
mydefine_2.h"
staticvoiddelay(unsignedintN)//Nms延时_12MHz/准确性高
{
unsignedinti=0,j=0;
for(i=1;
i<
=N;
i++)
for(j=1;
j<
=355;
j++);
}
voidclock()
key_clock=0;
delay(15);
key_clock=1;
voidinit()
key_LCD=0;
init_1602();
TMOD=0x01;
TH0=0x3C;
//=(65535-5000)/256
TL0=0xAF;
//(65535-5000)%256
EA=1;
ET0=1;
TR0=0;
//外部中断0唤醒CPU(空闲方式)
EX0=1;
IT0=1;
command(0x80);
lcd_display(7);
voidmain()
init();
while
(1)
{
temp=keyboard_matrix();
//扫描输入
if(temp)//有按键输入信息
clock();
//按键声
//关闭计时
timer=0;
receive(temp);
//输入的字符串长度为length(<
=10)
if(i!
=length)//输入时显示"
*"
command(0xC0+length);
//为显示密码输入设定位置
display('
*'
);
i=length;
}
switch(temp)//根据按键号调用任务
//修改密码
case12:
if((flag_allow)&
&
(flag_amend==0))//输入密码正确的条件下可以更改
table_input[0]='
;
flag_display=3;
//请输入新密码
flag_confirm=1;
//确认键进入确认修改密码功能
flag_amend=1;
//每次按下修改键时都是第一次输入新密码
length=0;
//重按修改键时也是第一次输入新密码
i=0;
else
flag_confirm=0;
//恢复初始态
flag_amend=0;
lcd_display
(1);
//密码不正确
delay(500);
flag_display=7;
break;
case11:
//取消
//擦出显示
'
//显示后光标_显示地址又加了1
//重置光标_显示地址|实为将光标拉回来
if(length>
0)
length--;
//input[]位置后退一位
case10:
confirm();
//确定
case13:
//修改密码的过程中取消修改密码|将系统置于初始态即可
if((flag_amend==1)||(flag_amend==2))
lcd_display(8);
lcd_display(flag_display);
TR0=1;
//开场计时等待
DC_Moter();
resume_password();
if(flag_clear)//恢复密码和开锁键_外部中断有效时重新计时
flag_clear=0;
if(timer==100)//10秒后不允许更改密码
flag_allow=0;
//显示初始态,以提示修改超时
if(timer==1200)//≈2分钟后休眠|空闲方式
clear_system();
delay(250);
PCON|=0x01;
//唤醒CPU后显示初始态
voidint0()interrupt0
//开液晶电源
flag_clear=1;
voidTimer0()interrupt1//50ms
//(65535-50000)/256
//(65535-50000)%256
timer++;
2.0负责实现具体操作的process_char.c文件
mydefine.h"
sbitkey_self=P2^1;
//独立按键,用于恢复初始密码
sbitkey_LED=P2^0;
sbitkey_M=P2^4;
sbitkey_LCD=P2^7;
//液晶电源控制口
externbitflag_clear;
//恢复密码和开锁键_外部中断的有效标识
externunsignedinttimer;
//定时器0计数时段标记_50ms一次定时中断
externunsignedcharlength=0;
externunsignedcharflag_display=0;
externunsignedcharflag_confirm=0;
externunsignedcharflag_allow=0;
externunsignedcharflag_amend=0;
unsignedcharflag_M=0;
externvoidcommand(unsignedcharcommand);
externvoiddisplay(unsignedchardate);
//向I2C地址为address处写入数据date
externvoidwrite_I2C(unsignedcharaddress,unsignedchardate);
//读出I2C地址为address处的数据
externunsignedcharread_I2C(unsignedcharaddress);
staticvoiddelay(unsignedintN)//Nms延时/准确性高
//休眠前去除table_input中的值
externvoidclear_system()
key_LCD=1;
//关液晶电源
//接收键盘输入|以字符形式存入table_input[11]
externvoidreceive(unsignedchartemp)
//按键在松手时读取按键号,故不会重复读取按键值
if(temp&
length<
=9)//如此,那么无按键时执行效率高
switch(temp)
case1:
case2:
case3:
case4:
case5:
case6:
case7:
case8:
case9:
table_input[length++]=temp+48;
//以字符形式存入table_input[11]
case14:
table_input[length++]=48;
//字符0
//根据任务选择显示信息
externvoidlcd_display(unsignedchartemp)
unsignedchari=0,*p=NULL;
if(temp)
switch(temp)//选择显示信息
p=table_error;
p=table_pass;
//密码正确
p=table_new;
p=table_again;
//请再次输入新密码
p=table_changed;
//密码修改成功
p=table_fail;
//密码修改失败
p=table_enter;
//显示输入密码:
Thepassword!
p=table_abandon;
//放弃修改密码
p=table_close;
//锁闭
p=table_resume;
command(0x01);
delay
(1);
while(*p!
='
)
display(*(p++));
//显示后清0,防止重复显示
//确认
externvoidconfirm(void)
unsignedcharflag_compare=0;
//用于记录比较输入与密码的结果|相等时返回1,否那么返回0
unsignedcharflag_compare_2=0;
//用于记录对两次输入的新密码的比较结果|相等时返回1,否那么返回0
unsignedchari=0;
0)//输入不为空
table_input[length]='
//输入字符串长度清0
if(flag_confirm)//修改密码
switch(flag_amend)
strcpy(table_newpassword,table_input);
//第一次输入新密码
table_input[1]='
//防止第一次输入的容在放弃修改时再次被利用
flag_amend=2;
flag_display=4;
//请再次输入密码
flag_compare_2=strcmp(table_input,table_newpassword);
//第二次输入新密码
//清0,允许再次修改
//进入初始之确认密码状态
if(!
flag_compare_2)//两次输入一样==0
strcpy(table_password,table_input);
//防止修改完成后再次被利用,造成重复修改,同时防止刚修改了就是pass状态
lcd_display(5);
//修改成功
lcd_display(6);
//修改失败
else//验证密码
flag_compare=strcmp(table_input,table_password);
flag_compare)//密码正确==0
flag_allow=1;
//允许修改密码
flag_M=1;
//允许开锁
flag_display=2;
//密码正确信息:
Pass!
//改变输入,使不致出乱
else//密码错误
//不允许修改密码
//密码错误信息:
Error!
//电机控制
externvoidDC_Moter()
if(flag_M)//允许开锁
flag_M=0;
key_M=0;
//开锁
key_LED=0;
delay(1250);
key_M=1;
key_LED=1;
//进入初始态
//恢复初始密码
externvoidresume_password()
key_self)//==0
delay(3);
while(!
key_self);
//==0
strcpy(table_password,table_original);
lcd_display(10);
3.0定义各个数组的头文件mydefine.h
externunsignedchartable_input[11]={0};
//接收键盘输入
unsignedchartable_password[11]="
123456"
//密文
unsignedchartable_newpassword[11]="
456"
//接收新密码
unsignedcharcodetable_original[11]="
//初始密码
//显示信息
unsignedcharcodetable_pass[]="
"
//成功进入
unsignedcharcodetable_error[]="
OperateError!
//密码错误信息
unsignedcharcodetable_enter[]="
Thepassword:
//输入密码
unsignedcharcodetable_new[]="
Newpassword:
//输入新密码
unsignedcharcodetable_again[]="
Enteragain:
//再次输入新密码
unsignedcharcodetable_changed[]="
Changed!
//密码修改成功
unsignedcharcodetable_fail[]="
Failchangce!
//密码修改失败
unsignedcharcodetab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 密码锁 制作 程序 流程图