s3c2440按键扫描

按键搜以及。

/***********************************************
Function  name  :   key_scan_init
Description     :   按键扫描初始化
Input parameter :   none
Return          :   none	 	
Others		    :                     	                    
*************************************************/
void key_scan_init()
{
	unsigned temp;
	//配置GPG0,3,5,6,7,11为输出模式
	rGPGCON &= ~((0x3<<22)|(0x3<<14)|(0x3<<12)|(0x3<<10)|(0x3<<6)|(0x3<<0));
	temp = (0x1<<22)|(0x1<<14)|(0x1<<12)|(0x1<<10)|(0x1<<6)|(0x1<<0);
	rGPGCON |= temp;
	
	//配置GPG0,3,5,6,7,11不使能上拉电阻
	temp = (0x1<<11)|(0x1<<7)|(0x1<<6)|(0x1<<5)|(0x1<<3)|(0x1<<0);
	rGPGUP |= temp;
}

/***********************************************
Function  name  :   key_scan
Description     :   按键扫描
Input parameter :   none
Return          :   key:按键值	 	
Others		    :                     	                    
*************************************************/
unsigned int key_scan(void)
{
    volatile unsigned temp;
    unsigned int key = NOKEY;
    temp = ~rGPGDAT;
    temp &= (1<<11)|(1<<7)|(1<<6)|(1<<5)|(1<<3)|1;
    switch(temp)
    {
    	case 1:
    	{
    		key = KEY1;
    		break;
    	
    	
    	}
    	case 1<<3:
    	{
    		key = KEY2;
    		break;
    	}
    	case 1<<5:
    	{
    		key = KEY3;
    		break;
    	}
    	case 1<<6:
    	{
    		key = KEY4;
    		break;
    	}
    	case 1<<7:
    	{
    		key = KEY5;
    		break;
    	}
    	case 1<<11:
    	{
    		key = KEY6;
    		break;
    	}
 		default: 
 		{
 			key = NOKEY;
 			break;
 		}
    }
    
	return key;
}


/***********************************************
Function  name  :   get_keyvalue
Description     :   获取键值
Input parameter :   none
Return          :   key:按键值	 	
Others		    :                     	                    
*************************************************/
unsigned int get_keyvalue(void)
{
      int key = NOKEY;
      if((key=key_scan()) != NOKEY)  //电平有拉低
      {
      	   Delay_MS(10);  //去抖动处理
	       if((key=key_scan()) != NOKEY)  //确实是按键按下
	       {
	           while(key_scan()!=NOKEY);  //去重复的处理
	           return key;
	       }            
      }
      return NOKEY; 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值