第九节 五向按键

第九节  五向按键
    五向按键,也就是我们平常所见的摇杆内部构造,五向按键有上下左右和中间五个按键值,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
请勿用于商业

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值