|
#define IO_KEY1 P00 //復(fù)用LED_SegA //按鍵復(fù)用
#define IO_KEY2 P01 //復(fù)用LED_SegB
#define IO_KEY3 P02 //復(fù)用LED_SegC
#define IO_KEY4 P03 //復(fù)用LED_SegD
#define IO_KEY5 P04 //復(fù)用LED_SegE
//*********************** 按鍵值 *************************************
#define KEYVALUE_Key1 0x01 //IO_KEY1按鍵有效的對(duì)應(yīng)值
#define KEYVALUE_Key2 0x02 //IO_KEY2按鍵有效的對(duì)應(yīng)值
#define KEYVALUE_Key3 0x04 //IO_KEY3按鍵有效的對(duì)應(yīng)值
#define KEYVALUE_Key4 0x08 //IO_KEY4按鍵有效的對(duì)應(yīng)值
#define KEYVALUE_Key5 0x10 //IO_KEY5按鍵有效的對(duì)應(yīng)值
unsigned char bdata KEYFlag =0; //按鍵狀態(tài)寄存器
sbit KEYFlag1 = KEYFlag^0; //IO_KEY1的按鍵狀態(tài)
sbit KEYFlag2 = KEYFlag^1; //IO_KEY2的按鍵狀態(tài)
sbit KEYFlag3 = KEYFlag^2; //IO_KEY3的按鍵狀態(tài)
sbit KEYFlag4 = KEYFlag^3; //IO_KEY4的按鍵狀態(tài)
sbit KEYFlag5 = KEYFlag^4; //IO_KEY5的按鍵狀態(tài)
unsigned char keydata_temp; //按鍵掃描值
unsigned char keydata_old; //上次的按鍵值
unsigned int keypresscount; //按鍵按下計(jì)時(shí)寄存器
unsigned int NOPressTime; //按鍵沒(méi)有按的計(jì)時(shí)寄存器???????
void keyscan(void)
{
unsigned char i;
wei1=0;wei2=0; wei3=0; wei4=0;wei5=0;wei6=0;
P0M = 0xE0; //0b11100000 //0為輸入,1為輸出 輸入輸出控制寄存器,將各個(gè)段碼改為輸入
P0UR = 0x1F; //0b00011111 //內(nèi)置上拉寄存器 1上拉 0無(wú)上拉
for(i=0;i<10;i++)//20us
{
_nop_ ();
_nop_ ();
}
keydata_temp = 0;
if(IO_KEY1 == 0)
{
keydata_temp |= KEYVALUE_Key1;
}
if(IO_KEY2== 0)
{
keydata_temp |= KEYVALUE_Key2;
}
if(IO_KEY3 == 0)
{
keydata_temp |= KEYVALUE_Key3;
}
if(IO_KEY4 == 0)
{
keydata_temp |= KEYVALUE_Key4;
}
if(IO_KEY5 == 0)
{
keydata_temp |= KEYVALUE_Key5;
}
P0M = 0xFF; //0b11111111 //0為輸入,1為輸出 輸入輸出控制寄存器,將各個(gè)段碼改為輸入
P0UR = 0x00; //0b00000000
}
void KeyService(void)
{ uchar t;
if(keydata_temp == 0)
{//按鍵未按下
keypresscount = 0;
keydata_old = 0;
NOPressTime++;
if(NOPressTime>=2500) NOPressTime=2501;
}
else
{
if(keydata_temp == keydata_old)
{
NOPressTime = 0;
keypresscount++;
if(keypresscount>60000) keypresscount =60000;
if(keypresscount == 25)
{
if(keydata_temp == KEYVALUE_Key1)
{
KEYFlag1 =1;
}
if(keydata_temp == KEYVALUE_Key2)
{
KEYFlag2 =1;
}
if(keydata_temp == KEYVALUE_Key3)
{
KEYFlag3 =1;
}
if(keydata_temp == KEYVALUE_Key4)
{
KEYFlag4 =1;
}
if(keydata_temp == KEYVALUE_Key5)
{
KEYFlag5 =1;
}
}
}
else
{
if(keypresscount < 5)
{
keypresscount = 0;
keydata_old = keydata_temp;
}
}
}
|
|