?? kbsub.c
字號:
/*-----------------------------------------------------*
*文件描述:本文件包含了H08C鍵盤中斷子函數,分別為: *
*(1)KB_Init:鍵盤初始化函數 *
* void KB_Init(void) *
*(2)KB_Scan:掃描讀取鍵值函數 *
* unsigned char KB_Scan(void) *
*(3)KB_Def:鍵值轉為定義值函數 *
* unsigned char KB_Def(unsigned char KB_valve) *
*-----------------------------------------------------*/
/*[以下為子程序源代碼]*/
/*[頭文件]*/
#include "GP32C.H"
#include "KB.h"
/*KB_Init:鍵盤初始化函數-------------------------------*
*功 能:初始化鍵盤中斷的引腳,但未開放鍵盤中斷 *
*參 數:無 *
*返 回:無 *
*-----------------------------------------------------*/
void KB_Init(void)
{
KB_P=0x00; //復位KB_P
KB_D=0b00001111; //定定義7-4為輸入,3-0為輸出
KB_PUE=0b11110000; //定義輸入引腳有內部上拉電阻
INTKBSCR|= (1<<IntBit);//屏蔽鍵盤中斷(IMASKk=1)
INTKBIER=0b11110000; //允許輸入引腳的中斷可進入
INTKBSCR|= (1<<ACKKBit); //清鍵盤中斷請求(ACKK=1)
}
/*KB_Scan:掃描讀取鍵值函數-----------------------------*
*功 能:掃描一次4*4鍵盤上的按鍵,讀取鍵值->*p *
* 若無按鍵,*p為0xff *
*參 數:無 *
*-----------------------------------------------------*/
unsigned char KB_Scan(void)
{
unsigned char line,i,j,tmp;
line=0b11111110; //使第一根行線為0(低電平)
for(i=1;i<=4;i++) //將掃描4根行線
{
tmp=KB_P; //取KB_P->tmp
tmp|=0b00001111; //KB_P.7-4保留,KB_P.3-0為1
KB_P=tmp&line; //令KB_P.n=0,n=0、1、2、3
asm("NOP"); //等待,消除按鍵抖動
asm("NOP");
tmp=KB_P;
tmp&=0b11110000; //看第n行是否有鍵按下
if(tmp!=0xf0) //本行有鍵按下
{
for(j=0;j<250;j++);
tmp=KB_P;
break;
}
else //本行無鍵按下,掃描下一行
line=(line<<1)|0x01;
}
if(i==5) tmp=0xff;
return(tmp);
}
/*KB_Def:鍵值轉為定義值函數----------------------------*
*功 能:鍵值轉為定義值 *
*參 數:鍵值 *
*返 回:鍵定義值 *
*-----------------------------------------------------*/
//鍵盤定義表
const unsigned char KB_Table[]=
{0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'+',
0xED,'4',0xDD,'5',0xBD,'6',0x7D,'-',
0xEB,'7',0xDB,'8',0xBB,'9',0x7B,'*',
0xE7,'<',0xD7,'0',0xB7,'=',0x77,'/',
0x00};
unsigned char KB_Def(unsigned char KB_valve)
{
unsigned char KeyPress;
unsigned char i;
unsigned char j;
i=0;
while(1)
{
j=KB_Table[i];
//與0(定義表結束標志)相比較
if (j==0) //=0,即表中無次定義值
{KeyPress=0xff; break;} //返回0xff
else
//與鍵值相比較
if (j==KB_valve) //找到
{KeyPress=KB_Table[i+1];break;} //取鍵定義值
else
i+=2; //指向下一個鍵值,繼續判斷
};
return KeyPress;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -