【发布时间】:2023-05-25 08:49:02
【问题描述】:
我试图弄清楚如何使用 Atmega 32 从我的 COM-08653 键盘读取输入。电路视图和一些 arduino 教程让我简要了解了它的外观。 不幸的是,我没有得到任何意见,我也不知道为什么。
char test()
{
char result = 0;
for (int col = 0; col < COLS; col++)
{
PORTD |= (1 << colPinMap[col]);
for (int row = 0; row < ROWS; row ++)
{
int pattern = 1 << rowPinMap[row];
if((PIND & 0b1111) == pattern)
{
char debounce = 0;
for(int db = 0; db < 10; db++)
{
_delay_ms(1);
if((PIND & 0b1111) != pattern)
{
debounce = 1;
break;
}
}
if(!debounce)
{
PORTA = 1 << 3; //testing if the press is beeing noticed
while((PIND & 0b1111) == pattern) ;
PORTA = 0b0000;
result = keymap[row][col];
}
}
}
PORTD &= ~(1 << colPinMap[col]);
}
return result;
}
我已经尝试过多次使用不同的代码,但它不起作用。 我检查了这个键盘,它工作正常,我还检查了列和行是否连接正确。不幸的是,我确信这一点。
这是端口配置:
#define COLS 3
#define ROWS 4
char keymap[COLS][ROWS] =
{
{ '1', '2', '3' },
{ '4', '5', '6' },
{ '7', '8', '9' },
{ '*', '0', '#' }
};
int colPinMap[COLS] = { 4, 5, 6 };
int rowPinMap[ROWS] = { 0, 1, 2, 3 };
keyConfig()
{
DDRD = 0xf0;
PORTD = 0x0f;
//PORTD = 0x00;
DDRA = 0xff;
_delay_ms(2000);
}
什么也没发生,我不知道为什么。感谢您的帮助。
【问题讨论】:
标签: c microcontroller avr avr-gcc atmega