📄 key.c
字号:
#include <reg51.h>
#include <SwitchDect.h>
#define uchar unsigned char
bit bdata KeyFlag;
uchar KeySeqFlag = 0;
/********************************************
uchar code KeyTab[16] =
{
0x88,0x84,0x82,0x81,// 1 2 3 PU
0x48,0x44,0x42,0x41,// 4 5 6 PD
0x28,0x24,0x22,0x21,// 7 8 9 NULL
0x18,0x14,0x12,0x11,// * 0 # NULL
} ******************************************/
void Delay10ms(void)
{
uchar i,j,k;
for(i=5; i>0; i--)
for(j=4; j>0; j--)
for(k=248; k>0; k--);
}
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
uchar KeyScan(void)
{
uchar PreRead; /*first read key value*/
uchar ReRead; /*second read key value*/
uchar RowTemp;
uchar ColTemp;
KeyFlag = 0;
P2 = 0xf0;
RowTemp = P2 & 0xf0; /*read row value*/
if(RowTemp == 0xf0) return(0xff);
P2 = 0x0f;
ColTemp = P2 & 0x0f; /*read column value*/
PreRead = RowTemp|ColTemp; /*get keyboard scan value*/
Delay10ms();
P2 = 0xf0;
RowTemp = P2 & 0xf0; /*reread row value*/
if(RowTemp == 0xf0) return(0xff);
P2 = 0x0f;
ColTemp = P2 & 0x0f; /*reread column value*/
ReRead = RowTemp|ColTemp; /*re-get keyboard scan value*/
if(PreRead==ReRead)
{
KeyFlag = 1;
//P2 = 0xf0;
return(~ReRead);
}
}
void KeyDisplay(uchar KeyValue, uchar Row, uchar Col)
{
switch(KeyValue)
{
case 0x88 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 1);
break;
case 0x84 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 2);
break;
case 0x82 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 3);
break;
// case 0x81 :
// break;
case 0x48 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 4);
break;
case 0x44 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 5);
break;
case 0x42 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 6);
break;
// case 0x41 :
// break;
case 0x28 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 7);
break;
case 0x24 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 8);
break;
case 0x22 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 9);
break;
// case 0x21 :
// break;
// case 0x18 :
// break;
case 0x14 :
DisplayChar(Row, Col, SpecLib, 0);
DisplayChar(Row, Col, NumLib, 0);
break;
// case 0x12 :
// KeySeqFlag = 0;
// break;
// case 0x11 :
// break;
default:
break;
}
return;
}
void KeyDeal(uchar KeyValue)
{
uchar Col = 0;
uchar Row = 0;
uchar Cnt = 0;
if(Col>15)
{
Col = 0;
Row ++;
if(Row>3)
{
Row = 0;
ClrFullScr();
}
}
if((0x18==KeyValue)&&(0 == KeySeqFlag))
{
KeySeqFlag = 1;
for(Cnt = 0; Cnt<7; Cnt++)
{
DisplayWord(Row,Col,PhoneWdLib,Cnt);
Col++;
Col++;
}
}
else if(1==KeySeqFlag)
{
if(0x12==KeyValue)
KeySeqFlag = 0;
else
{
KeyDisplay(KeyValue,Row, Col);
Col++;
delay200ms();
}
}
else
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -