void DealKey(void) //
{
unsigned char Key;
Key=0x00;
Key=KeyScan();
//************************************** make sure whether the LCD run into menu
if(Key>=0x10) //没按键
{
return;
}
//*******for test
//MenuAssi=0x04;
//Key=KeyUp;//
//Menu=0x80;
//***************
//有按键就灯亮一下
LED=0; // 这个按键后亮和响一下 //不是主要问题
Ring=0;
if(Menu==0x00) //
//when the LCD didn't run into menu ,and so just run into it and no action this key press
{
Menu=0x80;
//clear the second row for running into menu
//MenuAssi=0x08;
return;
}
//************************************* from here on ,really deal with key press
//*************************************************************** press OK
else if(Key==KeyOk) //press OK 0x0a
{
if(Menu==0x80) //说明刚进入menu 属于第一层 准备进第二层
{
//移位是为了移到相应的位置置位
//表示进入那个菜单 置相应位
Menu|=(MenuAssi<<3);
if(Menu==0x88) //run into 4.stopwatch
{
min_Stop=0;
sec_Stop=0;
us_Stop=0; //进入重新置0
return;
}
Address=0xc4;
if(Menu==0xc0) // 进入 第一菜单 1.set time
{
//为了避免与中断冲突 关中断
EA=0;
C_hour=T_hour;
C_min=T_min;
C_sec=T_sec;
EA=1;
//在第二行显示当前时间 给用户修改
return;
}
else if(Menu==0xa0) //run into 2.set alarm
{
ET1=0;
C_hour=hour_Alarm;
C_min=min_Alarm;
C_sec=sec_Alarm;
ET1=1;
return;
}
//以下为已经是第二层了
else if(Menu==0x88) //when be in the 4.stopwatch save stopwatch 并相关置位 //为了省空间
{
b_stop=!b_stop; //取反 使它可以控制秒表的暂停和继续计时 不用返回工作 因为可以由cancl做
return;
}
else if(Menu==0xc0) //when be in the 1.set time press OK so save time;
{
//保存时间
EA=0;
T_hour=C_hour;
T_min=C_min;
T_sec=C_sec;
EA=1;
//////////////************** 返回工作
//暂时 不允许time1中断
ET1=0;
MenuAssi=Menu&0x7f;
MenuAssi=MenuAssi>>3;
Menu=0x80;
ET1=1;
return;
}
else if(Menu==0xa0) //when be in the 2.set alarm press OK and so save alarm time 并相关置位
{
b_alarm=1;
//////////////************** 返回工作
//暂时 不允许time1中断
ET1=0;
MenuAssi=Menu&0x7f;
MenuAssi=MenuAssi>>3;
Menu=0x80;
ET1=1;
return;
}
else if(Menu==0x90) //when be in the 3.set timer save timer time 并相关置位
{
b_timer=1;
//////////////************** 返回工作
//暂时 不允许time1中断
ET1=0;
MenuAssi=Menu&0x7f;
MenuAssi=MenuAssi>>3;
Menu=0x80;
ET1=1;
return;
}
}// here the end of if(Key==0x0a) //press OK
//*************************************************************** press cancel
else if(Key==KeyCancel) // press Cancel
{
if(Menu==0x80) //在第一层 that action press cancel donnot work
{
return;
}
return;
}//the end Key==0x0b end deal with Cancel
//********************************************** press up * press down
//************************************************
// 就是这里不行 和下面的left right 也不行
//
//*************************************************
else if((Key==KeyUp||Key==KeyDown)&&Menu==0x80)
//in the class 1 menu it can work . others don't work
//注意MenuAssi的移位溢出
{
//****** for test key
//Key=0x0d;
//Menu=0x80;
//MenuAssi=0x08;
//******
if(Key==KeyUp)
{
if(MenuAssi<0x08)
{
ET1=0;
MenuAssi=MenuAssi<<1;
ET1=1;
}
}
if(Key==KeyDown)
{
if(MenuAssi>0x01)
{
ET1=0;
MenuAssi=MenuAssi>>1;
ET1=1;
}
}
return;
}
//******************************************* press left or right
else if((Key==KeyLeft||Key==KeyRight)&&(Menu==0xc0||Menu==0xa0||Menu==0x90))
//in the class 2 menu except Stopwatch it can work . others don't work
{
if(Key==KeyLeft&&Address>0xc4)//left
{
Address--;
}
if(Key==KeyRight&&Address<0xcb)//right
{
Address++;
}
return;
}//the end of press left or right
//****************************************************** press number key
else if(Key>=Key0||Key<=Key9&&(Menu==0xc0||Menu==0xa0||Menu==0x90))
{
ET1=0;
if(Address==0xc4) //改变hour的十位
C_hour=Key*10+C_hour%10;
else if(Address==0xc5) //改变hour的个位
C_hour=Key+(C_hour/10)*10;