📄 funclcd.c
字号:
data uint8 i;
#if MAINMENUITEMNUM>4
if(!First_Showmenu)
{
First_Showmenu=TRUE;
ClearRAM(0,8);
}
#endif
if(index<4)
{
//显示第一屏主菜单
for(i=0;i<MENUITEMONELCD;i++)
{
if (index==i)
Display_Line(i*2,32,4,1,Main_Menu[i]);
else
Display_Line(i*2,32,4,0,Main_Menu[i]);
}
}
#if MAINMENUITEMNUM>4
else
{
//显示第二屏主菜单
for(i=MENUITEMONELCD;i<MAINMENUITEMNUM;i++)
{
if (index==i)
Display_Line((i-4)*2,32,4,1,Main_Menu[i]);
else
Display_Line((i-4)*2,32,4,0,Main_Menu[i]);
}
}
#endif
}
void SunMenuShow(uint8 MenuIndex)
{
uint8 i;
//显示第一屏主菜单
for(i=0;i<4;i++)
{
if (MenuIndex==i)
Display_Line(i*2,32,4,1,Sub_Menu[i]);
else
Display_Line(i*2,32,4,0,Sub_Menu[i]);
}
}
//===========================================================================================
//================================ 菜单功能处理函数 =========================================
//===========================================================================================
//系统设置
void SystemSet(void)
{
uint8 KeyV,Inx=0;
Delay_Ret(T0_60S);
ClearRAM(0,8);
while(1)
{
SunMenuShow(Inx);
if(ret_Flag)
{
ClearRAM(0,8);
return;
}
KeyV=KeyScan();
if(KeyV==NOKEY_PRESS)continue;
Light_On();
NoDelay_Ret();
if(KeyV==ENTER)
{
ClearRAM(0,8);
if(Inx==0)
{
LcdLightProc();
}
else if(Inx==1)
{
BeepProc();
}
else if(Inx==2)
{
DelTimer();
}
else
{
ViewTimer();
}
}
else if(KeyV==MOVE)
{
Inx++;
if(Inx>3)Inx=0;
}
else if(KeyV==ESC)
{
ClearRAM(0,8);
return;
}
}
}
//设置闹铃
void WakeSetProc()
{
uint8 tempvar,Sys_D_T0[7],tempvar1;
bool h_Flag=1,m_Flag=0;
uint8 KeyNum=0;
TimerCount=EepromRead(Timers);
ClearRAM(0,8);
//请输入时间:
Display_Line(0,16,6,0,ShowTip[4]);
//序号:
Display_Line(4,32,3,0,ShowTip[5]);
Get_TimeFromDS1302(Sys_D_T0);
Msingle_font_pattern (mh,2,64,0);
Delay_Ret(T0_6S);
while(1)
{
if (ret_Flag)
{
ClearRAM(0,8);
break;
}
TimerCount=EepromRead(Timers);
Msingle_font_pattern (English_Offset[TimerCount/10],4,88,0);
Msingle_font_pattern (English_Offset[TimerCount%10],4,96,0);
tempvar=(Sys_D_T0[2]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,48,h_Flag);
tempvar=Sys_D_T0[2]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,56,h_Flag);
tempvar=(Sys_D_T0[1]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,72,m_Flag);
tempvar=Sys_D_T0[1]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,80,m_Flag);
tempvar=KeyScan();
if(tempvar==NOKEY_PRESS)continue;
ClearRAM(6,8);
Light_On();
NoDelay_Ret();
switch(tempvar)
{
case MOVE:
if(KeyNum==1)
{
KeyNum=0;
}
else
{
KeyNum=1;
}
if(KeyNum==0)
{
h_Flag=1;
m_Flag=0;
}
else if(KeyNum==1)
{
h_Flag=0;
m_Flag=1;
}
break;
case ENTER://保存闹铃
if(EepromRead(TimerFlag)!=0x55)EepromWrite(TimerFlag,0x55);
Delay(1);
if(EepromRead(TimerFlag+1)!=0xAA)EepromWrite(TimerFlag+1,0xAA);
if(TimerCount<MaxTimer)
{
for(tempvar1=0;tempvar1<TimerCount;tempvar1++)
{
if(TimerArray[tempvar1].Hour==Sys_D_T0[2]&&TimerArray[tempvar1].Minute==Sys_D_T0[1])
{
TimerArray[tempvar1].BitEnable=0xAA;//恢复打铃
Display_Line(6,16,6,0,ShowTip[6]);//提示打铃已设置
Status_Beep();
goto ExitSet;
}
}
tempvar=TimerValue+TimerCount*3;
EepromWrite(tempvar,0xAA);
Delay(1);
EepromWrite(tempvar+1,Sys_D_T0[2]);
Delay(1);
EepromWrite(tempvar+2,Sys_D_T0[1]);
_NOP_();
TimerArray[tempvar1].BitEnable=0xAA;// EepromRead(tempvar);//
TimerArray[tempvar1].Hour=Sys_D_T0[2];// EepromRead(tempvar+1);//
TimerArray[tempvar1].Minute=Sys_D_T0[1];// EepromRead(tempvar+2);//
TimerCount++;
EepromWrite(Timers,TimerCount);
}
else
{//找已删除的点位置
for(tempvar1=0;tempvar1<TimerCount;tempvar1++)
{
if(TimerArray[tempvar1].BitEnable!=0xAA)
{
TimerArray[tempvar1].BitEnable=0xAA;
TimerArray[tempvar1].Hour=Sys_D_T0[2];
TimerArray[tempvar1].Minute=Sys_D_T0[1];
tempvar=TimerValue+TimerCount*3;
EepromWrite(tempvar1,0xAA);
Delay(1);
EepromWrite(tempvar1+1,Sys_D_T0[2]);
Delay(1);
EepromWrite(tempvar1+2,Sys_D_T0[1]);
Display_Line(6,0,6,0,ShowTip[10]);//提示打铃已设置
Msingle_font_pattern (English_Offset[tempvar1/10],6,96,0);
Msingle_font_pattern (English_Offset[tempvar1%10],6,104,0);
goto ExitSet;
}
}
Display_Line(6,16,6,0,ShowTip[7]);//提示打铃已设置
Status_Beep();
}
ExitSet: break;
case ESC:
ClearRAM(0,8);
return;
default:
if(KeyNum==0)
tempvar1=((Sys_D_T0[2]>>4)&0x0F)*10+(Sys_D_T0[2]&0x0F);
else if(KeyNum==1)
tempvar1=((Sys_D_T0[1]>>4)&0x0F)*10+(Sys_D_T0[1]&0x0F);
if(tempvar==PAGEUP)tempvar1++;
if(tempvar==PAGEDOWN&&tempvar1>0)tempvar1--;
if(KeyNum==0)
{
if(tempvar1>23)tempvar1=0;
else if(tempvar1<=0)tempvar1=23;
Sys_D_T0[2]=tempvar1/10;
Sys_D_T0[2]=(Sys_D_T0[2]<<4)&0xF0;
Sys_D_T0[2]=Sys_D_T0[2]+(tempvar1%10);
}
else if(KeyNum==1)
{
if(tempvar1>59)tempvar1=0;
else if(tempvar1<=0)tempvar1=59;
Sys_D_T0[1]=tempvar1/10;
Sys_D_T0[1]=(Sys_D_T0[1]<<4)&0xF0;
Sys_D_T0[1]=Sys_D_T0[1]+(tempvar1%10);
}
break;
}
}
}
//==========================================================
//日期时间菜单处理函数
//菜单序号:3
//Function: DateTime_Set
// Auto_Set
//Description: Audjst System date and time
//Parameters: NO.
//Call: DispLay_RTC,Get_TimeFromDS1302,Msingle_font_pattern
// HzDisplay,ClearRAM,SubMenu_Show,Calc_Week
//Returns: NO.
//=================================================
void TimerSetProc(void)//0
{
//显示时间于屏幕中间
data uint8 tempvar,keynum=0,rowno=0,tempvar1,tempvar2;
data uint8 Sys_D_T0[7];
bdata uint8 change_index=0x00;
Get_TimeFromDS1302(Sys_D_T0);
ClearRAM(0,8);
DispRTC(0,Sys_D_T0);
//交换年分与星期的位置,便于操作
tempvar = Sys_D_T0[6];
Sys_D_T0[6] = Sys_D_T0[5];
Sys_D_T0[5] = tempvar;
//秒位置反显
tempvar=(Sys_D_T0[0]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],0,Db_WZ[0],1);
tempvar=Sys_D_T0[0]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],0,Db_WZ[1],1);
Sys_D_T0[4]=Sys_D_T0[4]&0x1F;
Delay_Ret(T0_6S);
while(1)
{
if (ret_Flag)
{
ClearRAM(0,8);
break;
}
tempvar=(Sys_D_T0[keynum]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],rowno,Db_WZ[2*keynum],1);
tempvar=Sys_D_T0[keynum]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],rowno,Db_WZ[2*keynum+1],1);
tempvar=KeyScan();
if (tempvar==NOKEY_PRESS)continue;
//亮背光
Light_On();
NoDelay_Ret();
//光标移动(下移)
if(tempvar==MOVE)
{
keynum++;
if(keynum>5)keynum=0;
if(keynum>2)
rowno=2;
else
rowno=0;
if(keynum==0)
{
tempvar=(Sys_D_T0[5]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,Db_WZ[10],0);
tempvar=Sys_D_T0[5]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],2,Db_WZ[11],0);
}
else
{
if((keynum-1)<3)
tempvar2=0;
else
tempvar2=2;
tempvar=(Sys_D_T0[keynum-1]>>4)&0x0F;
Msingle_font_pattern (English_Offset[tempvar],tempvar2,Db_WZ[2*(keynum-1)],0);
tempvar=Sys_D_T0[keynum-1]&0x0F;
Msingle_font_pattern (English_Offset[tempvar],tempvar2,Db_WZ[2*(keynum-1)+1],0);
}
}
else if(tempvar==ENTER)
{
//保存秒分时日月星期与年
tempvar = Sys_D_T0[5];
Sys_D_T0[5] = Sys_D_T0[6];
Sys_D_T0[6] = tempvar;
change_index|=0x40;
Write_TimeToDS1302(Sys_D_T0,change_index);
tempvar = Sys_D_T0[6];
Sys_D_T0[6] = Sys_D_T0[5];
Sys_D_T0[5] = tempvar;
}
else if(tempvar==BACK)
{//返回键
ClearRAM(0,8);
return;
}
else
{//数字键
tempvar1= ((Sys_D_T0[keynum]>>4)&0x0F)*10+(Sys_D_T0[keynum]&0x0F);
if(tempvar==PAGEUP)tempvar1++;
if(tempvar==PAGEDOWN && tempvar1>0)tempvar1--;
Sys_D_T0[keynum] =tempvar1/10;
Sys_D_T0[keynum]=(Sys_D_T0[keynum]<<4) & 0xF0;
Sys_D_T0[keynum]=Sys_D_T0[keynum]+ tempvar1%10;
if(keynum<2 &&Sys_D_T0[keynum]>0x59)Sys_D_T0[keynum]=0;
else if(keynum==2 &&Sys_D_T0[keynum]>0x23)Sys_D_T0[keynum]=0;
else if(keynum==3)
{
switch(Sys_D_T0[4])
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if( Sys_D_T0[3]>0x31)Sys_D_T0[3]=1;
else if( Sys_D_T0[3]<=0)Sys_D_T0[3]=31;
break;
case 2:
tempvar=((Sys_D_T0[5]>>4)&0x0F)*10+(Sys_D_T0[5]&0x0F);
tempvar=month_n_day(tempvar+2000,2);
if( Sys_D_T0[3]>tempvar)Sys_D_T0[3]=1;
else if( Sys_D_T0[3]<=0)Sys_D_T0[3]=tempvar;
break;
default:
if( Sys_D_T0[3]>0x30)Sys_D_T0[3]=1;
else if(Sys_D_T0[3]<=0)Sys_D_T0[3]=0x30;
}
}
else if(keynum==4)
{
if(Sys_D_T0[4]>0x12)Sys_D_T0[4]=1;
else if(Sys_D_T0[4]<=0)Sys_D_T0[4]=0x12;
}
else if(keynum==5)
{
if(Sys_D_T0[5]>0x99)Sys_D_T0[5]=0x00;
else if(Sys_D_T0[5]<=0x00)Sys_D_T0[5]=0x99;
}
if(keynum>2)
rowno=2;
else
rowno=0;
change_index|=Flag[keynum];
Sys_D_T0[6]=Calc_Week(Sys_D_T0[5],Sys_D_T0[4],Sys_D_T0[3]);
HzDisplay(Week[Sys_D_T0[6]],0,34,0);
}
}
}
//==========================================================
//系统信息菜单处理,菜单序号:7
//Function: Display_SysInfo
//Description: Display System infomation
//Parameters: NO.
//Call: HzDisplay,Msingle_font_pattern,Display_Pic
//Returns: NO.
//==========================================================
void DispInfo(void)
{
uint8 kk;
ClearRAM(0,8);
//版本:1.00.00
HzDisplay(ban,0,0,0);//版
HzDisplay(ben,0,16,0);//本
Msingle_font_pattern (mh,0,32,0);
Msingle_font_pattern (space1,0,40,0);
Msingle_font_pattern (English_Offset[VERSON[0]],0,48,0);
Msingle_font_pattern (Mfont_dot,0,56,0);
Msingle_font_pattern (English_Offset[(VERSON[1]>>4)&0x0F],0,64,0);
Msingle_font_pattern (English_Offset[VERSON[1]&0x0F],0,72,0);
Msingle_font_pattern (Mfont_dot,0,80,0);
Msingle_font_pattern (English_Offset[(VERSON[2]>>4)&0x0F],0,88,0);
Msingle_font_pattern (English_Offset[VERSON[2]&0x0F],0,96,0);
//-----------------------------------------------------------
//日期:06-05-30
HzDisplay(Day,2,0,0);//版
HzDisplay(Qi,2,16,0);//本
Msingle_font_pattern (mh,2,32,0);
Msingle_font_pattern (space1,2,40,0);
Msingle_font_pattern (English_Offset[(DATE[0]>>4)&0x0F],2,48,0);
Msingle_font_pattern (English_Offset[DATE[0]&0x0F],2,56,0);
Msingle_font_pattern (English_Offset[10],2,64,0);
Msingle_font_pattern (English_Offset[(DATE[1]>>4)&0x0F],2,72,0);
Msingle_font_pattern (English_Offset[DATE[1]&0x0F],2,80,0);
Msingle_font_pattern (English_Offset[10],2,88,0);
Msingle_font_pattern (English_Offset[(DATE[2]>>4)&0x0F],2,96,0);
Msingle_font_pattern (English_Offset[(DATE[2]&0x0F)],2,104,0);
Display_Line(4,0,5,0,Student);
Display_Line(6,0,6,0,Teacher);
Delay_Ret(T0_6S);
while(1)
{
if(ret_Flag)break;
kk=KeyScan();
if(kk==NOKEY_PRESS)continue;
NoDelay_Ret();
Light_On();
if(kk==BACK)
{
ClearRAM(0,8);
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -