📄 program.c
字号:
LWordtoAsc(Text_Lcd.text[6]+MAX_TEXT-3, 0, sysflag->sysdots);
}
}
//power save
if((Last_Prg_Idx == IDX_NULL)||(Last_Prg_Step == 8))
{
LWordtoAsc(Text_Lcd.text[8]+MAX_TEXT-2, sysflag->Power_Save, 2);
}
//Bright
if((Last_Prg_Idx == IDX_NULL)||(Last_Prg_Step == 9))
{
Text_Lcd.text[9][MAX_TEXT-1] = sysflag->Bright + '0';
}
if(Last_Prg_Idx == IDX_NULL)
Lcd_Reflush_List(0);
else
Lcd_Reflush_List(1);
Last_Prg_Idx = 1;
Last_Prg_Step = Idx_Step;
Rst_Tl_Sub(); /* 清除另外一个显示窗口 */
Lcd_Send_Text_Buff_Str(BUF_ID_TL_SUB, 1,Str_Prog_Enter,ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_TL_SUB);
}
byte UpDate_SysCnfig(byte step)
{
const char *Str[4];
byte sel_no = 0;
byte size;
byte rsult = 0xff;
byte *Ptr;
switch(step)
{
case 0://date format
Str[0] = Str_DateFmt_Sel[0];
Str[1] = Str_DateFmt_Sel[1];
Str[2] = Str_DateFmt_Sel[2];
sel_no = 3;
size = 0x22;
Ptr = &sysflag->datefmt;
break;
case 2://time format
Str[0] = Str_TimeFmt_Sel[0];
Str[1] = Str_TimeFmt_Sel[1];
sel_no = 2;
size = 0x22;
Ptr = &sysflag->timefmt;
break;
case 4://language
Str[0] = Str_Language_Sel[0];
Str[1] = Str_Language_Sel[1];
Str[2] = Str_Language_Sel[2];
sel_no = 3;
size = 0x22;
Ptr = &sysflag->Language;
break;
case 5://tax system
Str[0] = Str_TaxSys_Sel[0];
Str[1] = Str_TaxSys_Sel[1];
Str[2] = Str_TaxSys_Sel[2];
sel_no = 3;
size = 0x22;
Ptr = &sysflag->Tax_System;
break;
case 6://decimal set
Str[0] = "0";
Str[1] = "0.0";
Str[2] = "0.00";
Str[3] = "0.000";
size = 0x11;
sel_no = 4;
Ptr = &sysflag->sysdots;
break;
case 8://power save
case 9://bright
Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
if(Get_Num_Input() != OK)
return NG;
if(step == 8)
{
if(lnum >10)
{errorType(ERR_DIGIT_OVER);return NG;}
sysflag->Power_Save = lnum;
}
else
{
if((lnum > 5)||(lnum == 0))
{errorType(ERR_DIGIT_OVER);return NG;}
sysflag->Bright = lnum;
}
return OK;
default:
return NG;
}
Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[3]);
rsult = Get_Btn_Choice_Input(Str, size, sel_no);
if(rsult != OK) return NG;
if((numcnt)&&(lnum < sel_no))
*Ptr = lnum;
modi_flag = 1;
return OK;
}
void pSys_Config(void)
{
byte i;
byte step = 0;
byte reflush_flag = 0;
byte len;
Last_Prg_Idx = IDX_NULL;
Last_Prg_Step = STEP_NULL;
while(1)
{
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE, 1, Str_Option_Menu[2], ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Disp_SysCnfig(step);
if(GetIn() != OK)
continue;
if(GetMainMode() != CurrMode)
return;
if(numcnt)
{
if((lnum >=431) && (lnum < 440))
{
step = lnum - 431;
}
else
{
errorType(ERR_DIGIT_ILLEGAL);
continue;
}
}
switch(InCmd)
{
case KD_ENTER: /*Enter for accept the input index*/
if((step == 1)||(step == 3))
{
if(pTime_Date(step)== OK)
step++;
Last_Prg_Idx = IDX_NULL;
Last_Prg_Step = STEP_NULL;
break;
}
else if(step == 7)
{
pPswd_Set();
Last_Prg_Idx = IDX_NULL;
Last_Prg_Step = STEP_NULL;
break;
}
if(UpDate_SysCnfig(step) != OK)
break;
step = (step +1)%(MAX_SYS_CNFIG_NUM);
break;
case KD_PAGE_DOWN:
case KD_PAGE_UP:
case KD_DOWN:
case KD_UP:
Do_Menu_Roll(InCmd);
step = Text_Lcd.CurrLine%(MAX_SYS_CNFIG_NUM);
break;
case KD_CANCEL:
return;
default:
bellcnt = 0x10;
break;
}
}
}
void Disp_Prog_Time_Date(byte step)
{
byte hour, minute;
byte year, month, day;
byte lcd_date_buf[MAX_LCD2_LEN+1];
byte lcd_time_buf[MAX_LCD2_LEN+1];
disint();
year = GetYear();
month = GetMonth();
day = GetDay();
hour = GetHour();
minute = GetMinute();
enint();
Rst_Lcd_Text();
if(step == 1) // program the date
{
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_SysCnfg_Menu[0], ALIGN_LEFT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT,15,Str_DateFmt_Sel[sysflag->datefmt], ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
if (sysflag->datefmt == 0) { /* MDY */
lcd_date_buf[0] = month/10 + '0';
lcd_date_buf[1] = month%10 + '0';
lcd_date_buf[2] = '/';
lcd_date_buf[3] = day/10 + '0';
lcd_date_buf[4] = day%10 + '0';
lcd_date_buf[5] = '/';
lcd_date_buf[6] = year/10 + '0';
lcd_date_buf[7] = year%10 + '0';
}
else if (sysflag->datefmt == 1) { /* DMY */
lcd_date_buf[0] = day/10 + '0';
lcd_date_buf[1] = day%10 + '0';
lcd_date_buf[2] = '/';
lcd_date_buf[3] = month/10 + '0';
lcd_date_buf[4] = month%10 + '0';
lcd_date_buf[5] = '/';
lcd_date_buf[6] = year/10 + '0';
lcd_date_buf[7] = year%10 + '0';
}
else { /* YMD */
lcd_date_buf[0] = year/10 + '0';
lcd_date_buf[1] = year%10 + '0';
lcd_date_buf[2] = '/';
lcd_date_buf[3] = month/10 + '0';
lcd_date_buf[4] = month%10 + '0';
lcd_date_buf[5] = '/';
lcd_date_buf[6] = day/10 + '0';
lcd_date_buf[7] = day%10 + '0';
}
lcd_date_buf[8] = '\0';
memset(Text_Lcd.text[1], 0x20, MAX_LCD_TEXT);
memcpy(Text_Lcd.text[1]+3,"date", 4);
memcpy(Text_Lcd.text[1]+15, lcd_date_buf, strlen(lcd_date_buf));
Lcd_Text_Line_Disp(1, TRUE); // 反显.
}
else
{
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_SysCnfg_Menu[2], ALIGN_LEFT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT,15,Str_TimeFmt_Sel[sysflag->timefmt], ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
if(sysflag->timefmt == 0) //24 hour
{
lcd_time_buf[0] = hour/10 + 0x30;
lcd_time_buf[1] = hour%10 + 0x30;
lcd_time_buf[3] = minute/10 + 0x30;
lcd_time_buf[4] = minute%10 + 0x30;
lcd_time_buf[2] = ':';
}
else
{
if(hour >= 12)
hour -= 12;
lcd_time_buf[0] = hour/10 + 0x30;
lcd_time_buf[1] = hour%10 + 0x30;
lcd_time_buf[3] = minute/10 + 0x30;
lcd_time_buf[4] = minute%10 + 0x30;
lcd_time_buf[2] = ':';
}
lcd_time_buf[5] = '\0';
memset(Text_Lcd.text[1], 0x20, MAX_LCD_TEXT);
memcpy(Text_Lcd.text[1]+3, "Time", 4);
memcpy(Text_Lcd.text[1]+15, lcd_time_buf, strlen(lcd_time_buf));
if(sysflag->timefmt == 1)
{
if(GetHour()>12)
{
memcpy(Text_Lcd.text[1]+22, "P.M", 3);
}
else
{
memcpy(Text_Lcd.text[1]+22, "A.M", 3);;
}
}
Lcd_Text_Line_Disp(1, TRUE); // 反显.
}
Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
if(step == 1)// program the time.
{
Lcd_Send_Text_Buff_Str(BUF_ID_TL_INPUT,1,"Input the date", ALIGN_LEFT);
}
else
Lcd_Send_Text_Buff_Str(BUF_ID_TL_INPUT,1,"Input the time", ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_TL_INPUT);
}
/*-----------------------------------------------------------------*
* Program the time and date.
*-----------------------------------------------------------------*/
byte Update_Prog_Time_Date(byte Idx_Step)
{
byte year,month,day;
const char *time[2] = {{"A.M"},{"P.M"}};
byte current_time;
#define AM KD_YES
#define PM KD_NO
year = month = day = 1;
GetMainMode();
if(MainMode != CurrMode)
return(NG);
if(Idx_Step == 3 && sysflag->timefmt == 1) //选择 AM PM框.
{
Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[3]);
if(Get_Btn_Choice_Input_Ex(time,0x22,2,¤t_time)!= OK)
return(NG);
}
while(1)
{
if(GetIn() != OK)
continue;
switch(InCmd)
{
case KD_CLEAR:
Do_Clear();
break;
case KD_CANCEL:
return (NG);
case KD_ENTER:
if(Idx_Step == 3) /* Update the time */
{
if(numcnt!=4)break; /* Input illeagal. */
if(sysflag->timefmt == 0)
{
if(In_Buff[2]>5||(In_Buff[0]*10+In_Buff[1])>23)break; //Judge the input time is right or not.
}
else
{
if(In_Buff[2]>5||(In_Buff[0]*10+In_Buff[1])>11) break;
}
if(sysflag->timefmt == 0)
{
SOFT_HOUR = In_Buff[0]*10+In_Buff[1]; //If the inut is right,update the time.
SOFT_MINUTE = In_Buff[2]*10+In_Buff[3];
SOFT_SECOND = 0;
}
else
{
if(current_time == PM) //time is the pm
SOFT_HOUR = In_Buff[0]*10+In_Buff[1] +12; //If the inut is right,update the time.
else
SOFT_HOUR = In_Buff[0]*10+In_Buff[1];
SOFT_MINUTE = In_Buff[2]*10+In_Buff[3];
SOFT_SECOND = 0;
}
#if SW_VER == SW_NE2
{
// 设置冬令时/夏令时标志.
DATE date;
date.Year = SOFT_YEAR;
date.Month = SOFT_MONTH;
date.Day = SOFT_DAY;
SetTimeFlag(date);
}
#endif
// modi_flag = 1;
}
else /* Update the date */
{
if(numcnt!=6)break;; /* Input illegal */
if(sysflag->datefmt == 1)
{
day = In_Buff[0]*10 + In_Buff[1];
month = In_Buff[2]*10+In_Buff[3];
year = In_Buff[4]*10+In_Buff[5];
}
else if(sysflag->datefmt == 0)
{
month = In_Buff[0]*10 + In_Buff[1];
day = In_Buff[2]*10+In_Buff[3];
year = In_Buff[4]*10+In_Buff[5];
}
else if(sysflag->datefmt == 2)
{
year = In_Buff[0]*10 + In_Buff[1];
month = In_Buff[2]*10+In_Buff[3];
day = In_Buff[4]*10+In_Buff[5];
}
else
sysflag->datefmt = 1; /* When is the other format, set it to the English format */
if(IsDay(year,month,day)==NG)
break;
SOFT_YEAR = year;
SOFT_MONTH = month;
SOFT_DAY = day;
#if SW_VER == SW_NE2
{
// 设置冬令时/夏令时标志.
DATE date;
date.Year = SOFT_YEAR;
date.Month = SOFT_MONTH;
date.Day = SOFT_DAY;
Rtc_SetWeek(date);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -