📄 key.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 + -