#include "hw_config.h"
#include "led.h"
#include "key.h"
#include "uart.h"
static volatile u16 s_key = 0;
static volatile u8 s_exit = 0;
void gpio_polling_key(void)
{
s_exit = 0;
while(!s_exit)
{
if( !inp(PINH, PH0) && !(s_key & KEY_KEY1) )
{
usart0_puts("Key1 Pressed.\r\n");
s_key |= KEY_KEY1;
}
else if( inp(PINH, PH0) && (s_key & KEY_KEY1) )
{
usart0_puts("Key1 Released.\r\n");
s_key &= ~KEY_KEY1;
}
if( !inp(PINH, PH1) && !(s_key & KEY_KEY2) )
{
usart0_puts("Key2 Pressed.\r\n");
s_key |= KEY_KEY2;
}
else if( inp(PINH, PH1) && (s_key & KEY_KEY2) )
{
usart0_puts("Key2 Released.\r\n");
s_key &= ~KEY_KEY2;
}
if( !inp(PINH, PH2) && !(s_key & KEY_KEY3) )
{
usart0_puts("Key3 Pressed.\r\n");
s_key |= KEY_KEY3;
}
else if( inp(PINH, PH2) && (s_key & KEY_KEY3) )
{
usart0_puts("Key3 Released.\r\n");
s_key &= ~KEY_KEY3;
}
if( !inp(PINH, PH3) && !(s_key & KEY_KEY4) )
{
usart0_puts("Key4 Pressed.\r\n");
s_key |= KEY_KEY4;
}
else if( inp(PINH, PH3) && (s_key & KEY_KEY4) )
{
usart0_puts("Key4 Released.\r\n");
s_key &= ~KEY_KEY4;
}
if( !inp(PINH, PH4) && !(s_key & KEY_KEY5) )
{
usart0_puts("Key5 Pressed.\r\n");
s_key |= KEY_KEY5;
}
else if( inp(PINH, PH4) && (s_key & KEY_KEY5) )
{
usart0_puts("Key5 Released.\r\n");
s_key &= ~KEY_KEY5;
}
if( !inp(PINH, PH5) && !(s_key & KEY_KEY6) )
{
usart0_puts("Key6 Pressed.\r\n");
s_key |= KEY_KEY6;
}
else if( inp(PINH, PH5) && (s_key & KEY_KEY6) )
{
usart0_puts("Key6 Released.\r\n");
s_key &= ~KEY_KEY6;
}
if( !inp(PINH, PH6) && !(s_key & KEY_KEY7) )
{
usart0_puts("Key7 Pressed.\r\n");
s_key |= KEY_KEY7;
}
else if( inp(PINH, PH6) && (s_key & KEY_KEY7) )
{
usart0_puts("Key7 Released.\r\n");
s_key &= ~KEY_KEY7;
}
if( !inp(PINH, PH7) && !(s_key & KEY_KEY8) )
{
usart0_puts("Key8 Pressed.\r\n");
s_key |= KEY_KEY8;
}
else if( inp(PINH, PH7) && (s_key & KEY_KEY8) )
{
usart0_puts("Key8 Released.\r\n");
s_key &= ~KEY_KEY8;
}
_delay_ms(20);
}
}
void main(void)
{
CLI(); // all interrupt disable
bsp_usart0_gpio_init();
bsp_usart0_init(F_CPU, EBaud115200, EData8, EParNone, EStop1, FALSE );
bsp_usart0_interrupt_enable();
// set input
cbi(DDRH, PH0);
cbi(DDRH, PH1);
cbi(DDRH, PH2);
cbi(DDRH, PH3);
cbi(DDRH, PH4);
cbi(DDRH, PH5);
cbi(DDRH, PH6);
cbi(DDRH, PH7);
gpio_polling_key();
SEI(); // all interrupt enable
while(1)
{
}
}
|