|
发表于 2012-2-9 23:44:43
|
显示全部楼层
不需要性能的时候可读性尤其重要....
GPIOB 高8 低8 8X8扫键盘....
const char keyboard_array[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
char keyboard_pressed = 0;
char keyboard_value_x;
char keyboard_value_y;
void keyboard_delay(int n)
{
OSTimeDly(n);
}
void keyboard_send(char x, char y, char status)
{
}
void keyboard_scan(void)
{
int i;
int j;
unsigned short int value;
GPIO_Write(GPIOB, 0x00ff); //写数据
value = GPIO_ReadInputData(GPIOB); //读端口
if ((value >> 8) != 0)
{
keyboard_delay(50);
value = GPIO_ReadInputData(GPIOB); //读端口
if ((value >> 8) != 0)
{
for(i = 0; i < 8; i++)
{
GPIO_Write(GPIOB, keyboard_array);
value = GPIO_ReadInputData(GPIOB); //读端口
for(j = 0; j < 8; j++)
{
if (((value >> 8) == keyboard_array[j]) && (keyboard_pressed == 0))
{
keyboard_value_x = i;
keyboard_value_y = j;
keyboard_pressed = 1;
keyboard_send(keyboard_value_x, keyboard_value_y, keyboard_pressed);
}
}
}
}
}
else
{
keyboard_delay(50);
if ((value >> 8) == 0)
{
if (keyboard_pressed == 1)
{
keyboard_pressed = 0;
keyboard_send(keyboard_value_x, keyboard_value_y, keyboard_pressed);
}
}
}
} |
|