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

📄 key.c.bak

📁 我的一个工程
💻 BAK
字号:
#include <reg52.h>
#include "key.h"

#define KEY_SET   0x0e//设置键
#define KEY_UP    0x0b//向上键
#define KEY_DOEN  0x0d//向下键
#define KEY_RUN  0x07//运行键
#define EAKER    0x09//上下键同时按下
#define KEY_P1  P1


extern void AT24C02_Write_Byte(unsigned char Device,unsigned char Addr, unsigned char Data);
/***************************************************************************************************
函数名称:Read_Temperature()
函数入口:空
函数出口:返回拨码开关的值
功能描述:读取拨码开关并返回设定值

****************************************************************************************************/
sbit gh=P3^4;
sbit low=P3^3;
unsigned int Read_Temperature(void)
{
unsigned int vioud,tmp[4];
unsigned char m,n;
	gh=0;
        P0=0xff;
	m=P0;
        m=~m;
	n=(m&0x0f);
	m=m>>=4;
        tmp[0]=n*1000;
	tmp[1]=m*100;
	gh=1;
	low=0;
        P0=0xff;
	m=P0;
        m=~m;
	n=(m&0x0f);
	m=m>>=4;
        tmp[2]=n*10;
	tmp[3]=m;
	low=1;
	vioud=tmp[0];
	vioud+=tmp[1];
	vioud+=tmp[2];
	vioud+=tmp[3];
	return vioud;
}
/***************************************************************************************************
函数名称:KEY_JIEXI(unsigned int Variable)
函数入口:
		  unsigned int Variable	:采集到的键盘值,就是P2、P3口的数值。
函数出口:
功能描述:键盘解析,通过采样的数值分析出当前按下的是那个键。(包括复合键)并针对键进行相应的操作
关键点描述:无
****************************************************************************************************/
KEY_JIEXI(unsigned int Variable)
{        
	switch(Variable)
	{
		//单键。。。。
		case KEY_RUN:	//0x0e运行键
             set=0;
            
           
		break;
		case KEY_DOEN:	//0x0d向下键
			if(set)
				set--;
		  else
				 set=5;
	  break;
		case KEY_UP:	//0x0b向上键
		if(set<5)
			  set++;
		else
				set=0;
	  break;
	  case KEY_SET:   //0x07设置键
		switch(set)
		  {
		  	case 1:

		  	upper_limit.X=Read_Temperature();
		  	AT24C02_Write_Byte(0xA0, 0x01, upper_limit.c[0]);
		  	AT24C02_Write_Byte(0xA0, 0x02, upper_limit.c[1]);
		  	break;
		  	case 2:
		  	lower_limit.X=Read_Temperature();
		  	AT24C02_Write_Byte(0xA0, 0x03, lower_limit.c[0]);
		  	AT24C02_Write_Byte(0xA0, 0x04, lower_limit.c[1]);
		  	break;
		  	case 3:
		  	difference.X=Read_Temperature();
		  	AT24C02_Write_Byte(0xA0, 0x05, difference.c[0]);
		  	AT24C02_Write_Byte(0xA0, 0x06, difference.c[1]);
		  	break;
		  	case 3:
		  		set=0;
		  	break;
		  	default:
		    break;
		  	}
	  break;
		case EAKER:   //上下键同时按下进行采集通道选择
                

	  break;//复合键。。。。

		//未定义键
		default:
		break;
	}
        
}
/***************************************************************************************************/
/***************************************************************************************************
函数名称:KEY()
函数入口:空
函数出口:空
功能描述:键盘消抖
设计思想:
			建立一个键盘值保存缓冲区KEY_Variable[3],能够连续保存最近的三次采样到的键盘值。当最后两次采
		样到的值相等并且和倒数第三次的值不相等时,说明有按键按下。进行确认。当三次的采样值都相等时,说
		明此按键已经确认过了,不进行确认。
****************************************************************************************************/
KEY()
{
unsigned char key_buf;
	KEY_Variable[2]=KEY_Variable[1];
	KEY_Variable[1]=KEY_Variable[0];
	EA = 0;

	key_buf=KEY_P1;
 KEY_Variable[0] =(key_buf&0xc0);
	KEY_Variable[0] >>=4;
 KEY_Variable[0]|=(key_buf&0x03);


	if(KEY_Variable[0] == KEY_Variable[1])
	{
		if(KEY_Variable[1] == KEY_Variable[2])
		{
                        SPEAKER=0;
			return;
		}
		else
		{
                         SPEAKER=1;
			KEY_JIEXI(KEY_Variable[0]);   //分析按下的是什么键,并做相应的处理。
		}
	}
	return;
}



⌨️ 快捷键说明

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