📄 keyscan.c
字号:
#include <spce061a.h>
extern void delay(int);
extern int key_code[16];
extern int flag;
void keyscan(void)
{
int key_P_IOA_Data,keyvalue1;
int key_i;
*P_IOA_Dir|=0xf000; //初始化A8-A11为低电平输入,A12-A15为同相输出
*P_IOA_Dir&=0xf0ff;
*P_IOA_Attrib|=0xf000;
*P_IOA_Attrib&=0xf0ff;
*P_IOA_Data&=0x00ff;
key_P_IOA_Data=0x1000;
for(key_i=0;key_i<4;key_i++)
{
*P_IOA_Data|=key_P_IOA_Data;
if(*P_IOA_Data&0x0f00) //是否有按键按下
{
delay(1); //延时 软件滤波
if(*P_IOA_Data&0x0f00) //还是否有按键按下
{
keyvalue1=*P_IOA_Data&0x0f00;
if(keyvalue1&0x0800)
key_code[4*key_i+0]=1;
if(keyvalue1&0x0400)
key_code[4*key_i+1]=1;
if(keyvalue1&0x0200)
key_code[4*key_i+2]=1;
if(keyvalue1&0x0100)
key_code[4*key_i+3]=1;
}
}
*P_IOA_Data&=0x00ff;
key_P_IOA_Data<<=1;
}
*P_Watchdog_Clear=0x0001;
}
void dis_key()
{
*P_IOA_Dir|=0x00ff;
*P_IOB_Attrib|=0x00ff;
*P_IOB_Data|=0x0000;
if(key_code[1]) //A1-A5
*P_IOB_Data|=0x0002;
else *P_IOB_Data&=0xfffd;
if(key_code[2])
*P_IOB_Data|=0x0004;
else *P_IOB_Data&=0xfffb;
if(key_code[3])
*P_IOB_Data|=0x0008;
else *P_IOB_Data&=0xfff7;
if(key_code[4])
*P_IOB_Data|=0x0010;
else *P_IOB_Data&=0xffef;
if(key_code[5])
*P_IOB_Data|=0x0020;
else *P_IOB_Data&=0xffdf;
if(flag==0)
*P_IOB_Data|=0x0040;
else *P_IOB_Data&=0xffbf;
if(flag==1)
*P_IOB_Data|=0x0080;
else *P_IOB_Data&=0xff7f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -