#include "bsp_key_nonblock.h" U32 timeout = 0x3FFFFF; U8 bsp_key_nonblock_init(void) { //初始化为高电平 KR1 = KR2 = KR3 = KR4 = 1; //初始化为高电平 KC1 = KC2 = KC3 = KC4 = 1; return 0; } void bsp_key_nonblock_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 bsp_key_nonblock_scan_col(U8 c) { if(c == 1) { return (KC1 == 0); } else if(c == 2) { return (KC2 == 0); } else if(c == 3) { return (KC3 == 0); } else if(c == 4) { return (KC4 == 0); } return 0; } U8 bsp_key_nonblock_scan(U8 *row, U8 *col) { //扫描第1行 bsp_key_nonblock_scan_row(1); *row = 1; if(bsp_key_nonblock_scan_col(1) > 0){ *col = 1; return 0; } if(bsp_key_nonblock_scan_col(2) > 0){ *col = 2; return 1; } if(bsp_key_nonblock_scan_col(3) > 0){ *col = 3; return 2; } if(bsp_key_nonblock_scan_col(4) > 0){ *col = 4; return 3; } //扫描第2行 bsp_key_nonblock_scan_row(2); *row = 2; if(bsp_key_nonblock_scan_col(1) > 0){ *col = 1; return 4; } if(bsp_key_nonblock_scan_col(2) > 0){ *col = 2; return 5; } if(bsp_key_nonblock_scan_col(3) > 0){ *col = 3; return 6; } if(bsp_key_nonblock_scan_col(4) > 0){ *col = 4; return 7; } //扫描第3行 bsp_key_nonblock_scan_row(3); *row = 3; if(bsp_key_nonblock_scan_col(1) > 0){ *col = 1; return 8; } if(bsp_key_nonblock_scan_col(2) > 0){ *col = 2; return 9; } if(bsp_key_nonblock_scan_col(3) > 0){ *col = 3; return 10; } if(bsp_key_nonblock_scan_col(4) > 0){ *col = 4; return 11; } //扫描第4行 bsp_key_nonblock_scan_row(4); *row = 4; if(bsp_key_nonblock_scan_col(1) > 0){ *col = 1; return 12; } if(bsp_key_nonblock_scan_col(2) > 0){ *col = 2; return 13; } // if(bsp_key_nonblock_scan_col(KC3) > 0){ // return 14; // } // if(bsp_key_nonblock_scan_col(KC4) > 0){ // return 15; // } return BSP_KEY_NUM_MAX; }