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

📄 keyboard.c

📁 可以对北京汽车所产生的故障进行诊断的电脑解码器
💻 C
字号:
/******************************************************************************************
 *  目的:键盘 IO
 *  功能:基本键盘 IO 读入
 *  模块依赖:硬件 键盘控制 IC 资料
 ******************************************************************************************/
#include "compiler.h"
#include "Keyboard.h"
//////////////////////////////////////////////////////////////////////////
//          Deifine Of KeyPort
//////////////////////////////////////////////////////////////////////////
#define KEY1  P4_bit.P4_0     // KEY1. P4.1
#define KEY2  P4_bit.P4_1     // KEY2. P4.2
//////////////////////////////////////////////////////////////////////////
//          Extern Port P4
//////////////////////////////////////////////////////////////////////////
__sfr __no_init volatile union
{
     unsigned char P4 ;  // Extern Port Of KeyBoard Scaner
     struct    // P4 Struct
     {
          unsigned char P4_0 : 1;
          unsigned char P4_1 : 1;
          unsigned char P4_2 : 1;
          unsigned char p4_3 : 1;
          unsigned char  : 1;
          unsigned char  : 1;
          unsigned char  : 1;
          unsigned char  : 1;
     }    P4_bit;
} @ 0xE8;
////////////////////////////////////////////////////////////////////////////
volatile unsigned char KeyBuf;
unsigned char KeyOuput;
////////////////////////////////////////////////////////////////////////////
/*
**-------------------------------------------------------------------------------------
** 内部按键扫描函
**-------------------------------------------------------------------------------------
*/
void ScanKey(void)
{
     KEY1 = 1;
     KEY2 = 1;
     if( !KEY1 )
     {
          if ( !KEY2 )     KeyBuf = 3;
          else KeyBuf = 2;
     }
     else //K1 = H
     {
          if ( !KEY2 )
          {
               KeyBuf = 1;
          }
          else //K2 = H
          {
               KEY1 = 0;
               if ( !KEY2 )   //K2 = L
               {
                    KEY1 = 1;
                    KEY2 = 0;
                    if (!KEY1)     KeyBuf = 4;
                    else KeyBuf = 6;
               }
               else
               {
                    KEY1 = 1;
                    KEY2 = 0;
                    if (!KEY1)
                    {
                         KeyBuf = 5;
                    }
                    else KeyBuf = 0;
               }
          }
     }
     KEY1 = 1;
     KEY2 = 1;
     if( ( KeyOuput != KeyBuf ) && KeyBuf )
     {
          KeyOuput = KeyBuf;
          KeyBuf = KEY_NULL;
     }
}
/*
**-------------------------------------------------------------------------------------
** 外部按键扫描函
** KeyMode - 0: 死等按键 非0: 快速扫描
**-------------------------------------------------------------------------------------
*/
unsigned char GetAKey( char KeyMode )
{
     volatile UINT i;
     UCHAR TempKey;
     TempKey = KEY_NULL;
     if( !KeyMode )
     {
          KeyBuf = KEY_NULL;
          while( ( KEY_NULL == KeyBuf ) ) //Wait For Press Down
          {
          }
          TempKey = KeyOuput;//NULL
          for( i=0; i<10000; i++ );  //Time Of Effactive Press Down
          if( KeyOuput == TempKey )     //Relaese
          {
               TempKey = KeyOuput;
          }
          else
          {
               TempKey = KEY_NULL;
          }
          KeyOuput = KEY_NULL;
          KeyBuf = KEY_NULL;
     }
     else
     {
          if( KeyOuput != KEY_NULL )
          {
               TempKey = KeyOuput; //Press Down
               for( i=0; i<10000; i++ );  //Time Of Effactive Press Down
               if( KeyOuput == TempKey )     //Relaese
               {
                    TempKey = KeyOuput;
               }
               else
               {
                    TempKey = KEY_NULL;
               }
               KeyOuput = KEY_NULL;
               KeyBuf = KEY_NULL;
          }
     }
     return ( TempKey );
}
//----------------------------------------------------------------- End Of File -------

⌨️ 快捷键说明

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