/***********************************************
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;
}
上一篇:s3c2440串口编程
下一篇:s3c2440 LCD(sony x35)
推荐阅读最新更新时间:2024-11-13 10:44
设计资源 培训 开发板 精华推荐
- DC1298A-AA,LTM9002-AA 演示板,14 位,125Msps,DC-170MHz LPF,26dB 增益 DAC
- STM32F446ZE MCU的评估板
- 基于ST8034P的智能卡接口评估板
- MIC5167 1MHz、6A、集成开关、高效、同步降压DDR存储器终端器的典型应用
- 使用 PTN5100 的带有 Type-C 插座应用的 USB PD 消费者
- LT3791EFE-1 120W (24V/5A) 降压-升压型 LED 驱动器的典型应用电路
- AD584 引脚可编程精密电压基准的典型应用,用于输出微调
- 使用 Analog Integrations Corporation 的 AIC184 的参考设计
- AD8348-EVAL,用于 AD8348、50 MHz 至 1000 MHz 正交解调器的评估板
- RGB耳环 V1.0