标题:
lpc1768五项按键实验例程
[打印本页]
作者:
惜羽飞
时间:
2017-6-2 09:37
标题:
lpc1768五项按键实验例程
五向按键
lpc1768单片机源程序如下:
/******************************Copyright (c)***********************************
** Nanjing University Jinling College
**
**-----------------------------------------------------------------------------
** Created by: James Ho
** Created date: 2013-07-01
** Version: V1.00
**-----------------------------------------------------------------------------
******************************************************************************/
#include "lpc17xx.h"
#include "lpc1768_timer.h"
#include "bmboard.h"
#include "joystick.h"
void (*oldcb)(void);
/* define the Key scan state machine status */
/* this is a Critical Area var !! */
static KEY_FSM_STATUS status;
/* define current key and previous key */
static KEY_TypeDef Key;
static uint8_t pressedkey;
void Joystick_Config(void){
/*add your code */
LPC_PINCON->PINSEL3=0;
LPC_GPIO1->FIODIR=~(JOY_ENTER|JOY_LEFT|JOY_RIGHT|JOY_UP|JOY_DOWN);
oldcb=pTimer0Callback;
pTimer0Callback=KeyboardScan;
status=KEY_IDLE;
}
KEY_TypeDef GetKey(void)
{
/*add your code */
KEY_TypeDef CurKey;
CurKey.KeyValue=Key.KeyValue;
CurKey.Pressed=Key.Pressed;
CurKey.Released=Key.Released;
if(status==KEY_RELEASE_CONFIRMED){
Key.KeyValue=KEY_VALUE_NOKEY;
Key.Pressed=0;
Key.Released=0;
status=KEY_IDLE;
}
else if(status==KEY_PRESS_CONFIRMED||status==KEY_RELEASED){
Key.Pressed=0;
}
return CurKey;
}
void KeyboardScan()
{
/*add your code */
static uint8_t counter=0;
uint32_t key;
if(counter++<15){
oldcb();
return;
}
else{
counter=0;
key=~(LPC_GPIO1->FIOPIN)&0x3E000000;
if(key&JOY_UP)key=KEY_VALUE_UP;
else if(key&JOY_DOWN)key=KEY_VALUE_DOWN;
else if(key&JOY_LEFT)key=KEY_VALUE_LEFT;
else if(key&JOY_RIGHT)key=KEY_VALUE_RIGHT;
else if(key&JOY_ENTER)key=KEY_VALUE_ENTER;
else key=KEY_VALUE_NOKEY;
}
switch(status){
case KEY_IDLE:
if(key)
status=KEY_PRESSED;
break;
case KEY_PRESSED:
if(key){
status=KEY_PRESS_CONFIRMED;
Key.KeyValue=key;
Key.Pressed=1;
}
else
status=KEY_IDLE;
break;
case KEY_PRESS_CONFIRMED:
if(key)
status;
else
status=KEY_RELEASED;
break;
case KEY_RELEASED:
if(key)
status=KEY_PRESS_CONFIRMED;
else{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(45.33 KB, 下载次数: 42)
下载附件
2017-6-2 16:11 上传
所有资料51hei提供下载:
实验8 五项按键.rar
(617.88 KB, 下载次数: 15)
2017-6-2 09:37 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1