📄 key.c
字号:
#define _key_
#include "..\Inc\includes.h"
uchar const SUPERMIMA[6]={1,2,3,4,5,6};
/*********************************************************************************************************
* 函数名称:Key_Deal
*
* 功能描述:按键查询...连续查2次,键值相同才处理,否则视为干扰。
*
* 说明:
*
********************************************************************************************************/
void Key_Deal(void)
{
uchar key_now;
key_data = KeyScan();
key_now = KeyScan();
if(key_data==key_now && key_data<=key_sure)
{
KEY_RESPONSE();
}
Task &=~ Read_Key;
}
/*********************************************************************************************************
* 函数名称:KEY_RESPONSE
*
* 功能描述: 键盘响应
*
* 入口参数: 无
*
* 出口参数: 无
*
* 全局变量: Menu_ID,key_data,Alarm_Sum,Set_array,SUPERMIMA,MIMA,Set_array_count等等
*
* 调用模块: ON_EnterPsw();ON_Enter_Samping();ON_NOAlarming();ON_Enter_Alarming(); ON_SET_FACE();write_number();ON_SET_TongDao();
* ON_SET_BDTX(); ON_EnterTime(); ON_EnterNewPsw(); ON_EnterYuanIP(); ON_EnterYuanDK();ON_EnterIP();ON_EnterDK();
ON_Alarming(0);等等
*
* 作 者: Cache
* 创建时间: 2006年1月16日
********************************************************************************************************/
void KEY_RESPONSE(void)
{
unsigned int temp;
unsigned char y1,x1,Set_max,Mid_data;
Uint32 IP_data;
Uint8 *pSetData;
static unsigned char chan_change=0;//通道是否改变如果改变则需要将通道定义表自动上传上去
ALARM0
switch(Menu_ID)
{
case 0: //1系统设置 2实时显示 3当前告警
if(key_data == key_1) ON_EnterPsw(); //输入密码 Menu_ID=1
else if(key_data == key_2) ON_Enter_Samping(); //实时显示 Meunu_ID=14
else if(key_data == key_3)
{
if(Alarm_Sum==0) ON_NOAlarming(); //无报警信息 Menu_ID=15
else ON_Enter_Alarming();//显示报警信息 Menu_ID=15
}break;
case 1://请输入密码:——————
if(key_data==key_sure)
{
y1=0;
for(x1=0;x1<6;x1++)
{
if(Set_array[x1]!=SUPERMIMA[x1]) {y1=1;break;}
}
if(y1==1)
{
for(x1=0;x1<6;x1++)
if(Set_array[x1]!=MIMA[x1]){ON_EnterPsw();return;}
}
ON_SET_FACE();//设置界面 Menu_ID=2
}
else if(key_data==key_cancel) ON_1_face(); //Menu_ID = 0
else if(key_data<=key_9)
{
y1=30;x1=28;
Set_array_count++;
if(Set_array_count<=6)
{
Set_array[Set_array_count-1] = key_data;
write_number(x1+Set_array_count*8,y1,16);
}
}break;
case 2://1通道设置 2本地通信 3时间设置 4密码修改
if(key_data==key_1) ON_SET_TongDao(); //进入通道设置选项界面 Menu_ID=4
else if(key_data==key_2) ON_SET_BDTX(); //进入本地通信设置选项界面Meun_ID=3
else if(key_data==key_3) ON_EnterTime(); //进入时间设置 Menu_ID=13
else if(key_data==key_4) ON_EnterNewPsw(); //进入密码修改 Menu_ID=12
else if(key_data==key_down) ON_SET_FACE2(); //
else if(key_data==key_cancel) ON_1_face(); //返回到主界面 Menu_ID=0
break;
case 3://本地通信设置:1远端IP 2远端端口 3本地IP 4本地端口
if(key_data==key_cancel) ON_SET_FACE(); //返回到设置界面 Menu_ID=2
else if(key_data==key_1) ON_EnterYuanIP(); //远端IP Menu_ID=5
else if(key_data==key_2) ON_EnterYuanDK(); //远端端口 Menu_ID=6
else if(key_data==key_3) ON_EnterIP(); //本地IP Menu_ID=7
else if(key_data==key_4) ON_EnterDK(); //本地端口 Menu_ID=8
break;
case 4://通道设置:1模拟通道 2开关输入 3开关输出
if(key_data==key_cancel)
{
if(chan_change==1)
{
chan_change=0;
//SendChanDefinition();
}
ON_SET_FACE();
}//返回到主界面
else if(key_data==key_1) ON_EnterTD_AI();//模拟输入界面定义 Menu_ID=9
else if(key_data==key_2) ON_EnterTD_DI();//开关输入定义 Menu_ID=10
else if(key_data==key_3) ON_EnterTD_DO();//开关输出定义 Menu_ID=11
break;
case 5://case 5 case 7 设置 远端IP 和 本地IP
case 7://ok
Set_max = Set_array_count;//记录上一次的位置
if(key_data<=key_9)
{
Set_array[Set_array_count] = key_data;
if(Set_array_count<11) Set_array_count+=1;else Set_array_count=0;
}
else if(key_data==key_cancel) {ON_SET_BDTX();return;}
else if(key_data==key_down)
{
if(Set_array_count<11) Set_array_count+=1;else Set_array_count=0;
}
else if(key_data==key_up)
{
if(Set_array_count>0 ) Set_array_count-=1;else Set_array_count=11;
}
else if(key_data==key_sure)
{
temp = Set_array[0]*100+Set_array[1]*10+Set_array[2];
if(temp>255) { Set_array_count = 0; goto Out;}
else{
IP_data=temp*0x1000000;
II3WR(AT24C256,I2C_IP+(Menu_ID-5)*4,temp);
}
temp = Set_array[3]*100+Set_array[4]*10+Set_array[5];
if(temp>255) { Set_array_count = 3; goto Out;}
else{
IP_data+=temp*0x10000;
II3WR(AT24C256,I2C_IP+1+(Menu_ID-5)*4,temp);
}
temp = Set_array[6]*100+Set_array[7]*10+Set_array[8];
if(temp>255) { Set_array_count = 6; goto Out;}
else{
IP_data+=temp*0x100;
II3WR(AT24C256,I2C_IP+2+(Menu_ID-5)*4,temp);
}
temp = Set_array[9]*100+Set_array[10]*10+Set_array[11];
if(temp>255) { Set_array_count = 9; goto Out;}
else{
IP_data+=temp;
II3WR(AT24C256,I2C_IP+3+(Menu_ID-5)*4,temp);
}
if(Menu_ID==5) Yuan_IP = IP_data;
else if(Menu_ID==7) Bendi_IP = IP_data;
ON_SET_BDTX();
return;
}
Out: x1 = 2 + Set_max*8 + 7*(Set_max/3);
y1 = Set_array[Set_max];
write_number(x1,32,Set_array[Set_max]);
x1 = 2 + Set_array_count*8 + 7*(Set_array_count/3);
y1 = Set_array[Set_array_count];
write_number_black(x1,32,Set_array[Set_array_count]);
break;
case 6://设置 远端端口 和 本地端口
case 8://ok
if(key_data<=key_9)
{
if(Set_temp <=6553)
{
if(Set_temp==6553&&key_data>5) return;
Set_temp = Set_temp*10 + key_data;
if(Set_temp>=10000) write_number(40+0*8,32,Set_temp/10000); else write_number(40+0*8,32,30);
if(Set_temp>=1000) write_number(40+1*8,32,Set_temp/1000%10); else write_number(40+1*8,32,30);
if(Set_temp>=100) write_number(40+2*8,32,Set_temp/100%10); else write_number(40+2*8,32,30);
if(Set_temp>=10) write_number(40+3*8,32,Set_temp/10%10); else write_number(40+3*8,32,30);
write_number(40+4*8,32,Set_temp%10);
}
}
else if(key_data==key_cancel) ON_SET_BDTX();
else if(key_data==key_sure)
{
II3WR(AT24C256,I2C_IP+4+(Menu_ID-6)*4,Set_temp/0x100);
II3WR(AT24C256,I2C_IP+5+(Menu_ID-6)*4,Set_temp%0x100);
if(Menu_ID==6) Yuan_dk = Set_temp;
else if(Menu_ID==8) Bendi_dk = Set_temp;
ON_SET_BDTX();
}
break;
case 9: //模拟通道设置
case 10://开关量输入设置
case 11://开关量输出设置
if(Menu_ID==9) {pSetData = ADSam_Code;Set_max=15;}
else if(Menu_ID==10) {pSetData = DISam_Code;Set_max=15;}
else if(Menu_ID==11) {pSetData = DOSam_Code;Set_max=7;}
if(key_data==key_cancel) {ON_SET_TongDao();return;}
if(key_data<=key_9)
{
if(Set_temp<=9)
{
Set_temp = Set_temp*10 + key_data;
Mid_data = Set_temp;
}
else return;
}
else if(key_data==key_sure||key_data==key_down)
{
if(key_data==key_sure)//数据保存
{
pSetData[Set_array_count] = Set_temp;
II3WR(AT24C256,(Menu_ID-9)*16+Set_array_count,Set_temp);
}
if(Set_array_count>=Set_max) Set_array_count=0;else Set_array_count+=1;
Mid_data = pSetData[Set_array_count];
Set_temp = 0;
}
else if(key_data==key_up)
{
if(Set_array_count<=0) Set_array_count=Set_max;else Set_array_count-=1;
Mid_data = pSetData[Set_array_count];
Set_temp = 0;
}
write_number(90,10,(Set_array_count+1)/10);
write_number(98,10,(Set_array_count+1)%10);
if(Mid_data>=10) write_number(90,36,Mid_data/10);
else write_number(90,36,30);
write_number(98,36,Mid_data%10);
break;
case 12: //密码修改
if(key_data==key_cancel) ON_SET_FACE();
else if(key_data==key_sure&&Set_array_count>=12)
{
for(x1=0;x1<6;x1++)
{
if(Set_array[x1]!=Set_array[x1+6]){ON_EnterNewPsw();return;}
}
for(x1=0;x1<6;x1++)
{ MIMA[x1]=Set_array[x1];
II3WR(AT24C256,I2C_MIMA+x1,MIMA[x1]);
}
ON_SET_FACE();
}
else if(key_data<=key_9)
{
y1=21;x1=46;
if(Set_array_count<12)
{
Set_array_count++;
Set_array[Set_array_count-1]=key_data;
if(Set_array_count<=6) write_number(x1+Set_array_count*8-8,y1,16);
else write_number(x1+Set_array_count*8-56,y1+22,16);
}
}break;
case 13://时间设置
if(key_data<=key_9)
{
Set_array[Set_array_count] = key_data;
if(Set_array_count<9) Set_array_count+=1;else Set_array_count=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -