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

📄 scankeyboard.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         : ScanKeyBoard.C                               *
**                                                              *
**  By : Cyb 2007.01.11                                         *
****************************************************************/

#include "includes.h"
#include "hardware.h"
#include "timetask.h"
#include "errcode.h"
#include "errtask.h"
#include "ScanKeyBoard.h"



static BOOLEAN IsSingleY_Zero(INT32U portv,INT8U y)
{
       INT32U porty;
       
       switch(y)
       {
          case 0:
          porty = PORT_Y0;
          break;
          case 1:
          porty = PORT_Y1;
          break;
          case 2:
          porty = PORT_Y2;
          break;
          case 3:
          porty = PORT_Y3;
          break;
          default:
          break;
       }
       
       if(portv & porty)  
       {
           return FALSE;
       }
       else
       {
           return TRUE;
       }
}

static void Control_PortX(INT8U x)
{
    Init_PIN_AllX();
    
    switch(x)
    {
      case 0:
      *AT91C_PIO_SODR = PIN_X0|PIN_X1|PIN_X2;
      *AT91C_PIO_CODR = PIN_X3;
      break;
      case 1:
      *AT91C_PIO_SODR = PIN_X0|PIN_X1|PIN_X3;
      *AT91C_PIO_CODR = PIN_X2;
      break;
      case 2:
      *AT91C_PIO_SODR = PIN_X0|PIN_X2|PIN_X3;
      *AT91C_PIO_CODR = PIN_X1;
      break;
      case 3:
      *AT91C_PIO_SODR = PIN_X1|PIN_X2|PIN_X3;
      *AT91C_PIO_CODR = PIN_X0;
      break;
      default:
      break;  
    }
}

INT32U ScanKeyBoard(void)
{
      INT8U    i,j;
      INT8U    rececnt;
      INT32U   receporty;
      INT32U   keyvalue;
      
      rececnt = 0;
      
      for(i=0;i<4;i++)
      {
          Control_PortX(i);
          
          receporty = ReadPort_AllY();
          
          for( j=0;j<4;j++)
          {
              if(IsSingleY_Zero(receporty,j))
              {
                  rececnt++;
                  keyvalue = (3-i)*4 + (3-j); 
              } 
          }
      } 
      
      if( rececnt != 0)
      {
          if ( rececnt !=1)
          {
              return 0xEE;
          }
          else
          {
              return  keyvalue;
          }
      }
      else
      {
          return 0xFF;
      }
  
}

⌨️ 快捷键说明

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