基于51单片机的电子密码锁,4*4键盘不起作用

电路连接正确,程序在PROTEUS 上的仿真也正确找不到原因,急
p3口接键盘

可能是延时问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-15
4乘4扫描键盘,主要要注意的是,单片机读IO口时,要先写“1”,才能读,你看看是不是这个地方的毛病
第2个回答  2009-05-15
如果别的功能正确,就换按键程序试试.
第3个回答  2009-05-16
不明白你有什么问题...这里给个子函数,希望能帮你找出问题~!
注意:前面先定义全局变量

unsigned char code key_code[]={
0xe7,0xeb,0xdb,0xbb,0xed,0xdd,0xbd,0xee,
0xde,0xbe,0xd7,0xb7,0x77,0x7b,0x7d,0x7e };
/**********************************************************

键盘扫描子函数

**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j;

P4=0xf0;
scan1=P3;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(10); //延时30ms
scan1=P3;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
beep();
P3=0x0f;
scan2=P3;
keycode=scan1|scan2; //组合成键编码

for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key); //

}
}
}
}
else P3=0xff;

return (16);
}

/**********************************************************

判键是否按下子函数

**********************************************************/
void keydown()
{
P3=0xf0;
if((P1&0xf0)!=0xf0)
{
keyscan();
P0=disp_code[key];

}
}
这是查表法,比较容易弄懂!
相似回答