#include "bsp_key.h" #include "bsp_config_delay.h" U8 bsp_key_init(void) { D_stdIO_P3(BITN6); D_stdIO_P1(BITN7); D_stdIO_P0(BITN6); D_stdIO_P4(BITN3); D_stdIO_P1(BITN0); D_stdIO_P0(BITN7); D_stdIO_P1(BITN3); D_stdIO_P2(BITN0); //初始化为高电平 KR1 = KR2 = KR3 = KR4 = 1; //初始化为高电平 KC1 = KC2 = KC3 = KC4 = 1; return 0; } void scan_row(U8 r) { KR1 = 1; KR2 = 1; KR3 = 1; KR4 = 1; switch(r){ case 1: KR1 = 0;break; case 2: KR2 = 0;break; case 3: KR3 = 0;break; case 4: KR4 = 0;break; default: break; } } U8 scan_col(U8 c) { if(c == 1) { if(KC1 == 0) { delayInMs(10); if(KC1 == 0) { while(KC1 == 0); return 1; } } } else if(c == 2){ if(KC2 == 0) { delayInMs(10); if(KC2 == 0) { while(KC2 == 0); return 1; } } } else if(c == 3){ if(KC3 == 0) { delayInMs(10); if(KC3 == 0) { while(KC3 == 0); return 1; } } } else if(c == 4){ if(KC4 == 0) { delayInMs(10); if(KC4 == 0) { while(KC4 == 0); return 1; } } } return 0; } U8 bsp_key_scan(void) { //扫描第1行 scan_row(1); if(scan_col(1) > 0){ return 0; } if(scan_col(2) > 0){ return 1; } if(scan_col(3) > 0){ return 2; } if(scan_col(4) > 0){ return 3; } //扫描第2行 scan_row(2); if(scan_col(1) > 0){ return 4; } if(scan_col(2) > 0){ return 5; } if(scan_col(3) > 0){ return 6; } if(scan_col(4) > 0){ return 7; } //扫描第3行 scan_row(3); if(scan_col(1) > 0){ return 8; } if(scan_col(2) > 0){ return 9; } if(scan_col(3) > 0){ return 10; } if(scan_col(4) > 0){ return 11; } //扫描第4行 scan_row(4); if(scan_col(1) > 0){ return 12; } if(scan_col(2) > 0){ return 13; } // if(scan_col(KC3) > 0){ // return 14; // } // if(scan_col(KC4) > 0){ // return 15; // } return BSP_KEY_NUM_MAX; }