📄 key.c
字号:
#include <mega8.h>
//void init_kb(void);
//void decode(unsigned char);
U16 MyGetScanKey()
{
U16 key;
U32 i,temp;
for(i=1;i<0x10;i<<=1){
?????rPDATE|=0xf0;//初始化端口
?????rPDATE&=~(i<<4);//向列所在端口分别发送1110,1101,1011,0111
key<<=4;//右移四位
Delay(10);//延时,等待响应
temp=rPDATC;//读各行状态值
key|=(temp&0xf);//将四次所得结果保存起来
}
return key;
}
U32 MyGetKey()
{
int i;
U16 key,tempkey=1;
static U16 oldkey=0xffff;
static U8 keystatus=0;
U8 keycnt=0;
while(1){
key=0xffff;
while(1){
key=MyGetScanKey();
if(key!=0xffff) //有键按下
break;
Uart_Printf("key 111 \n");
OSTimeDly(20);
Uart_Printf("key 112 \n");
oldkey=0xffff;
}
Uart_Printf("key 113 \n");
OSTimeDly(50);
Uart_Printf("key 114 \n");
if(key!=MyGetScanKey())//如果两次的键制不同,重新扫描
continue;
if(oldkey!=key){
keystatus=0;
}
if(keystatus==0){ //第一次按下此键
keycnt=0;
keystatus=1;
}
else if(keystatus==1){ //第二次重复此键
keycnt++;
if(keycnt==20)
keystatus=2;
else
continue;
}
oldkey=key;
break;
}
for(i=0;i<16;i++){ //查找按键,不包括功能键
if((key&tempkey)==0)
break;
tempkey<<=1;
}
return MykeyBoard_KeyMap[i];
}
void onKey(int nkey, int fnkey)
{
char temp[3];
if(nkey>9){ //按键码> 9
temp[0]=0x31;// 十位
temp[1]=(nkey-10)|0x30;//个位
temp[2]=0;
}
else //按键码< 9
{
temp[0]=nkey+0x30;
temp[1]=0}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -