mini2440之GPIO控制按键的方法

来源:互联网 发布:saas企业级软件服务 编辑:程序博客网 时间:2024/05/22 01:52

     在mini2440里控制按键方法有使用终端和只用GPIO口控制,初学者在接触时不免有些陌生,下面将简单介绍如何利用GPIO口控制按键。

首先建立一个(.c)的源文件和(.h)的头文件。简单介绍按键模块的开发过程:

1、找到该设备-à2、在原理图上找该设备-à 3、分析该设备的特点

K1—没按下,EINT8信号为高;按下,EINT8信号为低

K2—没按下,EINT11信号为高;按下,EINT11信号为低

2、找出该信号接到CPU的哪里。---在原理图上,名字相同的信号代表连通。

K1---EINT8----》GPG0

K2---EINT11----》GPG3

3、找出该引脚的控制寄存器

K2 K1---GPGCON [7:6,1:0]à00 00  输入功能

读GPGDAT 对应的位是0—》按键按下;对应的位是1—》按键没按下

GPGUP 不使能

4、封装函数。

这个功能是利用按键控制led灯的亮灭,key1~key4控制led1~led4,key5控制灯全亮,key6控制灯全灭:

/*************************************************       Copyright (C),    2016-2020, xmetc Co., Ltd.       File name    :    key      Author       :lifngguo            Version      :V1.0                    Date         :  2016-8-5            Description  :  keys control leds on/off              Others       :    none            History   :                                  1. Date   :    2016-8-4          Author   : lifngguo*************************************************/#include "2440addr.h"#include "key.h"extern void Delay_MS( unsigned int time);//延迟void key_init(void){volatile unsigned int temp;temp = rGPGCON;//配置按键GPGCONtemp &= ~((3<<22) | (3<<14) | (3<<12) | (3<<10) | (3<<6) | (3<<0));//清零  00为输入rGPGCON = temp;//回写temp = rGPGUP;//上拉电阻禁止temp |= ((1<<11) | (1<<7) | (1<<6) | (1<<5) | (1<<3) | (1<<0));//1rGPGUP = temp;}int key_scan(void)//扫描按键{int key = NO_KEY_PRESS;    unsigned int temp;temp = ~rGPGDAT;   //按键按下--0,取反--未按下为0temp = temp & ((1<<11) | (1<<7) | (1<<6) | (1<<5) | (1<<3) | (1<<0));//temp的值按键位都是1switch(temp){case 1:{key = KEY1;break;}case 1<<3:{key = KEY2;break;}case 1<<5:{key = KEY3;break;}case 1<<6:{key = KEY4;break;}case 1<<7:{key = KEY5;break;}case 1<<11:{key = KEY6;break;}default:{key = NO_KEY_PRESS;break;}}return key;}int return_key_num(void)//功能:去抖  去重复{int key = NO_KEY_PRESS;if((key = key_scan()) != NO_KEY_PRESS)//电平拉低{Delay_MS(1);//去抖if((key = key_scan()) != NO_KEY_PRESS)//有按键按下{while(key_scan() != NO_KEY_PRESS);//按键没有弹起  去重复return key;//返回按键值}}}
在使用按键的时候要注意去抖动和去重复。

在头文件中声明一些定义和一些使用到的函数:

/*************************************************       Copyright (C),    2016-2020, xmetc Co., Ltd.       File name    :    key      Author       :lifngguo            Version      :V1.0                    Date         :  2016-8-5            Description  :  define key number and declare functions              Others       :    none            History   :                                  1. Date   :    2016-8-5          Author   : lifngguo*************************************************/#ifndef _KEY_H_#define _KEY_H_extern void key_init(void);extern int key_scan(void);extern int return_key_num(void);#define NO_KEY_PRESS 0#define KEY_PRESS 1#define KEY1 1#define KEY2 2#define KEY3 3#define KEY4 4#define KEY5 5#define KEY6 6#endif
/*******************************结束**************/
#ifndef _KEY_H_#define _KEY_H_
<pre name="code" class="cpp">#endif
这三句代码是防止头文件被重复定义,宏展开的时候只要展开一次就可以了

这个就是简单的GPIO口空按键的使用方法。



0 0