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

📄 lcd_pop.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 2 页
字号:
    {
        if(GetIn() != OK)
            continue;
        if(GetMainMode() != CurrMode)
            return NG;
        if(InCmd == KD_CLEAR)
            continue;
        if(InCmd != KD_ENTER)
            return NG;
        if(!numcnt)
            return NG;
        return OK;
    }
    return OK;
}
/*----------------------------------------------------------------------------*
* 函数功能:
*   根据传入的字符串 以及显示按键的大小, 通过按键的选择实现功能的选择.
* 输入参数:
*   **Str -- 一个指针数组, 其单元指向需要显示的字符串
*   Size_Tab -- 需要显示的各按键的基本大小
* 限于输入数据可选的情况调用.
*----------------------------------------------------------------------------*/
byte Get_Btn_Choice_Input(char **Str, byte Size, byte num)
{
    byte i,j,k;
    byte hor_size;
    byte vrt_size;
    byte posi = 0;
    word key;
    
    Lcd_Pop_Flag = 1;
    
    vrt_size = Size>>4;
    hor_size = Size&0x0f;
    
    for(i = 0; i < num ; i++)
    {
        posi = ((i*hor_size)/6)*vrt_size*6 + (i*hor_size)%6;
        if(posi >= 18)
            break;
        Pop_Btn[posi].posi = posi;
        Pop_Btn[posi].fill_color = DARKGREEN;
        Pop_Btn[posi].font_color = YELLOW;
        Pop_Btn[posi].size = Size;  //注意如果不是单键,  需要对旁边相关按键的size 进行更新
        memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
        Lcd_Draw_Button_Ex(Pop_Btn[posi],Str[i], strlen(Str[i]), ALIGN_MID);
    }
    InCmd = KD_NULL;
    lnum = 0;
    numcnt = 0;
    while(1)
    {
        key = GetKey();
        if(GetMainMode() != CurrMode)
        {
            Rst_ProgPop_Key_LayOut();
            return NG;
        }
        if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
        {
            key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
            key = (key/6/vrt_size)*(6/hor_size) + (key%6)/hor_size;
            
            if(key >= num) continue;
            numcnt = 1;
            lnum = key;
            Rst_ProgPop_Key_LayOut();
            return OK;
        }
        else if(key == KD_CANCEL)
        {
            Rst_ProgPop_Key_LayOut();
            return NG;
        }
		bellcnt = 0x01;
    }
    Rst_ProgPop_Key_LayOut();
    return NG;
}

/*----------------------------------------------------------------------------*
* 函数功能:
*   如果只有2种选择, 可以使用此函数实现选择按键的特殊显示效果
* 输入参数:
*   **Str -- 一个指针数组, 其单元指向需要显示的字符串
*   Size  -- 只能为0x22
*   num   -- 只能为2
*   *result -- 返回的结果. YES-1 / NO-0
* 返回值:
*   OK -- 得到所需要的选择
*   NG -- 没有得到选择, 强制被退出
*
*----------------------------------------------------------------------------*/
byte Get_Btn_Choice_Input_Ex(char **Str, byte Size, byte num, BYTE *result)
{
    byte i,j,k;
    byte hor_size;
    byte vrt_size;
    byte posi = 0;
    word key;
    BYTE ret = NG;
    BYTE	len ;
    
    Lcd_Pop_Flag = 1;

    Size = 0x22;    //由于函数的特殊效果, 只能是这样的参数输入
    num = 2;
    
    vrt_size = Size>>4;
    hor_size = Size&0x0f;
    
    for(i = 0; i < 2 ; i++)
    {
        if(i == 0) posi = 0;
        else if(i == 1) posi = 4;
        
        Pop_Btn[posi].posi = posi;
        Pop_Btn[posi].fill_color = DARKGREEN;
        Pop_Btn[posi].font_color = YELLOW;
        Pop_Btn[posi].size = Size;  //注意如果不是单键,  需要对旁边相关按键的size 进行更新
        memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
        len = (strlen(Str[i])>= MAX_LCD_TEXT? MAX_LCD_TEXT : strlen(Str[i]));

        memcpy(Pop_Btn[posi].desc, Str[i], len);
        Pop_Btn[posi].desc[MAX_BTN_DESC_LEN] = 0;
        Lcd_Draw_Button(Pop_Btn[posi]);
    }

	*result = KD_NO;
 
    while(1)
    {
        key = GetKey();
        if(GetMainMode() != CurrMode)
        {
            ret = NG;
            break;
        }
        if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
        {
            key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
            
            if(key/6 >= vrt_size)
                continue;
            if(key%6 < hor_size)
            {
                *result = KD_YES;
                ret =  OK;
                break;
            }
            else if(key%6 >= 6-hor_size)
            {
                *result = KD_NO;
                ret =  OK;
                break;
            }
            else			/*输入非YES,也非NO,所以继续等待*/
            {
            }
        }
        else if(key == KD_CANCEL)
        {
            ret = NG;
            break;
        }
		bellcnt = 0x01;
    }
    Rst_ProgPop_Key_LayOut();
    return (ret);
}

/*----------------------------------------------------------------------------*
*   只显示数字输入画面, 
*   完成数字的输入
*   使用 Enter 确认输入
*   使用 Cancel 退出界面, 返回到上一层界面.
*----------------------------------------------------------------------------*/
extern const char  Str_Modify_Step[][2*MAX_TEXT+1];
byte Lcd_Digit_GetIn(void)
{
    byte resault = NG;
    const word *Bak_Key_Tab;
    const byte *Bak_Key_Tab_Size;
    
	Bak_Key_Tab = Ts_Key_Tab;
	Bak_Key_Tab_Size = Ts_Key_Table_Size;

    Ts_Key_Tab = Ts_Digit_Input_Tab;
    Ts_Key_Table_Size = Ts_Digit_Input_Tab_Size;

	Lcd_Layout_Draw_Key();

    Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
    while(1)
    {
        if(GetIn() != OK)
            continue;
        if(GetMainMode() != CurrMode)
        {
            resault = NG;
            break;
        }

        if(InCmd == KD_CLEAR)
            continue;
        else if(InCmd == KD_ENTER)
        {
            resault = OK;
            break;
        }
        else if(InCmd == SPLU)//注意需要特殊处理, 要考虑社那么时候允许条码输入
        {
            numcnt = 1;
            resault = OK;
            break;
        }
        else if(InCmd == KD_CANCEL)
        {
            resault = NG;
            break;
        }
            
    }
	Ts_Key_Tab = Bak_Key_Tab;
    Ts_Key_Table_Size = Bak_Key_Tab_Size;
    Lcd_Layout_Draw_Key();
    Lcd_Clr_Text_Btn(BUF_ID_TL_SUB, 0);
    return resault;
}

/*----------------------------------------------------------------------------*
* 函数功能:
*   根据传入的字符 以及显示按键的大小, 通过按键的选择实现功能的选择.
* 输入参数:
*   *Str -- 一个数组, 其单元需要显示的字符
*   Size_Tab -- 需要显示的各按键的基本大小
* 限于输入数据可选的情况调用.
*----------------------------------------------------------------------------*/
byte    Select_Btn_Symbol(char *Str, byte Size, byte num)
{
    byte i,j,k;
    byte hor_size;
    byte vrt_size;
    byte posi = 0;
    word key;
    
    Lcd_Pop_Flag = 1;
    
    vrt_size = Size>>4;
    hor_size = Size&0x0f;
    
    for(i = 0; i < num ; i++)
    {
        posi = ((i*hor_size)/6)*vrt_size*6 + (i*hor_size)%6;
        if(posi >= 18)
            break;
        Pop_Btn[posi].posi = posi;
        Pop_Btn[posi].fill_color = DARKGREEN;
        Pop_Btn[posi].font_color = YELLOW;
        Pop_Btn[posi].size = Size;  //注意如果不是单键,  需要对旁边相关按键的size 进行更新
        memset(Pop_Btn[posi].desc, 0x20, MAX_BTN_DESC_LEN);
        Pop_Btn[posi].desc[0] = Str[i];
        Lcd_Draw_Button(Pop_Btn[posi]);
    }
    InCmd = KD_NULL;
    lnum = 0;
    numcnt = 0;
    while(1)
    {
        key = GetKey();
        if(GetMainMode() != CurrMode)
        {
            Rst_ProgPop_Key_LayOut();
            return NG;
        }
        if((Ts_Key.curr_logi/10 < 3)&&(Ts_Key.curr_logi%10 >= 4))//Pop 区域内
        {
            key = (Ts_Key.curr_logi/10)*6 + (Ts_Key.curr_logi%10 - 4); //取按键的逻辑代码转换值
            key = (key/6/vrt_size)*(6/hor_size) + (key%6)/hor_size;
            
            if(key >= num) continue;
            numcnt = 1;
            lnum = key;
            Rst_ProgPop_Key_LayOut();
            return OK;
        }
        else if(key == KD_CANCEL)
        {
            Rst_ProgPop_Key_LayOut();
            return NG;
        }
        bellcnt = 0x01;
    }
    Rst_ProgPop_Key_LayOut();
    return NG;
}
    

⌨️ 快捷键说明

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