您的位置:首页 > 其它

第九节 五向按键

2015-11-27 11:04 323 查看
第九节 五向按键

五向按键,也就是我们平常所见的摇杆内部构造,五向按键有上下左右和中间五个按键值,MT254xboard上的五向按键检测电路由馒头科技自主设计,而不是Ti的设计,采用一个外部中断和一个AD检测口来完成按键的检测。



由原理图可知当我们按下不同的键值时在JOY_CHK将会产生一个上升沿,并且在JOY_AD口有不同的电压。我们只需要在JOY_CHK的外部中断中读取JOY_AD的电压即可识别不同的按键。

外部中断和AD采用在前面已经讲过了,这里只需要拿来用就可以了。JOY_CHK连接在P0.7脚,JOY_AD连接在P0.6脚。我们将按键值显示在LCD上。

<span style="font-size:18px;">int main(void)
{
uint8 KeyValue = 0;

SysStartXOSC();
LCD12864_Init();
LCD12864_DisStr(1, "    JoyStick Test");

P0INP |= 0X40;  // P0.6 三态
P0SEL &= ~0X80; // 设置为IO功能
P0DIR &= ~0X80; // 设置为输入功能
P0IEN |= 0X80;  // P0.7 设置为中断方式
PICTL &= ~0X80;  // 上升沿触发
IEN1 |= 0X20;   // 允许P0口中断
P0IFG = 0x00;   // 清除中断标志位
EA = 1;         // 开总中断

while(1)
{
if(KeyStat)  // 按键按下
{
KeyValue = GetKeyValue();
switch ( KeyValue )
{
case KEY_UP :
sprintf(LCDBuf, "\tUP");
break;

case KEY_DOWN :
sprintf(LCDBuf, "\tDown");
break;

case KEY_LEFT :
sprintf(LCDBuf, "\tLeft");
break;

case KEY_CENTER :
sprintf(LCDBuf, "\tCenter");
break;

case KEY_RIGHT :
sprintf(LCDBuf, "\tRight");
break;

default:
break;
}
KeyStat =0;
LCD12864_DisStr(3, LCDBuf);
}
}
return 0;
}</span>


按键的检测通过电压来区分。

<span style="font-size:18px;">uint8 GetKeyValue(void)
{
uint16 adc;
uint8 ksave0 = 0;

adc = ADC_Read (JOY_AD_CHANNEL);

if ((adc >= 800) && (adc <= 1100))
{
ksave0 = KEY_RIGHT;
}
else if ((adc >= 1200) && (adc <= 2000))
{
ksave0 = KEY_CENTER;
}
else if ((adc >= 2050) && (adc <= 2150))
{
ksave0 = KEY_UP;
}
else if ((adc >= 2200) && (adc <= 2230))
{
ksave0 = KEY_LEFT;
}
else if ((adc >= 2240) && (adc <= 2500))
{
ksave0 = KEY_DOWN;
}
return ksave0;
}</span>


使用五向按键效果如下所示:



本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: