打开RM970原理图,看见一别扭的key方案.如图所示:
整理思路后,编写如下函数实现扫描.
#define SW2 (1<<2) //PC2
#define SW3 (1<<3) //PC3
#define SW4 (1<<4) //PC4
#define SW5 (1<<5) //PC4
#define SW6 (1<<6) //PC3
rt_uint32_t get_key_value(void)
{
rt_uint32_t temp=0;
/* PC5 set high */
GPIO_PCDR |= (1<<5 );
/* get SW2 SW3 SW4 */
temp = GPIO_PCDR&(SW2 | SW3 | SW4);
if ( temp&(SW2) ) //SW2有按下
{
return SW2;
}
if (temp&(SW3|SW4)) //SW3 SW4 SW5 SW6其中有一按下
{
/* PC5 set low */
GPIO_PCDR &= ~(1<<5);
temp = GPIO_PCDR&(SW2 | SW3 | SW4);
if (temp&SW3) //SW3按下
{
return SW3;
}
if (temp&SW4)
{
return SW4;
}
GPIO_PCDR |= (1<<5);
temp = GPIO_PCDR&(SW2 | SW3 | SW4);
if ((temp&SW3) == 0)
{
return SW5;
}
return SW6;
}
/* 没键被按下 */
return 0;
}
测试思路:
temp = get_key_value();
#define key_enter_GETVALUE() !(temp&SW3)
#define key_down_GETVALUE() !(temp&SW6)
#define key_up_GETVALUE() !(temp&SW5)
#define key_right_GETVALUE() !(temp&SW4)
#define key_left_GETVALUE() !(temp&SW2)
if ( key_enter_GETVALUE() == 0 )
{
rt_kprintf("key_enter
");
}
......................