微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LCD1602密码锁设计

LCD1602密码锁设计

时间:11-10 来源:互联网 点击:

//========================================== 密码控制部分 ==================================================

/*****************************************************
函 数 名:void NewPassword_set_again(void)
功 能:第二次输入密码
说 明:第二次输入密码并存入暂存器,再调用比较程序
入口参数:无
返 回 值:无
*****************************************************/
void NewPassword_set_again(void)
{
bit sign1;
uchar key_data;
P1=0xf0; // 判断是否有键按下
if(flag==1)
{
NewPassword_again(); // 显示密码输入界面
Delay400Ms();
flag=0; // 调用输入新密码提示标志位
Count=0; // 按键次数计数器置0
Delay400Ms();
}
if((P1&0xf0)!=0xf0) // 判断是否有键按下
{
key_data=Key_switch(); // 调用按键转换程序
if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
{//按键不能为数字(0~9)以外.A B C D # *
Count++; // 按键次数器加1
Led_hint(); // 按键指示
Beep(); // 按一下键发一音
sign1=1; // 有键按下标志位
}
}
if((sign1==1)&(flag==0)) // 有键按下
{
Scan_starnumber(); // 在密码显示区显示" ****** "
sign1=0; // 按键标志位清0
T_Password[Count-1]=key_data; // 按键值放入密码暂存器
}
if(Count==6) // 6次按键则进行密码比较
{
Count=0; // 计算清0,从先计数
flag =1; // 调用输入新密码提示标志位
mark =0; // 循环标志位
WriteCommandLCM(0x0C,1); // 关光标显示
Newpassword_comparison(); // 新密码设置比较
}
}

/*****************************************************
函 数 名:void Newpassword_comparison(void)
功 能:第二次输入密码比较
说 明:对第一次输入的密码与第二次输入的密码进行比较
入口参数:无
返 回 值:无
*****************************************************/
void Newpassword_comparison(void)
{
uchar Number=0;
while((T_Password[Number]==N_Password[Number])&(Number<6))// 密码比较
{
Number++; // 计数值加1
}
if(Number>=6) // 密码正确
{
Newpassword_OK(); // 新密码设置成功提示
WriteToROM(T_Password,0,6); // 密码设置成功,则把密码存入24c02中
sign =1; // 比较新密码标志
WriteCurrent((uchar)sign,10); // 存入标志位
Delay400Ms();
Beep(); // 正确提示音
Delay400Ms();
Beep();
mark=0;
}
else // 密码错误,报警
{
Newpassword_ERROR(); // 新密码设置失败提示
num=0;
sign =0; // 比较旧密码标志
Delay400Ms();
Beep();Beep();Beep(); // 错误提示音
Delay400Ms();
Beep();Beep();Beep();
Delay1s(); // 延时1s
mark=0;
}
}

/*****************************************************
函 数 名:void NewPassword_set(void)
功 能:新密码设置
说 明:修改密码
入口参数:无
返 回 值:无
*****************************************************/
void NewPassword_set(void)
{
bit sign1;
uchar key_data;
P1=0xf0; // 判断是否有键按下
if(flag==1)
{
NewPassword_face(); // 显示密码输入界面
Delay400Ms();
flag=0; // 调用输入新密码提示标志位
Count=0; // 按键次数计数器置0
Delay400Ms();
}
if((P1&0xf0)!=0xf0) // 判断是否有键按下
{
key_data=Key_switch(); // 调用按键转换程序
if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
{//按键不能为数字(0~9)以外.A B C D # *
Count++; // 按键次数器加1
Led_hint(); // 按键指示
Beep(); // 按一下键发一音
sign1=1; // 有键按下标志位
}
}
if((sign1==1)&(flag==0)) // 有键按下
{
Scan_starnumber(); // 在密码显示区显示" ****** "
sign1=0; // 按键标志位清0
N_Password[Count-1]=key_data; // 按键值放入密码暂存器
}
if(Count==6) // 6次按键则进行密码比较
{
Count=0; // 计算清0,从先计数
flag =1; // 调用输入新密码提示标志位
mark =0; // 循环标志位
WriteCommandLCM(0x0C,1); // 关光标显示
}
}
/*****************************************************
函 数 名:void Password_importation(void)
功 能:密码输入
说 明:输入密码并调用密码比较函数进行比较
入口参数:无
返 回 值:无
*****************************************************/
void Password_importation(void)
{
bit sign1;
uchar key_data;
P1=0xf0; // 判断是否有键按下
if(((P1&0xf0)!=0xf0)&(flag==1)) // 有键按下,且是第一次
{
key_data=Key_switch();
if(key_data!=0)
{
Pass_face(); // 显示密码输入界面
Delay400Ms();
flag=0; // 调用密码输入提示标志位
Count=0; // 输入密码个数计数器置0
Delay400Ms();
}
}
if((P1&0xf0)!=0xf0) // 判断是否有键按下
{
key_data=Key_switch(); // 调用按键转换程序
if((key_data!=0)&(key_data!=65)&(key_data!=66)&(key_data!=67)&(key_data!=68)&(key_data!=35)&(key_data!=42))
{//按键不能为数字(0~9)以外.A B C D # *
Count++; // 按键次数器加1
Led_hint(); // 按键指示
Beep(); // 按一下键发一音
sign1=1; // 有键按下标志位
}
}
if((sign1==1)&(flag==0)) // 有键按下
{
Scan_starnumber(); // 在密码显示区显示" ****** "
sign1=0; // 按键标准位清0
T_Password[Count-1]=key_data; // 按键值放入密码暂存器
}
if(Count==6) // 6次按键则进行密码比较
{
Count=0; // 计算清0,从先计数
flag =1; // 调用密码输入提示标志位
mark =0; // 循环标志位
WriteCommandLCM(0x0C,1); // 关光标显示

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top