You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
1.9 KiB
160 lines
1.9 KiB
#include "bsp_key.h"
|
|
#include "bsp_config_delay.h"
|
|
|
|
U32 timeout = 0x3FFFFF;
|
|
|
|
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)
|
|
{
|
|
timeout = 0x3FFFFF;
|
|
if(c == 1)
|
|
{
|
|
if(KC1 == 0)
|
|
{
|
|
delayInMs(10);
|
|
if(KC1 == 0)
|
|
{
|
|
while(KC1 == 0 && timeout--);
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else if(c == 2){
|
|
if(KC2 == 0)
|
|
{
|
|
delayInMs(10);
|
|
if(KC2 == 0)
|
|
{
|
|
while(KC2 == 0 && timeout--);
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else if(c == 3){
|
|
if(KC3 == 0)
|
|
{
|
|
delayInMs(10);
|
|
if(KC3 == 0)
|
|
{
|
|
while(KC3 == 0 && timeout--);
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else if(c == 4){
|
|
if(KC4 == 0)
|
|
{
|
|
delayInMs(10);
|
|
if(KC4 == 0)
|
|
{
|
|
while(KC4 == 0 && timeout--);
|
|
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;
|
|
}
|