AVR单片机密码锁程序(原创)
/******************************************************/
/*******************密码判断子程序*********************/
/******************************************************/
void mi()
{
switch(num)
{
case 1://只有按键标志位为1时,说明按下的是第1次
if(qing==yin)//此时第1位密码比较变量与初始密码变量比较,是否相等
{
temp++;//如果相等则将比较标志位加1,以作记号
qing=0xff;//作完记号后,将比较变量赋值,以便它再次记数标志位变量
}
break;//返回
case 2://只有按键标志位为2时,说明按下的是第2次
if(qing1==yin1)
{
temp++;
qing1=0xff;
}
break;
case 3://只有按键标志位为3时,说明按下的是第3次
if(qing2==yin2)
{
temp++;
qing2=0xff;
}
break;
case 4://只有按键标志位为4时,说明按下的是第4次
if(qing3==yin3)
{
temp++;
qing3=0xff;
}
break;
}
if(temp==4)//如果比较标志位变量为4,则说明以上4个密码是对的,此时蜂鸣器响起
bbt();//调用蜂鸣器响起子程序
}
/***********************************************/
/*******************主程序*********************/
/***********************************************/
void main()
{
uchar ik=16;//定义局部变量
temp=0;//蜂鸣器计数变量变0
num=0;//计数器清0
yin=0;//密码1
yin1=1;//密码2
yin2=2;//密码3
yin3=3;//密码4
qing=qing1=qing2=qing3=0;//密码比较变量清0
DDRB=0xff;//设置PB口为输出
DDRC=0xff;//设置PC口为输出
while(1)
{
ik=key_scan();//将按键返回值给变量IK
/*****************第15个键按下时处理的程序*****************/
if(ik==15)//如果按下了第15个键,就将按下的次数清0,即进入初始化
{
num=0;//清0计数器
temp=0;//清0计数器
qing=qing1=qing2=qing3=0;//密码比较变量清0
}
/*****************数码管显示部分*****************/
if(ik<16)//如果返回值小于16就在数码
xian(ik); //调用显示子程序
else//如果返回值不小于16,就显示黑屏
xian(16);
/*****************密码判断部分*****************/
mima();
}
}本文引用地址:https://www.eepw.com.cn/article/201611/323383.htm
评论