第九节 五向按键

2024-01-16 13:18
文章标签 按键 第九节 五向

本文主要是介绍第九节 五向按键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于第九节 五向按键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612719

相关文章

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

3.门锁_STM32_矩阵按键设备实现

概述 需求来源: 门锁肯定是要输入密码,这个门锁提供了两个输入密码的方式:一个是蓝牙输入,一个是按键输入。对于按键输入,采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入,后续如果项目结束前还有时间就更新为触摸屏按键输入。 矩阵按键开发整体思路: 由于矩阵按键就是GPIO的控制,所以不进行芯片和设备的分层编写,控制写在同一个文件中,最终向应用层提供一个接口。 代码层级关系:

STM32F4按键状态机--单击、双击、长按

STM32F4按键状态机--单击、双击、长按 一、状态机的三要素二、使用状态机原因2.1资源占用方面2.2 执行效率方面:2.3 按键抖动方面: 三、状态机实现3.1 状态机分析3.1 程序实现 百度解析的状态机概念如下 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(

JS触发按键事件

<script type="text/javascript" language=JavaScript charset="UTF-8">document.onkeydown=function(event){var e = event || window.event || arguments.callee.caller.arguments[0];if(e && e.keyCode==27){ // 按

学习记录-Qt按键单击后延迟一段时间触发下一个函数执行

<span style="font-family: Arial, Helvetica, sans-serif;">QTimer::singleShot(1000, this, SLOT(on_pushButton_pcba_readfilename_clicked()));</span>项目中,需要按键单击后发送一条指令,等待一段时间后在发另一条指令,看文档发现使用如上方式可以实现

linux--按键重映射问题

第一:按键重映射可以解决的问题是 ①键盘的某些按键不灵敏,需要把这个坏键重新映射到好的按键上。比如:如果Up按键不灵敏,把Esc按键重新映射成Up按键,这样就可以使用Esc按键代替Up按键。 ②经常使用的按键比较远,需要把常用的较远的按键重映射到距离手指比较近的地方,这样方便使用。 -------------------------------------------------

【网络安全】服务基础第一阶段——第九节:Windows系统管理基础---- Windows_AD域

目录 一、域与活动目录 1.1 工作组 1.2 域 1.2.1 域(Domain) 1.2.2 域控制器(Domain Controller,DC) 1.2.3 功能和角色 1.2.4 管理和监控 1.2 5 域结构 1.3 组织单元(Organizational Unit,OU) 1.4 物理结构 1.4.1 站点(Sites) 1.4.2 域控制器(Domain C

gt9xx系列------实现实体按键的unpin解锁

由于gt的虚拟按键的上报不是上报坐标而是类似电源按键的实体按键所以需要修改之前的unpin步骤 if ((( rawEvent->code==139)&&(rawEvent->value==1))||((rawEvent->code==158)&&(rawEvent->value==1)))  //有按键按下 { if( unpinkey[0]==0)     //第一次数组0肯定为空

嵌入式开发与应用按键外部中断实验二

一、实验目的 1. 通过实验掌握中断式键盘控制与设计方法; 2. 熟悉编写中断服务程序; 3. 掌握中断系统相关知识,掌握外部中断应用方法和处理过程; 4. 掌握实验处理器中断处理的软件编程方法; 5. 从按键程序的设计对系统的编程进行深入了解,与单片机裸机编程进行区分; 6. 掌握基于固件库编程控制GPIO端口的输出,进而控制LED灯的显示状态。 二、实验内容   根据实验要

Linux C程序输入backspace按键显示^H

Linux系统下用C语言写一个程序,需要用户输入指令,根据指令来选择不同的功能运行,当输入错误想要使用backspace按键删除时却出现**^H**字符,导致无法正常匹配输入指令,如下图: 可以通过一个简单的语句解决这个问题。 system("stty erase ^H"); 在程序运行初始化部分使用上面的语句,仅需使用一次,之后的程序运行都不会出现**^H**的现象了。