第九节 五向按键
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上。
按键的检测通过电压来区分。
使用五向按键效果如下所示:
本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业
五向按键,也就是我们平常所见的摇杆内部构造,五向按键有上下左右和中间五个按键值,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
请勿用于商业
相关文章推荐
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- iOS之App循环执行ViewDidLoad
- AJAX(XMLHttpRequest)进行跨域请求方法详解(二)
- [ActionScript 3.0] Away3D 非skybox的全景例子
- vim: 远程登陆服务器时可能出现的: 方向键,回退符不能正常使用
- 公主选驸马问题的思维分析过程
- 数据库 'XXXX' 已打开,并且一次只能有一个用户访问。设置单用户 / 多用户
- 滥用设计模式不如不用
- MAX232芯片使用方法
- 【剑指offer】之把数组排成最小的数
- Java AOP的实现机制
- CSS3选择器 (全)
- Uncaught TypeError: Cannot read property 'msie' of undefined
- AJAX(XMLHttpRequest)进行跨域请求方法详解(一)
- Linux 时钟 - 操作系统时钟和硬件时钟
- 应用之星——移动开发者的免费午餐
- 欢迎使用CSDN-markdown编辑器
- [freemarker篇]05.关于集合的遍历
- 防篡改php文件校验程序
- sql: update from