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

📄 key.c

📁 采用普通单片机控制的电桥测试仪
💻 C
字号:
/*
*********************************************************************************************************
*										File Name:	Key.c
*
*								Last Modified Data: 2006-08-10
*
*										Last Version:V1.0
*
*								Description:按键处理
*
*********************************************************************************************************
*/
#define _KEY_
#include "..\Inc\Include.h"

extern uchar code JY_X[3];
extern uchar code JY_Y[3];
extern uchar code DXM_X[3];
extern uchar code DXM_Y[3];
extern uchar code DXU_X[3];
extern uchar code DXU_Y[3];
extern uchar code LINE[5];
uchar Key_bz=0;

void Key_deal(void)
{
	uchar i,j, x, y;
	uint tmp;
   // uchar QH;
   
   //HaveKeyDown = 0; 
	KeyTime = 0;
	LcdLedTime = 0;
	AutoCloseTime = TimeNow[4];
	
	
	switch(KeyState)
	{
	// 液晶背光控制 
      	case Lcdled://KEY0=0xbf
		if(DataSet[AnJianYin]==0)	Beep(30); //AnJianYin=0
	   	if(LcdLedFlag==0)	 
			LcdLedFlag = LCD_LED;
		else
			LcdLedFlag = 0;
		P0=LcdLedFlag;
		PLUS1;
		break;
	// 设置键 
	case Set:
		if(DataSet[AnJianYin]==0)	Beep(30);
		BtnDn(1);	  BtnUp(1);  
		switch(MenuID)
		{
		case 0:{ MenuID=MenuIndex+1;Clear_menuindex();Set_menuindex();}break;//(确定键)
  		case 1:{WRI_String(21,15,":");TestDianQiao();}		break;//测试键
   		case 2:{WRI_String(21,15,":");TestJueYuan(); }		break;//测试键
   		case 3:{WRI_String(21,15,":");TestHuanZu();  }		break;//测试键
        case 4:{WRI_String(21,15,":");TestDuanXian();}      break;//断线测试键
		
   		case 5://上翻键
			if(OldDataIndex>0)	OldDataIndex-=1;else OldDataIndex=OldDataSum-1;
			DispOldData(OldDataIndex,SetArray);
			break;
   		case 6://仪表设置中的跳格键
			DispXiuGaiData();
			break;
		case 7:// 电缆分段设置 XiuGai0~13(跳格键)
     			if(XiuGai<3)	WRI_CC_VALUE(11+6*XiuGai,40,LINE[FenDuanSize[XiuGai]],3,2);
			else			
			{
				i = (XiuGai - 3)/4;
				j = (XiuGai - 3)%4;
				WRI_CC(11+6*i+j,56,8,8,Number[SetArray[3+4*i+j]]);
			}
			if(XiuGai<14)	XiuGai += 1;	else XiuGai = 0;
			if(XiuGai<3)	WRI_CC_VALUE_Black(11+6*XiuGai,40,LINE[FenDuanSize[XiuGai]],3,2);
			else			
			{
				i = (XiuGai - 3)/4;
				j = (XiuGai - 3)%4;
				WRI_CC_Black(11+6*i+j,56,8,8,Number[SetArray[3+4*i+j]]);
			}
			break;
			
   		default:	                break;
		}
		break;
//第二个键	
	case Lmove:  		
		if(DataSet[AnJianYin]==0)	Beep(30);	  	
		BtnDn(2);		BtnUp(2);  
		switch(MenuID)
		{
		case 0:// 左移键 
            Clear_menuindex();//清除选种的模式
			if (MenuIndex>0)	MenuIndex -= 1;	else MenuIndex = 5;
			Disp_menuindex();//显示被选中的模式
			break;
		case 1:
				MenuID=7;Clear_menuindex();Set_menuindex();//QH=1;//调用电缆分段设置
			break;
      //  case 4:
            //  MenuID=7;qingchu(); Set_menuindex(); QH=2;//调用电缆分段设置
           // break;
		
		case 5://下翻键
			if(OldDataIndex<(OldDataSum-1))	OldDataIndex+=1;else OldDataIndex=0;
			DispOldData(OldDataIndex,SetArray);
			break;
		case 6:
			if(XiuGai==0)//设置按键声音	DateSet[0]用来控制按键有无声音,为零时有
			{
				if(DataSet[0]==0)	DataSet[0] = 1;else DataSet[0] = 0;
				fb=1;WRI_CC(17,14, 48,13,BitmapDataSet[DataSet[AnJianYin]]);
			}
			else if(XiuGai<3)//DateSet[1]用来控制背光时间的调整
			{
				if(XiuGai==1)	i = 0;	else i = 1;//用i的两种状态,来改变设置背光时间和自动关机时间
				if(DataSet[XiuGai]<3)	DataSet[XiuGai] += 1;else DataSet[XiuGai] = i;
				if(XiuGai==1){i = 1;j = 30;}else {i = 5;j = 46;}
				fb=1;WRI_CC(17,j, 48,13,BitmapDataSet[DataSet[XiuGai]+i]);
				if(XiuGai==1)
				{
					if(DataSet[LCDBGD] != 0)
						LcdLedFlag = LCD_LED;
					else
						LcdLedFlag = 0;
					P0 = LcdLedFlag;
					PLUS1;
				}
			}
			else//时间修改
			{
				Test = 1;//时间被修改的标志位
				if(SetArray[XiuGai-3]<9)	SetArray[XiuGai-3]+=1;else SetArray[XiuGai-3]=0;
				i = (XiuGai - 3) % 2;
				if(i==0)	x = 16; else x=17;
				i = (XiuGai - 3) / 2;
				if(XiuGai<9)y = 64; else {y = 80;i -= 3;}
				x = x + 3 * i;
				fb = 1;WRI_CC(x,y,8,8,Number[SetArray[XiuGai-3]]);
			}
			break;
    	case 7:// 电缆分段设置 (调整键)
			if(XiuGai<3)
			{
				if(FenDuanSize[XiuGai]<5)	FenDuanSize[XiuGai]+=1;else FenDuanSize[XiuGai]=0;
				WRI_CC_VALUE_Black(11+6*XiuGai,40,LINE[FenDuanSize[XiuGai]],3,2);//调整线径
			}
			else
			{
				i = (XiuGai - 3)/4;
				j = (XiuGai - 3)%4;
				if(SetArray[3+4*i+j]<9){SetArray[3+4*i+j]+=1;Key_bz=1;}else SetArray[3+4*i+j]=0;
				WRI_CC_Black(11+6*i+j,56,8,8,Number[SetArray[3+4*i+j]]);//调整长度
			}
			break;
	 	default:	break;
		}
		break;
//第三个键
	case Rmove: 
		if(DataSet[AnJianYin]==0)	Beep(30);
		BtnDn(3);		BtnUp(3);  
 	 	switch(MenuID)
  		{
		case 0:	// 右移键。。。。
           	Clear_menuindex();
			if(MenuIndex<5)		MenuIndex += 1;	else MenuIndex = 0;
            Disp_menuindex(); 
			break;
        default:			   
			if(MenuID==1)		{ClearLastLine();Test=0;}	// 电桥测试 

			else if(MenuID==2)		// 绝缘
			{
				WRI_String(9,5,"       ");
				WRI_String(9,9,"       ");
				WRI_String(21,7,"      ");
				for (i=0; i<3; i++)
				{
					WRI_String(JY_X[i]-6,JY_Y[i],"       ");	
					WRI_CC(JY_X[i]-1, (JY_Y[i]-1)*8, 16, 16, table23[10]); // 空白
				}
			}
	    	else if(MenuID==3)	ClearHLR();			// 环阻测试时只需清除原环阻测试界面上的数据
			else if(MenuID==4)//断线测试退出键					
			{  
		      qingchu();	
			}
			else if(MenuID==6)
			{
				if(Test==1)
				{
					Test = 0;
					for(i=0;i<5;i++)
					{
						x = SetArray[i*2]*10 + SetArray[i*2+1];
						if(x>MaxTime[i])
						{
							fb = 1;
							if(i<3)
								WRI_CC(16+3*i,64,8,8,Number[SetArray[i*2]]);
							else
								WRI_CC(16+3*(i-3),80,8,8,Number[SetArray[i*2+1]]);
							return;
						}
					}
					for(i=0;i<6;i++)
					{
						TimeNow[i] = SetArray[i*2]*10 + SetArray[i*2+1];
					}
					II3WR(AT24C256,I2C_YEAR,TimeNow[0]);
					WriteTimeNow();
				}
				for(i=0;i<3;i++)
				{
					II3WR(AT24C256,I2C_ANJIANYIN+i,DataSet[i]);
				}
			}
            else if(MenuID==7)// 电缆分段设置(退出) 
             {
               
               if(Key_bz)
                {
                    QuanChang = 0;
					for(i=0; i<3; i++)
					{
						FenDuanLong[i]=SetArray[3+4*i]*1000+SetArray[4+4*i]*100+SetArray[5+4*i]*10+SetArray[6+4*i];
						II3WR(AT24C256,I2C_FenDuan+i,FenDuanSize[i]);
						II3WR(AT24C256,I2C_FenDuan+3+2*i,FenDuanLong[i]/256);
						II3WR(AT24C256,I2C_FenDuan+4+2*i,FenDuanLong[i]%256);
						QuanChang += FenDuanLong[i];//电缆总长,用于测故障距离
					}
                  Key_bz=0;
                }
				//if(QuanChang>99999)	QuanChang = 99999;
				if(XiuGai<3)
					WRI_CC_VALUE(11+6*XiuGai,40,LINE[FenDuanSize[XiuGai]],3,2);
				//	WRI_CC_VALUE_Black(11+6*XiuGai,40,LINE[FenDuanSize[XiuGai]],3,2);
				else
				{
					i = (XiuGai - 3)/4;
					j = (XiuGai - 3)%4;
					WRI_CC(11+6*i+j, 56, 8, 8, Number[SetArray[3+4*i+j]]);
				}
				if(MenuIndex==0)//当在电桥测试时输入线径和长度时进行以下处理
				{
					MenuID = 1;
					Set_menuindex();
					if(Test==1)
					{
					    GetPercent();
						tmp = I2C_OLDDATA  + (OLDDATA_BYTE * (OldDataSum-1));
						II3WR(AT24C256, tmp+5, per/256);
						II3WR(AT24C256, tmp+6, per%256);
						II3WR(AT24C256, tmp+7, Dist/256);
						II3WR(AT24C256, tmp+8, Dist%256);
						WRI_CC_VALUE(11, 24, per, 3, 1);
						WRI_CC_VALUE(11, 72, Dist, 5, 0);
						WRI_CC(16,24,8,8,Number[13]);		// %
						WRI_CC(16,72,8,8,Number[12]);		// m
					} 
					break;
				}
               }
			MenuID = 0;
			Set_menuindex();
			Disp_menuindex();
			break;
		}
		break;
	// 其它按键
	default:break;	
	}
	KeyTime = 0;
	LcdLedTime = 0;
	AutoCloseTime = TimeNow[4];
}
/*
********************************************************************************************************
* Function:OneMiaoDeal
*
* Descriptions:
*
* Input:
* 
* OutPut:无
*******************************************************************************************************
*/
void qingchu(void)
{

              //  WRI_String(13,4,"      ");
				//WRI_String(13,10,"      ");
				//WRI_String(25,8,"       ");	
	            //WRI_CC(25, 7, 16, 16, table23[10]); // 空白

				WRI_String(20,6,"         ");	
	            WRI_CC(25, 6, 16, 16, table23[10]); // 空白

               // WRI_String(13,6,"      ");
			//	WRI_String(13,8,"      ");
			//	WRI_String(25,8,"     ");

		      // 	WRI_String(20,6,"      ");	
	           // WRI_CC(25, 5, 16, 16, table23[10]); // 空白

                WRI_String(19,8,"          ");	
	            WRI_CC(25, 8, 16, 16, table23[10]); // 空白
}
/*
********************************************************************************************************
* Function:OneMiaoDeal
*
* Descriptions:
*
* Input:
* 
* OutPut:无
*******************************************************************************************************
*/
void OneMiaoDeal(void)
{
	uchar tmp;
	OneMiao = 0;
	ReadTimeNow();
	DispSysTimeAndPower();
  

	if(DataSet[LCDBGD]!=0 && LcdLedFlag!=0)//时间到自动的关背光
	{
		if(++LcdLedTime>(DataSet[LCDBGD]*10))
		{
			LcdLedFlag = 0x00;
			P0 = LcdLedFlag;
			PLUS1;
		}
	}
   //if(MenuID = 0) {P0 = 0x04; PLUS1;}
	if(DataSet[AutoClose]!=0)//关机时间到,自动的关机!
	{
		if(TimeNow[4]>=AutoCloseTime)//分钟
			tmp = TimeNow[4] - AutoCloseTime;
		else
			tmp = TimeNow[4] +60 - AutoCloseTime;
		if(tmp > (DataSet[AutoClose]*10))//AutoClose=2
		{
			Beep(100);
			CanClose = 1;
			POWER_ON_OFF = OFF;
		}
	}
}

⌨️ 快捷键说明

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