#include <GetKeyValue.h>
#include "STC15W408AS.h"
sbit key_power=P1^5;
unsigned char key_delay_put=0;
unsigned char key_delay_counter=0;
//°′¼üé¨Ãèoˉêy
unsigned char key_board_scan(void)
{
unsigned int ii,zz=0;
P14 = 0;
ii = P3; //¶áè¡¶Ë¿ú×′ì¬
switch(ii)
{
case 0xfe: zz=1; break; //¡°K1¡±±»°′ÏÂ
case 0xfd: zz=2; break; //¡°K2¡±±»°′ÏÂ
case 0xfb: zz=3; break; //"K3"±»°′ÏÂ
case 0xf7: zz=5; break; //¡±K4¡°±»°′ÏÂ
case 0xef: zz=7; break; //¡°K1¡±±»°′ÏÂ
case 0xdf: zz=4; break; //¡°K2¡±±»°′ÏÂ
case 0xbf: zz=6; break; //"K3"±»°′ÏÂ
case 0x7f: zz=8; break; //¡±K4¡°±»°′ÏÂ
default:break;
}
if(zz==0)
{
if(key_power==0) zz=9;
}
P14 = 1;
return zz;
}
//¸ù¾Y¼üÖμé¨ÃèoˉêyμĽá1û½øDDÏû¶¶μè×ÛoÏ′|àíμÄoˉêy
unsigned char ReadKeyboard(void)
{
// static unsigned char key_state =0,key_value1,key_value2,key_value3,key_value4;
static unsigned char key_state =0,key_value1,key_value2,key_value3;
static unsigned char key_time =0; //Ô-Ï趨òåμÄêÇuintDí£¬êμ¼êéÏ2»DèòaÕaÃ′3¤μÄêy¾YààDí£¡
unsigned char key_return =0,key_return1 =0;
switch(key_state)
{
case 0: // ÅD¶ÏêÇ·ñóD¼ü°′ÏÂ
if(key_board_scan() != 0) { key_state = 1; } // óD°′¼ü£¬×aÏû¶¶è·èÏ×′ì¬
key_delay_put=0;
break;
case 1: // Ïû¶¶′|àí
if(++key_time >= 1) // ¸Ä±äÅD¶Ïìõ¼t¿é¸Ä±ä¼üÅìáéÃô¶è
{
key_value1 = key_board_scan();
if(key_value1 != 0) { key_state = 2; }
else { key_state = 0; key_time =0; }
key_delay_put=0;
}
break;
case 2: // è·èϰ′¼ü,í¬×′ì¬1±è½Ï
key_value2 = key_board_scan();
key_delay_put=0;
if(key_value2 == key_value1) // Ôù′Îé¨Ãè
{
key_return1 = key_value2;
key_state =3; // ×aèëμè′y°′¼üêí·Å×′ì¬
key_time =0; // Çå0°′¼üê±¼ä¼ÆêyÆ÷
}
else { key_state = 0; key_time =0;} // á½′ÎáDμçÆ½2»í¬·μ»Ø×′ì¬0£¨Ïû¶¶′|àí£©
break;
case 3: // ¼Æêy1,(°′1.28S,ᬷ¢ÅD¶Ï)
key_value3 = key_board_scan();
if(key_value3 == 0) { key_state = 0; key_delay_put=0;} // °′¼üòÑêí·Å£¬×a»»μ½°′¼ü3õê¼ì¬
// else if((key_value3 == S2)||(key_value3 == S3)) // ¸Ä±ä′ËÅD¶Ïìõ¼t,¿éòÔè·¶¨
else
{ // ÄÄD©¼ü¾ß±¸¼óËù1|Äü,3#,4#óD¼óËù1|Äü
if(key_value3 == KEY_TONGSUO) key_delay_counter=20;
else if((key_value3 == KEY_GONGLV)||(key_value3 == KEY_SHEZHI)||(key_value3 == KEY_SHUIMIAN)||(key_value3 == KEY_DINGSHIKAI)||(key_value3 == KEY_DINGSHIGUAN)) key_delay_counter=130;
else key_delay_counter=30;
if(++key_time >= key_delay_counter) // 3#¡¢4#°′¼üò»Ö±°′×ÅûËé¿a£¬Ôò×î3¤30*15=0.45Soó£¬Ö±½ó·μ»Ø¸Ã¼üÖμ£¡
// Ôú1.28SÄú2»»áóDèÎoμüÖμ·μ»Ø£¨ËüμļüÖμÔú×′ì¬2½áêøêÇòѾ-·μ»Ø1yáË£©
{ // Çò¿éòÔ½øèë×′ì¬4£¬Æô¶ˉᬷ¢1|Äü£¡
// key_state = 4; // èô°′ÏÂμÄêÇ4#¼ü£¬ÔòÔúμèμ½ËüËé¿aǰ£¬2»»áÔù·μ»ØèÎoμüÖμ(ËüμļüÖμÔú×′ì¬2ê±òѾ-·μ»Øò»′ÎáË)£¡
key_delay_put=1;
key_time = 0; // Çå°′¼ü¼ÆêyÆ÷
key_return1 = key_value3;
}
}
break;
case 4: // ¼Æêy2,ᬷ¢1|Äü
key_value4 =key_board_scan();
if(key_value4 == 0) { key_state=0;} // °′¼üòÑêí·Å£¬×a»»μ½°′¼ü3õê¼ì¬
else if(++key_time >= 5) // 1.5Soó£¬Ã¿1y5*15mS=0.075S·μ»Øò»′μüÖ죬¼′ᬷ¢1|Äü£¡
{ // £¡£¡£¡£¡£¡£¡»1¿éòÔ½øò»2½×aμ½±èèç×′ì¬5¡¢6μ裬½øò»2½¼ó¿ìᬷ¢μÄËù¶è£¡£¡£¡£¡£¡£¡
key_time = 0; // Çå°′¼ü¼ÆêyÆ÷
key_return1 = key_value4; // êä3ö¡°á¬·¢¡±
}
break;
}
return key_return1;
}
|