本文主要是介绍第九节 五向按键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第九节 五向按键五向按键,也就是我们平常所见的摇杆内部构造,五向按键有上下左右和中间五个按键值,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
请勿用于商业
这篇关于第九节 五向按键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!