添加一个数组让这个6位密码锁能运行,并且三次输入密码错误后,蜂鸣器报警3秒。
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
#include "ds1302.h"
#include "onewire.h"
#include "iic.h"
#include "Buzzer.h"
unsigned char KeyNum;
unsigned long Password,Count;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Password:");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if(KeyNum<=10) //如果S1~S10按键按下,输入密码
{
if(Count<6) //如果输入次数小于6
{
Password*=10; //密码左移一位
Password+=KeyNum%10; //获取一位密码
Count++; //计次加一
}
LCD_ShowNum(2,1,Password,6); //更新显示
}
if(KeyNum==15) //如果S15按键按下,确认
{
if(Password==653421) //如果密码等于正确密码
{
LCD_ShowString(1,14,"OK "); //显示OK
Password=0; //密码清零
Count=0; //计次清零
LCD_ShowNum(2,1,Password,6); //更新显示
}
else //否则
{
LCD_ShowString(1,14,"ERR"); //显示ERR
Password=0; //密码清零
Count=0; //计次清零
LCD_ShowNum(2,1,Password,6); //更新显示
}
}
if(KeyNum==16) //如果S16按键按下,取消
{
Password=0; //密码清零
Count=0; //计次清零
LCD_ShowNum(2,1,Password,6); //更新显示
}
}
}
}
这个代码是根据一个四位密码锁改的,但是LCD1602存储不了6位密码数据,所以希望加个数组可以实现6位密码锁,并且三次输入密码错误后,蜂鸣器报警3秒。
lcd1602是液晶用来显示的跟存储没有关系,你是说存密码的数据类型问题吧,用个数组就行了,每次修改判断是修改数组里的第几位