⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyscan.c

📁 基于凌阳61板的五层电梯模型C语言程序
💻 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 + -