?? key_read.c
字號:
volatitle UCHAR *KEYBOARD_base=(UCHAR *)0x06000000;
#define KEY_VALUE_MASE 0x0F
/********************************************************
*函數名稱: init_keyboard
*函數功能: 鍵盤控制初始化部分
*參數: 無
*返回: 無
********************************************************/
void init_keyboard()
{
rINTMOD=0x0;
rINTCON=0x1;
rINTMSK=~(BIT_GLOBAL|BIT_EINT1);
pISR_ENT1=(int)keyboardint;
/*PORTG*/
rPCONG=0xffff;
rEXINT=rEXTINT|0x20;
rL_ISPC=BIT_EINT;
rEXINTPND=0xf;
}
/***********************************************************
*函數名稱: keyboardint
*函數功能: 鍵盤中斷服務程序
*參數: 無
*返回: 無
************************************************************/
void keyboardint()
{
int value;
rI_ISPC=BIT_EINT1;
rEXTINTPND=0xf;
value=key_read();
if(value>-1)
Digit_Led_Symbol(value);
rI_ISPC=BIT_EINT1;
rINTCON=0x1;
}
/*數碼管短碼表*/
int Seg[]={SEGMENT_A,SEGMENT_B,SEGMENT_C,SEGMENT_D,SEGMENT_E,SEGMENT_F,SEGMENT_G,SEGMENT_P};
/******************************************************
*函數名稱: Digit_Led_Segment
*函數功能: 8段數碼管顯示控制
*參數: seg_num____數碼管段號
*返回: 無
*****************************************************/
void Digit_Led_Segment(int seg_num)
{
/*segment control*/
if((seg_num>=0)&&(seg_num<8))
LED8ADDR=~Seg[seg_num];
}
/*************************************************************
* 函數名稱: KEY_READ
* 函數功能: 讀鍵盤值
* 參數: 無
* 返回: 正確時返回鍵盤值,錯誤時返回-1
*************************************************************/
inline int key_read()
{
int value;
char temp;
temp= * (keyboard_base+0xFD); //讀地址1(A1為低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判斷是否有鍵盤按下
{
if((temp&0x1)==0) //判斷按鍵所對應的數據位
value=3;
else if((temp&0x2)==0)
value=2;
else if((temp&0x4)==0)
value=1;
else if((temp&0x8)==0)
value=0;
return value;
}
temp= * (keyboard_base+0xFB); //讀地址2(A2為低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判斷是否有鍵盤按下
{
if((temp&0x1)==0) //判斷按鍵所對應的數據位
value=7;
else if((temp&0x2)==0)
value=6;
else if((temp&0x4)==0)
value=5;
else if((temp&0x8)==0)
value=4;
return value;
}
temp= * (keyboard_base+0xF7); //讀地址3(A3為低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判斷是否有鍵盤按下
{
if((temp&0x1)==0) //判斷按鍵所對應的數據位
value=0xb;
else if((temp&0x2)==0)
value=0xa;
else if((temp&0x4)==0)
value=9;
else if((temp&0x8)==0)
value=8;
return value;
}
temp= * (keyboard_base+0xEF); //讀地址4(A4為低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判斷是否有鍵盤按下
{
if((temp&0x1)==0) //判斷按鍵所對應的數據位
value=0xf;
else if((temp&0x2)==0)
value=0xe;
else if((temp&0x4)==0)
value=0xd;
else if((temp&0x8)==0)
value=0xc;
return value;
}
return -1; //按鍵讀/寫失敗
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -