智能车制作
标题:
奇葩的矩阵键盘
[打印本页]
作者:
穆旦阿斗
时间:
2013-8-7 10:59
标题:
奇葩的矩阵键盘
本帖最后由 穆旦阿斗 于 2013-8-7 11:03 编辑
我的矩阵键盘是行扫描,液晶显示1~16。前面两行和后面一行可以正常显示,第三行液晶没反应,这个是哪错了呢?我直接短路第三行和任意列也没有反应
IO口初始化
void IO_Init(void)
{
DDRA = 0xFF;//A口用于液晶
DDRB = 0x0F;//高位输入低位输出 //低位是行
PORTB= 0xFF;
PUCR_PUPBE = 1;
}
矩阵键盘
void KeyScan(void)
{
PORTB = 0xF0;
_asm(nop);
if( PORTB ^ 0xF0 )
{
PORTB = 0xFE;
_asm(nop);
switch( PORTB & 0xF0 )
{
case 0xE0:Num=1;break;
case 0xD0:Num=2;break;
case 0xB0:Num=3;break;
case 0x70:Num=4;break;
}
PORTB = 0xFD;
_asm(nop);
switch( PORTB & 0xF0 )
{
case 0xE0:Num=5;break;
case 0xD0:Num=6;break;
case 0xB0:Num=7;break;
case 0x70:Num=8;break;
}
PORTB = 0xFB;
_asm(nop);
switch( PORTB & 0xF0 )
{
case 0xE0:Num=9; break;
case 0xD0:Num=10;break;
case 0xB0:Num=11;break;
case 0x70:Num=12;break;
}
PORTB = 0xF7;
_asm(nop);
switch( PORTB & 0xF0 )
{
case 0xE0:Num=13;break;
case 0xD0:Num=14;break;
case 0xB0:Num=15;break;
case 0x70:Num=16;break;
}
}
}
作者:
mirsfzrx520
时间:
2013-8-7 11:09
看看扫描连续性,和点平上拉,中断处理有没问题~
作者:
穆旦阿斗
时间:
2013-8-7 11:42
本帖最后由 穆旦阿斗 于 2013-8-7 11:44 编辑
mirsfzrx520 发表于 2013-8-7 11:09
看看扫描连续性,和点平上拉,中断处理有没问题~
呵呵 解决了事实证明不是这些的问题
把扫描第三行按键的程序改为
PORTB = 0xFB;
_asm(nop);
temp = PORTB & 0xF0;
switch( temp )
{
case 0xE0:Num=9; break;
case 0xD0:Num=10;break;
case 0xB0:Num=11;break;
case 0x70:Num=12;break;
}
但是我其他行都没改都没有问题啊,为什么这个要这样处理呢?
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2