keykk.c

来自「这里有很多我自己做的凌阳单片机源程序」· C语言 代码 · 共 89 行

C
89
字号
#include<spce061a_chf.h>
unsigned int a[4]={0x007f,0x00bf,0x00df,0x00ef};
unsigned int b[4]={0x0007,0x000b,0x000d,0x000e};
unsigned int key_scan(void);
unsigned int get_keyval(void);
//void display(unsigned int);
void Delay(void);

void main()
{
	unsigned int keyval;
	unsigned int keyflag;
	Set_IOA_Dir(0x00f0);//高四位为高电平输出,低四位为带上拉电阻的输入。
	Set_IOA_Attrib(0x00f0);
	Set_IOA_Data(0x00ff);
	
	Set_IOB_Dir(0x00ff);//同相高电平输出
	Set_IOB_Attrib(0x00ff);
	Set_IOB_Data(0x00ff);
	
	while(1)
	{
		
	keyflag=key_scan();
	if(keyflag)
	{
		keyval=get_keyval();
	    *P_IOB_Data=keyval;	    
	}
	}
}
unsigned int get_keyval(void)
{
	unsigned int value,keyval;
	unsigned int i,j;
	for(i=0;i<4;i++)
	{
	  *P_IOA_Data=a[i];
	  value=*P_IOA_Data;
	  value&=0x000f;
	  for(j=0;j<4;j++)
	  {
		if(value==b[j])
		{ keyval=i*4+j;
		  return keyval;
		  break;
		}
		else
		  continue;
	  }
	}
}
unsigned int key_scan()
{
	unsigned int scanval;//按键扫描值
	//unsigned int i;
	scanval=0x00f0;//
	*P_IOA_Data=scanval;
	if(scanval!=(*P_IOA_Data))//若不相等就有按键按下
	{
		Delay();//调用延时函数,延时5ms
	    *P_IOA_Data=scanval;
	    if(scanval!=(*P_IOA_Data))//若不相当说明有按键按下
	    {
	    	return 1;
	    
	    		}
	    		else 
	    		return 0;
	    	
	    }
	    return 0;
	}

//void display(unsigned int j)
//	
void Delay()
{
	unsigned int i,j;
	for(i=0;i<255;i++)
		for(j=0;j<255;j++);
	
}	


	
	
	
	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?