51单片机实现密码锁

2019-07-18 12:40发布

这基于51单片机实现密码锁的仿真,但是不知道为什么点击按键时屏幕总是闪烁,数码管也没反应。原先用74HC07驱动数码管也是如此。其他电路部分经过测试应该都是能正常工作的。请大神们帮忙看看。
51密码锁.zip 下载积分: 积分 -1 分
152.03 KB, 下载次数: 61, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
武力戡乱
2019-07-20 09:00
先生下山啦 发表于 2014-8-17 21:04
我想 我知道原因了,应该是消抖的问题,这是按照我规定的显示位置依次显示的,显示五个后PassPosi的值累 ...

你这个程序我没看懂,但是需要加个按键等待释放。
//作     者:武力戡乱
//项     目:按键驱动
//日     期:2014/7/18
//功     能:实现6*6按键功能,通过串口输出
//备     注:电子发烧友论坛-Proteus论坛,网友求助帮忙制作

#include "KEY.h"

//函数:Key_Hit()
//描述:按键判断
//参数:return  1:有按键  0:无按键
static unsigned char Key_Hit(void)
{
  if(KEY_Lie_Read == 0xFF)
    return(0);
  else
    return(1);
}
//函数:Key_Code()
//描述:计算键值
//参数:return   键值
static unsigned char Key_Code(void)
{
  unsigned char row;
  unsigned char lieread = 0;
  unsigned char rownum = 0xFE;
  unsigned char key = 0xFF;

  for(row=0; row<6; row++)
  {                       
    KEY_Row_Write = rownum;
    lieread = KEY_Lie_Read;
    if (lieread != 0xFF)
    {
      switch(lieread)
      {
        case 0xFE:
          key=0 + 6*row;
          break;
        case 0xFD:
          key=1 + 6*row;
          break;
        case 0xFB:
          key=2 + 6*row;
          break;
        case 0xF7:
          key=3 + 6*row;
          break;
        case 0xEF:
          key=4 + 6*row;
          break;         
        case 0xDF:
          key=5 + 6*row;
          break;
      }
    }
    rownum <<= 1;
    rownum ++;
  }
  KEY_Row_Write = 0;
  return(key);
}
//函数:Key_Scan()
//描述:键盘扫描
//参数:return   0xff:无键值  0-15:键值     
unsigned char Key_Scan(void)
{
  unsigned char key_code_temp;
  if(Key_Hit()==1)
  {
    Delay_Int(10,10);
    if(Key_Hit()==1)
    {       
      key_code_temp=Key_Code();
      while(Key_Hit()==1);
      return(key_code_temp);
    }
    else
      return(0xff);
  }
  else
    return(0xff);
}
//函数:Key_Init()
//描述:键盘初始化
//参数:无
void Key_Init(void)
{
  KEY_SetRow_Write;
  KEY_SetLie_Read;
  KEY_Row_Write = 0;
}

这个是我帮网友做的,论坛里面有430的6*6矩阵键盘。
我一会在帮你看看。你先看看这个。然后在找一下,论坛里面的6*6矩阵键盘仿真。

一周热门 更多>