2019-07-18 12:40发布
先生下山啦 发表于 2014-8-17 21:04 我想 我知道原因了,应该是消抖的问题,这是按照我规定的显示位置依次显示的,显示五个后PassPosi的值累 ...
武力戡乱 发表于 2014-8-16 18:20 里面没有仿真文件吧,我用你原来的仿真并且改动了电路。 开始上电就有没有显示。按键仍然没有反应。于 ...
51密码锁.zip 下载积分: 积分 -1 分
261.3 KB, 下载次数: 7, 下载积分: 积分 -1 分
先生下山啦 发表于 2014-8-16 00:19 我又弄了好长时间代码,改来改去还是基本上是没有改动,因为我觉得代码应该是可以实现功能的。可能是我陷 ...
最多设置5个标签!
你细品一下,你那个程序,真要明天有时间研究了。确实有点意思!
这个是8.0的,给你截个图吧。
你这个程序我没看懂,但是需要加个按键等待释放。
//作 者:武力戡乱
//项 目:按键驱动
//日 期: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矩阵键盘仿真。
我想 我知道原因了,应该是消抖的问题,这是按照我规定的显示位置依次显示的,显示五个后PassPosi的值累加到4,也就是在最后一个数码管.又因为没有按enterkey键,PassPosi的值没有归零。所以再按其他键就没有上述情况了。看来消抖没有做好。
我用联调调试对电路和程序又做了修改,现在好很多了。但为什么每次仿真时,第一次按按键会在多个数码管上依次显示,(理论上应该只在最后一个数码管显示)再按按键就正常了。如果是因为按键抖动的话没理由只有第一次是这样啊。而且我觉得这也是影响密码输入准确与否的一个原因。我再想办法调试看看,找找原因和办法。
51密码锁.zip 下载积分: 积分 -1 分
261.3 KB, 下载次数: 7, 下载积分: 积分 -1 分
里面没有仿真文件吧,我用你原来的仿真并且改动了电路。
开始上电就有没有显示。按键仍然没有反应。于是我就帮你写个显示程序,是滚屏显示2014-8。做的很粗糙,没细腻的去想,只是想告诉你怎么做显示吧。你可以改也可以自己在从新写,只要你懂原理了。注意,你原来的电路错了
一周热门 更多>