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

📄 keybox.c

📁 基于AT89S52单片机的时钟温度显示程序
💻 C
字号:
/*********************************************************************************************************                  
*                                     		U_164 8_key drivers
*                                       	QZhao,2007
*                                       	All Rights Reserved  
* File : keybox.c
* By   : QZhao
* Contact : zq1987731@163.com
*********************************************************************************************************/
				
/*★★★可调用函数:	U_164(x);->164控制	KEY_SCAN();->键盘扫描*/

/*********************************************************************************************************  
*
*	       	    							74LS164服务子程序
*     	入口参数:0~255中任意数    
*		返回值:成功则返回TRUE
*		功能:将参数送入74LS164的Q7~Q0中
*
*********************************************************************************************************/

	static bool U_164(uchar x)
	{
		uchar i;
		CS_8255=0;
		for(i=0;i<8;i++)
		{
			W_8255(x,2);
			K_CLK=0;
			K_CLK=1;			
			x>>=1;
		}
		CS_8255=1;
		return TRUE;
	}

/********************************************************************************************************* 
* 
*		    								键盘扫描服务函数
*     		入口参数:无      
*			返回值:KEY_CACHE,无按键则返回FALSE
*			功能:扫描键盘有无输入并以01H~08H为键值返回
*
*********************************************************************************************************/

	uchar KEY_SCAN(void)
	{	
		U_164(0x00);
		if(K_SCAN==1)
			return FALSE;
		U_164(0x7F);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 1;
				}
			}
		}
		U_164(0xBF);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 2;
				}
			}
		}
		U_164(0xDF);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 3;
				}
			}
		}
		U_164(0xEF);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 4;
				}
			}
		}
		U_164(0xF7);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 5;
				}
			}
		}
		U_164(0xFB);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 6;
				}
			}
		}
		U_164(0xFD);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 7;
				}
			}
		}
		U_164(0xFE);
		if(K_SCAN==0)
		{
			delayms(10);
			if(K_SCAN==0)
			{
				delayms(10);
				if(K_SCAN==0)
				{
					delayms(10);
					while(K_SCAN==0)
						delayms(10);
					return 8;
				}
			}
		}
		return FALSE;
	}

⌨️ 快捷键说明

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