单片机键盘响应C代码

/*
--此段代码通用,修改后可以完成一般设置键盘的动作响应
--flystone 2006-02
--转载保留此信息
*/

#define  SCANKEY_T     40 
#define  DELAY_T     6  

#define  TRUE        1
#define  FALSE       0



#define  KEY_ADD        0x0e    //(00001110)
#define  KEY_ENTER    0x0b    //(00001011)
#define  KEY_MOVER  0x0d    //(00001101)
#define  KEY_PW           0x07    //(00000111)  这四个键自行根据键盘定义修改



//-------------------------------------------------------------------------
void ScanKey(void)
{

	static unsigned char key;
	static bit key_sta,key_down;
	static int delay_t;	

	if(!key_sta)
	{
		key = Getkey();
		if(key == KEY_PW || key == KEY_ENTER || key == KEY_MOVER || key == KEY_ADD) key_sta = TRUE;
	}
	else
	{
		if(!key_down)
		{
			if(key == Getkey())
			{
				key_down = TRUE;				
				currentkey = key;
                delay_t = 0;
			} 
			else key_sta = FALSE;
		}
		else 
		{
			if(Getkey()  == 0x00)
			{
                key = 0x00;
				key_down = FALSE;
				key_sta = FALSE;
			}
			else
			{	
				if(Getkey() == key)
				{
					delay_t += 1;
					if(delay_t >= DELAY_T) 
					{
                        delay_t = 0;
                        currentkey = key;
					} 
				} 
			}
		} 
	}

}
//----------------定时器自行定义------------------------------
void IntT2() interrupt 7 //  1ms
{
    scankey ++;  //80MS扫描键盘
    if (scankey >= SCANKEY_T)
    {
    	scankey = 0;
    	ScanKey();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值