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

📄 scankey.c

📁 利用C语言编写一个很好的矩阵式按键扫描程序.
💻 C
字号:
/******************键扫描子程序***************/
void	Scankey(void)				
{	
	uchar	aj;
	TOP = 1;				//读下行4健
	MID = 1;
	BOM = 0;				
	Delay_us(8);
	KEY1 = (P2^0XF0)&0XF0; 			//求反,有键相应位1,并保存键值	
	KEY1 = KEY1>>4;	
	MID = 0;				//读中行4健
	BOM = 1;
	Delay_us(8);
	aj = (P2^0XF0)&0XF0; 			//求反,有键相应位1,并保存键值
	KEY1 = KEY1+aj;
	TOP = 0;				//读上行4健
	MID = 1;
	Delay_us(8);
	KEY2 = (P2^0XF0)&0XF0; 			//求反,有键相应位1,并保存键值
	KEY2 = KEY2>>4;
}

/*****************键后处理*******************/
void	Kprec(void)						
{	
	uint x,temp;
	temp=KEY2;			//键前沿检出
	x = KEY2^LKEY2;			//上次本次键不同为1
	KEY2 = x&KEY2;			//且本次为1即键前沿
	LKEY2 = temp;			//本次键值替代上次
	temp = KEY1;
	x = KEY1^LKEY1;			//上次本次键不同为1
	KEY1 = x&KEY1;			//且本次为1即键前沿		
	LKEY1 = temp;			//本次键值替代上次
}

/**************键设定模块,上限9,下限0******************/

void	WORK1(void)
{	
	uchar temp,temp1;
	if(DSFL&0X02)				//赋值变量送显缓,并取出闪烁位的值
	{	
		temp = DSBUF2;
	}
	else
	{	
		temp = DSBUF1;
	}
	if(DSFL&0X01)
	{	
		temp1 = temp&0X0F;
	}
	else
	{	
		temp1 = (temp&0XF0)>>4;
	}
	if(temp1==0)
	{	
		K2 = 0;					//闪烁位值0则清K2键
	}
	else if(temp1==9)
	{	
		K1 = 0;					//闪烁位值0则清K1键
	}
	if(K1)
	{	
		if(DSFL&0X01)			//有K1键则闪烁位加1
		{	
			temp += 0X01;	
		}
		else
		{	
			temp += 0X10;
		}
	}
	if(K2)
	{	
		if(DSFL&0X01)			//有K2键则闪烁位减1
		{	
			temp -= 0X01;	
		}
		else
		{	
			temp -= 0X10;
		}
	}
	if(DSFL&0X02)				//改变数据后送回显缓
	{	
		DSBUF2 = temp;
	}
	else
	{	
		DSBUF1 = temp;
	}
	if(K3)
	{	
		DSFL++;					//有K3键则闪烁位移位
		if(DSFL&0X08)			//赋值完?
		{	
			DSFL = 0;			//转实时时钟模块设置
			HOUR = DSBUF1;
			MIN	= DSBUF2;
			STA = 0X00;			//转实时时钟模块设置
		}		
	}
	else
	{	
		STA = 0X01;				//保持时钟设定设置
		HOUR = DSBUF1;
		MIN	= DSBUF2;
	}
	
}

⌨️ 快捷键说明

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