iar的使用
参考答案
#include "keyboard.h"
#include "MK60_gpio.h"
#include "MK60_systick.h"
#define K1 B1
#define K2 B2
#define K3 B3
#define K4 B4
#define K5 B5
#define K6 B6
uint8_t which_button;
void keyboard_init(void)
{
gpio_init(K1, GPO, 0);
gpio_init(K2, GPO, 0);
gpio_init(K3, GPO, 0);
gpio_init(K4, GPI, 1);
gpio_init(K5, GPI, 1);
gpio_init(K6, GPI, 1);
port_init(K4, PF | ALT1 | PULLUP);
port_init(K5, PF | ALT1 | PULLUP);
port_init(K6, PF | ALT1 | PULLUP);
}
uint8_t key_scan(void)
{
uint8_t temp_key=0;
systick_delay_ms(10);
temp_key=gpio_get(K4);
temp_key+=gpio_get(K5)<<1;
temp_key+=gpio_get(K6)<<2;
if(!temp_key)
return 0;
if(temp_key!=7&&temp_key!=3&&temp_key!=5)
{
gpio_init(K1, GPI, 1);
gpio_init(K2, GPI, 1);
gpio_init(K3, GPI, 1);
port_init_NoAlt(K1,PULLUP);
port_init_NoAlt(K2,PULLUP);
port_init_NoAlt(K3,PULLUP);
gpio_init(K4, GPO, 0);
gpio_init(K5, GPO, 0);
gpio_init(K6, GPO, 0);
temp_key+=gpio_get(K1)<<3;
temp_key+=gpio_get(K2)<<4;
temp_key+=gpio_get(K3)<<5;
switch(temp_key)
{
case 9:
return 1;
case 17:
return 2;
case 33:
return 3;
case 10:
return 4;
case 18:
return 5;
case 34:
return 6;
case 11:
return 7;
case 19:
return 8;
case 20:
return 9;
default :
return 0;
}
}
return 0;
}
最终调试
调试代码
keyboard.c
#include "keyboard.h"
#include "MK60_gpio.h"
#include "MK60_systick.h"
#define K1 B0
#define K2 B1
#define K3 B2
#define K4 B21
#define K5 B22
#define K6 B23
uint8_t which_button;
void keyboard_init( void )
{
gpio_init( K1, GPO, 1 );
gpio_init( K2, GPO, 1 );
gpio_init( K3, GPO, 1 );
gpio_init( K4, GPI, 0 );
gpio_init( K5, GPI, 0 );
gpio_init( K6, GPI, 0 );
port_init( K4, PF | ALT1 | PULLDOWN );
port_init( K5, PF | ALT1 | PULLDOWN );
port_init( K6, PF | ALT1 | PULLDOWN );
}
uint8_t key_scan( void )
{
uint8_t temp_key = 0;
systick_delay_ms( 10 );
temp_key = gpio_get( K4 );
temp_key += gpio_get( K5 ) << 1;
temp_key += gpio_get( K6 ) << 2;
if( !temp_key )
return 0;
if( temp_key != 7 && temp_key != 3 && temp_key != 5 )
{
gpio_init( K1, GPI, 0 );
gpio_init( K2, GPI, 0 );
gpio_init( K3, GPI, 0 );
port_init_NoAlt( K1, PULLDOWN );
port_init_NoAlt( K2, PULLDOWN );
port_init_NoAlt( K3, PULLDOWN );
gpio_init( K4, GPO, 1 );
gpio_init( K5, GPO, 1 );
gpio_init( K6, GPO, 1 );
temp_key += gpio_get( K1 ) << 3;
temp_key += gpio_get( K2 ) << 4;
temp_key += gpio_get( K3 ) << 5;
switch( temp_key )
{
case 9:
return 1;
case 17:
return 2;
case 33:
return 3;
case 10:
return 4;
case 18:
return 5;
case 34:
return 6;
case 12:
return 7;
case 20:
return 8;
case 36:
return 9;
default :
return 0;
}
}
return 0;
}
void key_function( void )
{
which_button = key_scan();
gpio_init( K1, GPO, 1 );
gpio_init( K2, GPO, 1 );
gpio_init( K3, GPO, 1 );
gpio_init( K4, GPI, 0 );
gpio_init( K5, GPI, 0 );
gpio_init( K6, GPI, 0 );
port_init_NoAlt( K4, PULLDOWN );
port_init_NoAlt( K5, PULLDOWN );
port_init_NoAlt( K6, PULLDOWN );
}
keyboard.h
#ifndef _KEYBOARD_H
#define _KEYBOARD_H
#include "common.h"
extern uint8_t which_button;
void keyboard_init(void);
void key_function( void );
uint8_t key_scan(void);
#endif
main.c
#include "headfile.h"
#include "keyboard.h"
int main( void )
{
get_clk();
keyboard_init();
for( ;; )
{
key_function();
if ( which_button )
which_button = 0;
}
}