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

📄 key.c

📁 在KEILC下进行编译的程序,单片机可以进行AD,DA数据采集
💻 C
字号:
#include "fx2.h"
#include "fx2regs.h"
#include "io.h"
#include "key.h"

/*********************宏定义***************************/
#define OKey_Macro_MaxKeyNum            9     /*最大键码数*/   
#define OKey_Macro_ClearTrembleLength   100   /*消颤队列长度*/ 
#define OKey_Macro_NoKey                0xFF 

BYTE   OKey_RD_OldKey      ;
BYTE   OKey_RD_CountKey    ;
WORD   OKey_RD_Counter     ;
BYTE   OKey_Value;

struct OKey_RD_KeyTable_Struct
{
	BYTE  ScanCode;
	BYTE  KeyEventID;
};
code struct OKey_RD_KeyTable_Struct  OKey_RD_KeyTable [OKey_Macro_MaxKeyNum+1] = /*键码表 OKey_Macro_MaxKeyNum + 1 */
{	
	{Macro_ScanS1, 1},        {Macro_ScanS2,  2},
	{Macro_ScanS3, 3},        {Macro_ScanS4,  4},
	{Macro_ScanS5, 5},        {Macro_ScanS6,  6},
	{Macro_ScanS7, 7},        {Macro_ScanS8,  8},
	{Macro_ScanUnhand,0x7F},  {Macro_ScanNoKey,  0xFF}
};

BYTE OKey_MD_TransKey (BYTE  in_key)
{
	BYTE   i      ;
	
    i = 0; 
    while ((in_key != OKey_RD_KeyTable[i].ScanCode) && (i < OKey_Macro_MaxKeyNum)) 
		i ++ ;
	return (OKey_RD_KeyTable[i].KeyEventID) ;     
}

/*********************** 公有函数 **********************/
/*************************************************/
/*    Name:       OKey_RP_Scan                   */
/*    Descrip:    键盘扫描                       */
/*    Input:      无                             */
/*    Output:     无                             */
/*************************************************/
BYTE OKey_RP_Scan() 
{
	BYTE temp_code  ,temp_scan;
    
	temp_code = *KEY;  /* 读键盘 */
	if (temp_code == Macro_ScanUnhand)  /*没有键按下*/
    {
		if (OKey_RD_OldKey == Macro_ScanUnhand)  /* 上次也没按下 */
		{
           	return (OKey_Macro_NoKey);  /*无键*/
		}
	}
    else   /* 本次有键按下 */
    {
		if (OKey_RD_OldKey != Macro_ScanUnhand)  /* 上次没按下 */
		{
           	return (OKey_Macro_NoKey);  /*无键*/
		}
	}
    if (temp_code == OKey_RD_CountKey)  
    {
		OKey_RD_Counter ++ ;
      	if (OKey_RD_Counter >= OKey_Macro_ClearTrembleLength)  
		{
			OKey_RD_Counter = 0 ;
			temp_scan = OKey_MD_TransKey(temp_code);
           	if (temp_scan != Macro_ScanNoKey)  
			{
				if (OKey_RD_CountKey == OKey_RD_OldKey)          
					return (OKey_Macro_NoKey);
				else  
				{
					OKey_RD_OldKey = OKey_RD_CountKey;
           			return (temp_scan) ;
				}
			}
        	else
				return (OKey_Macro_NoKey);
		}
      	else
			return (OKey_Macro_NoKey);
	}
   	else 
    {
		OKey_RD_Counter = 0;
	  	OKey_RD_CountKey = temp_code;
      	return (OKey_Macro_NoKey);
	}
}

/*************************************************/
/*    Name:       OKey_RP_Init                   */
/*    Descrip:    初始化                         */
/*    Input:      无                             */
/*    Output:     无                             */
/*************************************************/
void OKey_RP_Init()  
{
    OKey_RD_OldKey = OKey_Macro_NoKey;
    OKey_RD_CountKey = OKey_Macro_NoKey; 
    OKey_RD_Counter = 0;
	OKey_Value = 0xFF;
}

⌨️ 快捷键说明

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