⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.c

📁 lpc2478+ucosII
💻 C
字号:
/*****************************************************************************
 *   uart.c:  UART API file for NXP LPC24xx Family Microprocessors
 *
 *   Copyright(C) 2006, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2006.07.12  ver 1.00    Prelimnary version, first Release
 *
******************************************************************************/
#include "LPC2468.h"                        /* LPC24xx definitions */
#include "type.h"
#include "target.h"
#include "irq.h"
#include "fio.h"
#include "keyboard.h"
#include "timer.h"

/*********************************************************************************************************
** 函数名称 :Key_Init()
** 函数功能 :按键初始化。(P3.28~P3.31: output; P0.19~P0.22: input)
** 入口参数 :无
** 出口参数 :按键的值。
*********************************************************************************************************/
unsigned char Key_Init(void)
{
  unsigned long regval;

  GPIOInit(0,FAST_PORT,DIR_IN);     //端口初始化及方向设定
  GPIOInit(3,FAST_PORT,DIR_OUT);

}

/*********************************************************************************************************
** 函数名称 :KeyScan()
** 函数功能 :按键扫描子程序。
** 入口参数 :无
** 出口参数 :按键的值。
*********************************************************************************************************/
unsigned char KeyScan(void)
{
   unsigned long temp1,temp2,temp3;
   unsigned char i,keycount;

   keycount = 0;

   FIO3CLR = 0xf0000000;                  // 行线输出低电平

   temp1 = FIO0PIN;
   temp1 &= 0x00780000;	                  // P0.19~P0.22的值
   if (temp1 == 0x00780000)	          // 如果没有键被按下
   	   return(keycount);              // 返回0

   temp1 = ~(temp1>>19) & 0x0000000f;     // 列值
   switch(temp1)
   {
   case 1:
     keycount = 1;break;
   case 2:
     keycount = 2;break;
   case 4:
     keycount = 3;break;
   case 8:
     keycount = 4;break;
   default:
     keycount = 0;
   }

   temp2 = 0x10000000;
   for(i=0;i<4;i++)			  // 行扫描
   {
      FIO3SET = temp2;			  // P3.28~P3.31逐个拉高
      temp3 = FIO0PIN;
      temp3 &= 0x00780000;
      if(temp3 == 0x00780000)             // 判断本行是否有键按下
          break;
      temp2 = temp2<<1;
      keycount += 4;
   }

   return(keycount);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -