key.c
来自「这里有很多我自己做的凌阳单片机源程序」· C语言 代码 · 共 85 行
C
85 行
//正确的键盘程序,接口如图所示
#include"spce061a_chf.h"
unsigned int keyval=0x0000;
unsigned int temp=0;
unsigned int ksp[4]={0x007f,0x00bf,0x00df,0x00ef};
unsigned int keycode[16]={0x0077,0x007b,0x007d,0x007e,0x00b7,0x00bb,0x00bd,0x00be,0x00d7,
0x00db,0x00dd,0x00de,0x00e7,0x00eb,0x00ed,0x00ee};
unsigned int scan_key();
unsigned int get_key(unsigned int);
void main()
{
Set_IOA_Dir(0xf0);
Set_IOA_Attrib(0xf0);
Set_IOA_Data(0xf0);//初始化IOA低四位为带下拉电阻的输入,高四位为同相高电平输出
Set_IOB_Dir(0xffff);
Set_IOB_Attrib(0xffff);
Set_IOB_Data(0x0000);
asm("int off");
Set_TimeBase(0x0003);
Set_INT_Ctrl(0x0002);
asm("int irq");
while(1)
{
Watchdog_Clear();
if(temp)
{
keyval=get_key(temp);//若有键按下就调用取键值函数
*P_IOB_Data=keyval;
}//若没有键按下就不停地扫描
*P_IOB_Data=keyval;
}
}
unsigned int scan_key(void)
{
unsigned int scanval;//按键扫描值
unsigned int k=0;
unsigned int i;
scanval=0x000f;//
*P_IOA_Data=scanval;
if(scanval!=(*P_IOA_Data))//若不相等就有按键按下
{
*P_IOA_Data=scanval;
if(scanval!=(*P_IOA_Data))//若不相当说明有按键按下
{
for(i=0;i<4;i++)
{
*P_IOA_Data=ksp[i];
k=Get_IOA_Data();
if(k!=ksp[i])//说明这一行有键按下
{
//k=*P_IOA_Data;
while(k==Get_IOA_Data())
{
Watchdog_Clear();
}
return(k);
}
}
}
return(0);
}
return(0);
}
unsigned int get_key(unsigned int i)
{
unsigned int j;
Watchdog_Clear();
for(j=0;j<16;j++)
if(i==keycode[j])
return(j);
return(16);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?