⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 program.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 5 页
字号:
            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,&current_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 + -