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

📄 poskb.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 3 页
字号:
        }
        else
            Lcd_Text_Line_Disp(i, FALSE);
    }
}

void Lcd_Draw_Btn(word logic_code, byte btn_id);
/*---------------------------------------------------------------------------------*
*                 updata the dplu'pluno
*---------------------------------------------------------------------------------*/
byte Update_Dplu_No(byte Idx_Step)
{   
    byte logic;
    
	if((lnum > Max_Plu_No))
    {
   	    errorType(ERR_DIGIT_ILLEGAL);
   	    return (NOTOK);
    }
   
    #ifdef	REST_PLU_FUNC
    if(lnum != 0)
    {
	   if((plu[lnum-1].attr.mode==PLU_DESC)||(plu[lnum-1].attr.mode==PLU_GIFT))
	   {
	   	    errorType(ERR_NORMAL_ATTR);
	        return (NOTOK);
	   }
	}
    #endif
   
	Dplu_Pluno[Idx_Step] = lnum;       /* Update the preset data */
    
    logic = key_logi_get(DPLU_Pop_Key_Tabl, Idx_Step%48 + KD_DPLU_ST, MAX_LAYOUT_KEY);
    Lcd_Draw_Btn(logic, BTN_ID_KEY_EX);
        
	modi_flag = 1;
	return (OK);
}

/*------------------------------------------------------------------*
*               print the dplu'dplu number 
*
*-------------------------------------------------------------------*/
void prn_DPLU(byte Idx)
{
   byte mode;     /* The print all messages mode or print the single message mode
	                  1: Print all messange
	                  0: Print single message
	                  */
   byte len;

    return;
   if(!Flag_Prgm_Head)
   {    
      Flag_Prgm_Head = 1;
		xtr_strcpy(prn_Buf+1,Dplu_Prn_Head);
      prn_Buf[0] = DB_HEIGT_PRN;
      print();
      Line_Feed(1);
   }

   if(Idx == 0xFF)      /* The print all message mode */
   {
      mode = 1;
      Idx = 0;
   }
   else                 /* The print one message mode */
   {
      mode = 0;
   }

   do
   {
		if(Key_Buff_Chk(KD_CLEAR) == OK)		/* Check the key buffer contain the key KD_CLEAR or not */
		{							/* If press the CLEAR key, stotp printing the PLU attribute */
			xtr_strcpy(prn_Buf+1,Str_PrnInt);		/* Modified on 2004-04-07 17:08 */
			print();
			break;
		}

		xtr_strcpy(prn_Buf+1, Str_DPLU_prn1);
		len = strlen(Str_DPLU_prn1);
		LongtoAsc(prn_Buf+len+1, Idx+1, 3);
		xtr_strcpy(prn_Buf+11, Str_DPLU_prn2);

		LongtoAsc(prn_Buf+18, Dplu_Pluno[Idx], 4);
      print();
      Idx ++;
   }while(mode&&(Idx<MAX_DPLU_NO));

   if(mode == 1)
   {
      prn_Line('-');
      prn_Stamp();
      Flag_Prgm_Head = 0;
   }
}

/*查找当前PLU所在行数, (0~DISP_LCD_TEXT_LINE-1)*/
byte Srch_PLU_on_Line( int PLU_Idx, int *Curr_PLU_List)
{
    byte i;
    for(i = 0; i < DISP_LCD_TEXT_LINE; i++)
    {
        if(Curr_PLU_List[i] == PLU_Idx+1)
            break;
    }
    return i;
}
/*-----------------------------------------------------------------------------* 
*   Program the direct PLU
*      1> 整屏显示 Direct PLU (48/屏)
*      2> 功能按键有: KD_ENTER, KD_CANCEL, KD_DPLUSF, KD_NUM_INPUT
*      3> Text区域显示 PLU List
*      4> 操作方式: 选择一个PLU, 然后按下某一个DPLU 按键.
*      5> PLU 的选择方式: 
*          a. 在左侧的文本框使用 UP/DOWN 按键和 PAGE UP/PAGE DOWN 按键选择PLU
*          b. 使用 KD_NUM_INPUT 按键切换画面, 选择PLU 编号 --> [ENTER] 方式选择PLU
*          c. 使用条码枪输入.
*      6> 在选择好DPLU 连接的PLU 之后, 此按键的名称就改为连接的PLU 的名称.
*-----------------------------------------------------------------------------*/
void pDPLU(void)
{
    int PLU_Idx =0;
    int Bak_PLU_Idx;
    word DPLU_Idx = 0;
    byte line;
    byte Refresh_flag = 1;
    byte Refresh_mode = 0;  /*0: 向下更新。 1: 向上更新。 2: 跳跃更新*/
    byte kd_void_flag = 0;
    byte bak_DPLU_Shift_Inc;
    int  Curr_PLU_List[DISP_LCD_TEXT_LINE]; /*元素的范围是 1~Max_Plu_No, 注意使用时要保持一致*/
    BOOL rslt = NG;

    if(Srch_Next_Used_PLU(0) >= Max_Plu_No)
        {errorType(ERR_PLU_EMPTY); return;}
   

    bak_DPLU_Shift_Inc = sysflag->DPLU_Shift_Inc;
    sysflag->DPLU_Shift_Inc = 48;
    
    Bak_Ts_Key_Tab1 = Ts_Key_Tab;
    Bak_Ts_Key_Table_Size1 = Ts_Key_Table_Size;
    Ts_Key_Tab = DPLU_Pop_Key_Tabl;
    Ts_Key_Table_Size = DPLU_Pop_Key_Tabl_Size;

    Lcd_Layout_Draw_Key();//弹出左界面
	Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE, 1, Str_ParaSet_Menu[0], ALIGN_MID);
	Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
    DPLUShiftFlag = 0;
    Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Dplu_Prog_Step[0]);

    memset((byte *)Curr_PLU_List, 0, DISP_LCD_TEXT_LINE*sizeof(int));//清空缓冲区。

    while(TRUE)
    {
        GetMainMode();
        if(MainMode != CurrMode)
        {
            sysflag->DPLU_Shift_Inc = bak_DPLU_Shift_Inc;
            Ts_Key_Tab = Bak_Ts_Key_Tab1;
            Ts_Key_Table_Size = Bak_Ts_Key_Table_Size1;
            Lcd_Layout_Draw_Key();//弹出左界面
            return;
        }
        
        if(Refresh_flag)
        {
            Refresh_flag = 0;
            Get_Full_PLU_List(&PLU_Idx, Curr_PLU_List, Refresh_mode);
        }
        
        InCmd = GetKey();
        

        switch(InCmd)
        {
            case KD_PAGE_DOWN:
                if(Curr_PLU_List[DISP_LCD_TEXT_LINE-1] == 0)
                    PLU_Idx = 0;
                else     
                    PLU_Idx = Curr_PLU_List[DISP_LCD_TEXT_LINE-1]-1;
                Refresh_mode = 0;
                Refresh_flag = 1;
                break;
                
            case KD_PAGE_UP:
                if(Curr_PLU_List[0] == 0)
                    PLU_Idx = 0;
                else 
                    PLU_Idx = Curr_PLU_List[0]-1;
                Refresh_mode = 1;
                Refresh_flag = 1;
                break;
                
            case KD_DOWN:
                line = Srch_PLU_on_Line(PLU_Idx,Curr_PLU_List);
                if((line < DISP_LCD_TEXT_LINE-1)&&(Curr_PLU_List[line+1] > 0))//页内变化
                {
                    Lcd_Text_Line_Disp(line, FALSE);
                    PLU_Idx = Curr_PLU_List[line+1]-1;
                    Lcd_Text_Line_Disp(line+1, TRUE);
                    Refresh_flag = 0;
                }
                else
                {
                    if(Curr_PLU_List[line+1] == 0)
                        PLU_Idx = 0; 
                    else
                        PLU_Idx = Curr_PLU_List[DISP_LCD_TEXT_LINE-1]-1;
                    Refresh_mode = 0;
                    Refresh_flag = 1;
                }
                break;

            case KD_UP:
                line = Srch_PLU_on_Line(PLU_Idx,Curr_PLU_List);
                if((line > 0)&&(Curr_PLU_List[line-1]>0))//页内变化
                {
                    Lcd_Text_Line_Disp(line, FALSE);
                    PLU_Idx = Curr_PLU_List[line - 1]-1;
                    Lcd_Text_Line_Disp(line - 1, TRUE);
                    Refresh_flag = 0;
                }
                else
                {
                    if((line > 0)&&(Curr_PLU_List[line-1] == 0))
                        PLU_Idx = 0;
                    else
                        PLU_Idx = Curr_PLU_List[0]-1;
                    Refresh_mode = 1;
                    Refresh_flag = 1;
                }
                break;
                
            case KD_DPLUSF:
                DPLUShiftFlag = (DPLUShiftFlag+1)%5;
                Lcd_Shift_Exchange(KD_DPLUSF);
                break;
                    
            case KD_CANCEL:
                sysflag->DPLU_Shift_Inc = bak_DPLU_Shift_Inc;
                Ts_Key_Tab = Bak_Ts_Key_Tab1;
                Ts_Key_Table_Size = Bak_Ts_Key_Table_Size1;
                Lcd_Layout_Draw_Key();//弹出左界面
                return;
                    
            case KD_NUM_INPUT:
                ProgBar = 1;
                rslt = Lcd_Digit_GetIn();
                Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Dplu_Prog_Step[0]);
                if((rslt != OK)||((!BarInFlag) && (InCmd != SPLU)))
                    break;    

                //如果刚才有条码枪扫描条码输入
                Bak_PLU_Idx = PLU_Idx;
                if(Judge_Weight_PLU(BCDbuf) == OK)      /* Judge is the weight PLU bar code or not */
                {
                    byte    tmp_buf[BAR_BUFF_LEN];
                    memcpy(tmp_buf, BCDbuf, BAR_BUFF_LEN);
                    Do_Weight_PLU(tmp_buf, BCDbuf);
                }
                PLU_Idx = SC_SearchIndex(BCDbuf);

                if(PLU_Idx < 0)
                    {errorType(ERR_BAR_EXIST);PLU_Idx = Bak_PLU_Idx; break;}
                PLU_Idx = Sindex[PLU_Idx];

                if(!Chk_Idle_PLU(PLU_Idx))//Idle PLU
                    {errorType(ERR_BAR_EXIST);PLU_Idx = Bak_PLU_Idx; break;}
                    
                if((PLU_Idx >= Curr_PLU_List[0])&&(PLU_Idx <= Curr_PLU_List[DISP_LCD_TEXT_LINE-1]))   
                {
                    line = Srch_PLU_on_Line(Bak_PLU_Idx,Curr_PLU_List);
                    Lcd_Text_Line_Disp(line, FALSE);
                    line = Srch_PLU_on_Line(PLU_Idx,Curr_PLU_List);
                    Lcd_Text_Line_Disp(line, TRUE);
                    Refresh_flag = 0;
                }
                else
                {
                    Refresh_mode = 2;
                    Refresh_flag = 1;
                }
                break;

            case KD_VOID:
                kd_void_flag = !kd_void_flag;//取反
                Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Dplu_Prog_Step[kd_void_flag]);
                break;
                
            default:
                if((InCmd >= KD_DPLU_ST)&&(InCmd <= KD_DPLU_END))
                {
                    DPLU_Idx = getDPLU();
                    if(DPLU_Idx >= MAX_DPLU_NO)
                    {
                        errorType(ERR_DPLU_OVER);
                        break;
                    }
                    if(kd_void_flag)
                        lnum = 0;
                    else
                        lnum = PLU_Idx+1;
                    kd_void_flag = 0;
                    if(Update_Dplu_No(DPLU_Idx)==NOTOK)
                       break;
                    if(modi_flag == 1)
                    {
                        modi_flag = 0;
                        prn_DPLU(DPLU_Idx);
                    }
                    Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Dplu_Prog_Step[0]);
                    break;
                }
      }  /* end switch */
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -