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

📄 key.c

📁 源码
💻 C
字号:
#include "Key.h"
#include "CommonDefine.h"
#include "LCD.h"


extern const u8 STR_SHUTDOWN[];

/**************************************************************************************************
** 函数名: GS_Bee
** 输 入: void
** 输 出: void
** 功能描述:  驱动 轰鸣器 发音
** 说  明:	void
** 作 者:  SIMPLE
** 日 期:  2005/04/15
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
void GS_Bee(u8 Dat)
{
	u16 i;

	while(Dat--)
	{
		i=2500;
		while(i--);
	}
}

/**************************************************************************************************
** 函数名: Key_Init
** 输 入: 
** 输 出: 
** 功能描述: 
** 说  明: 
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
void Key_Init(void)
{
	GPIO_Config(GPIO0, 0xBC00, GPIO_IN_TRI_CMOS);
}

/**************************************************************************************************
** 函数名: Key_GetAll
** 输 入: 
** 输 出: 
** 功能描述: 
** 说  明:  Key端口常态时为1,按下时响应口线输入0。
            按下 KEY_CANCEL/KEY_ENTER/KEY_UP/KEY_DOWN/KEY_POWER 返回 0x0400/0x0800/0x1000/0x2000/0x8000。
            无任何按键按下则返回0x0000。
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
int Key_GetAll(void)
{
	return GPIO_WordRead(GPIO0) & 0xBC00 ^ 0xBC00;
}

/**************************************************************************************************
** 函数名: Key_WaitKey
** 输 入: 
** 输 出: 
** 功能描述: 防抖动按键
** 说  明:
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
int Key_WaitKey(void)
{	
	int i;	
        u32 TimeOut= 0x12BFED4;       //40s 自动关机
	while(1)
	{
                while(Key_GetAll()==0x0000)   //等按下
                {
                        if(--TimeOut==0)
                        {
                                GS_ClearLCD();
                                GS_PutString(0, 2, (u8 *)STR_SHUTDOWN, TEXT_ALIGN_CENTER, NEGATE_COLOR_NONE);
                                Delay(9600*800); 
                                GPIO_Config(GPIO1, 0x0020, GPIO_OUT_PP);     //配置开机保持端口P1.5
                                GPIO_BitWrite(GPIO1,0x05,0x01);      //关机,关闭开机保持信号P1.5.
                                return 0x0000;
                        }
                          
                       
                }
		i = Key_GetAll();
	
                Delay(96000*2);        //30ms
		if(i == Key_GetAll())
		{
                        while(Key_GetAll()!=0x0000);      //等松开
                        Delay(96000*2);         //20ms
			return	i;
		}
	}
}

/**************************************************************************************************
** 函数名: Key_State
** 输 入: 
** 输 出: 
** 功能描述:  index is 0~4, return Key_State "0" or "1", "1"表示按下。
              index0~4分别对应 KEY_CANCEL/KEY_ENTER/KEY_UP/KEY_DOWN/KEY_POWER。
** 说  明:  
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
int Key_State(int index)
{
	switch(index)
	{
	case 0:
		return GPIO_BitRead(GPIO0,0x0A) & 1 ^ 1;    //KEY_CANCEL, p0.10
	case 1:
                return GPIO_BitRead(GPIO0,0x0B) & 1 ^ 1;    //KEY_ENTER, p0.11
	case 2:
		return GPIO_BitRead(GPIO0,0x0C) & 1 ^ 1;    //KEY_UP, p0.12
        case 3:
		return GPIO_BitRead(GPIO0,0x0D) & 1 ^ 1;    //KEY_DOWN, p0.13	
        case 4:
		return GPIO_BitRead(GPIO0,0x0F) & 1 ^ 1;    //KEY_POWER, p0.15	
	}
        return 0;
}

/**************************************************************************************************
** 函数名: GS_GetKey
** 输 入: void
** 输 出: u16
** 功能描述:  扫描键盘,消抖后返回键值
** 说  明:  
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
u16 GS_GetKey(void)
{	
	int i;	
        
        i = Key_GetAll();
        Delay(96000*2);        //30ms
        if(i == Key_GetAll())
	{
            while(Key_GetAll()!=0x0000);      //等松开
            Delay(96000*2);         //20ms
	    return  i;
        }
        else
            return  0x0000;
}
/*
u16 GS_GetKey(void)
{
	u8 keyvalue; 
	u16 TimeOut=0, Dat; 
        u16 PressKey=0x0000;

	if(PressKey!=0x0000)
	{
//		GS_Delay(10); 						//延迟 10ms 消抖
		if( Key_GetAll() == PressKey )
		{
			Dat = 0x1fff; 
			while(Dat--)
			{
				if(Key_GetAll()!=PressKey)
				{
					PressKey = 0x0000; 
					break; 
				}
			}
			return	PressKey; 		
		}
		else
		{
			while ( Key_GetAll() != 0x0000); 
			PressKey = 0x0000; 
			return 0x0000; 
		}
	}
	keyvalue = Key_GetAll(); 
	if(keyvalue != 0x0000)
	{
//		GS_Delay(10); 						//延迟 10ms 消抖
		if( Key_GetAll() == keyvalue )
		{
			while ( Key_GetAll() != 0x0000)
			{
				TimeOut++; 
				if(TimeOut==0x4fff)
				{
					PressKey = keyvalue; 
					GS_Bee(5); 
					return keyvalue; 
				}				
			}
//			GS_Bee(5); 
			PressKey = 0x0000; 
			return keyvalue; 
		}
	}
	return 0x0000; 
}
*/

⌨️ 快捷键说明

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