找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3574|回复: 0
打印 上一主题 下一主题
收起左侧

lpc1768五项按键实验例程

[复制链接]
跳转到指定楼层
楼主
五向按键
lpc1768单片机源程序如下:
  1. /******************************Copyright (c)***********************************
  2. **    Nanjing University Jinling College
  3. **
  4. **-----------------------------------------------------------------------------
  5. ** Created by:          James Ho
  6. ** Created date:        2013-07-01
  7. ** Version:             V1.00
  8. **-----------------------------------------------------------------------------
  9. ******************************************************************************/


  10. #include "lpc17xx.h"
  11. #include "lpc1768_timer.h"
  12. #include "bmboard.h"
  13. #include "joystick.h"

  14. void (*oldcb)(void);

  15. /* define the Key scan state machine status */
  16. /* this is a Critical Area var !! */
  17. static KEY_FSM_STATUS status;

  18. /* define current key and previous key */
  19. static KEY_TypeDef Key;
  20. static uint8_t pressedkey;

  21. void Joystick_Config(void){
  22.         /*add your code */
  23.         LPC_PINCON->PINSEL3=0;
  24.         LPC_GPIO1->FIODIR=~(JOY_ENTER|JOY_LEFT|JOY_RIGHT|JOY_UP|JOY_DOWN);
  25.         oldcb=pTimer0Callback;
  26.         pTimer0Callback=KeyboardScan;
  27.         status=KEY_IDLE;
  28. }



  29. KEY_TypeDef GetKey(void)
  30. {
  31.         /*add your code */
  32.         KEY_TypeDef CurKey;
  33.         CurKey.KeyValue=Key.KeyValue;
  34.         CurKey.Pressed=Key.Pressed;
  35.         CurKey.Released=Key.Released;
  36.        
  37.         if(status==KEY_RELEASE_CONFIRMED){
  38.                 Key.KeyValue=KEY_VALUE_NOKEY;
  39.                 Key.Pressed=0;
  40.                 Key.Released=0;
  41.                 status=KEY_IDLE;
  42.         }
  43.         else if(status==KEY_PRESS_CONFIRMED||status==KEY_RELEASED){
  44.                 Key.Pressed=0;
  45.         }
  46.         return CurKey;
  47. }

  48. void KeyboardScan()
  49. {
  50.         /*add your code */
  51.         static uint8_t counter=0;
  52.         uint32_t key;
  53.        
  54.         if(counter++<15){
  55.                 oldcb();
  56.                 return;
  57.         }
  58.         else{
  59.                 counter=0;
  60.                 key=~(LPC_GPIO1->FIOPIN)&0x3E000000;
  61.                
  62.                 if(key&JOY_UP)key=KEY_VALUE_UP;
  63.                 else if(key&JOY_DOWN)key=KEY_VALUE_DOWN;
  64.                 else if(key&JOY_LEFT)key=KEY_VALUE_LEFT;
  65.                 else if(key&JOY_RIGHT)key=KEY_VALUE_RIGHT;
  66.                 else if(key&JOY_ENTER)key=KEY_VALUE_ENTER;
  67.                 else key=KEY_VALUE_NOKEY;
  68.         }
  69.         switch(status){
  70.                 case KEY_IDLE:
  71.                         if(key)
  72.                                 status=KEY_PRESSED;
  73.                         break;
  74.                 case KEY_PRESSED:
  75.                         if(key){
  76.                                 status=KEY_PRESS_CONFIRMED;
  77.                                 Key.KeyValue=key;
  78.                                 Key.Pressed=1;
  79.                         }
  80.                         else
  81.                                 status=KEY_IDLE;
  82.                         break;
  83.                 case KEY_PRESS_CONFIRMED:
  84.                         if(key)
  85.                                 status;
  86.                         else
  87.                                 status=KEY_RELEASED;
  88.                         break;
  89.                 case KEY_RELEASED:
  90.                         if(key)
  91.                                 status=KEY_PRESS_CONFIRMED;
  92.                         else{
  93. ……………………

  94. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
实验8 五项按键.rar (617.88 KB, 下载次数: 15)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表