[求助] 单片机键盘扫描问题

hpeng1323   2011-10-28 21:33 楼主

我做了一电子密码锁 输玩4位密码之后 如果不按确定键(即in=12)而按其他的键 然后在按确定键就不起作用了 这是为什么 而且我怎么才能增加取消我输入的密码的功能 高手帮忙解决下

void unlock()
{
 uchar in,i;
 if(num==0)
 {
     lcd_xieping(0,0,"**密码锁系统**    ");
  lcd_xieping(1,0,"----------------");
  lcd_xieping(2,0,"  请输入密码:  ");
     lcd_xieping(3,0,"                ");
  for(i=0;i<4;i++)
  {
   t1=keyscan1();
   lcd_xieping(3,i,"*");
   num=0;
  }//输密码
 }
in=keyscan1();
  if(in==12)
  {
   i=4;
  }
 }

 if(in==12)//in-确定键标志位
 {
 in=0;
 num=0;
 if((t1[0]==t[0])&&(t1[1]==t[1])&&(t1[2]==t[2])&&(t1[3]==t[3]))
 {
  flag=1;//解密成功与否标志位
  //unlock_i=1;
  a=0;//功能键标志
  lcd_xieping(0,0,"**密码锁系统**   ");
  lcd_xieping(1,0,"----------------");
  lcd_xieping(2,0,"    密码正确!    ");
  lcd_xieping(3,0,"  您的身份已确认");
  delay_ms(1500);
  lcd_xieping(1,0,"----------------");
  lcd_xieping(2,0,"功能  I 开锁    ");
  lcd_xieping(3,0,"      II修改密码");
 }
 else
 {
  flag=0;
  count++;
  if(count==3)
  {
   count=0;
   num=1;
   lcd_xieping(1,0,"------------");
   lcd_xieping(2,0,"您的机会已用完  ");
   lcd_xieping(3,0,"对不起您无法进入");
   FM=1;
   delay_ms(1000);
   FM=0;
 
  }
 }
 }
 }
 

回复评论 (1)

因为你如果不是按确定键而是其他键,in值就不为12,而你的程序又没有判断in不为12的情况,所以就悲剧了

取消功能嘛,判断下,如果keyscan1()输入的是取消键,T1数组清0,i清0,LCD显示的*也清除

点赞  2011-10-29 14:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复