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

📄 descinput.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////
// 				DescInput.c
//
// Copyright (c) 2006, WeiHua Technology Co., Ltd.
// All rights reserved.
//
// Modify by:		Analy       2006-07-27
//
// Desription: 
/*-------------------------------------------------------------*
                The keyboard logical code:
                1   2   3       4   5   6  
                7   8   9       10  11  12
                13  14  15      16  17  18
                19  20  21      22  23  24
                25  26  27      28  29  30
                31  32  33      34  35  36
                37  38  39      40  41  42
                43  44  45      46  47  48
                49  50  51      52  53  54
                55  56  57      58  59  60
            
                The letter layout: 
                1   2   3       4   5      Disp_Btn
                6   7   8       9   0      NULL
                A   B   C       D   E      NULL 
                F   G   H       I   J      SHIFT 
                K   L   M       N   O      BACK_SPACE 
                P   Q   R       S   T      CLEAR
                U   V   W       X   Y      DOUBLE_WIDTH 
                Z <SPACE>!      "   #       LARGE_FONT
                $   %   &       '   (       ENTER
                )   *   +       ,   -       ENTER 

        shift 后的效果
                SP1 SP2 SP3     SP4 SP5      Disp_Btn
                SP6 SP7 SP8     SP9 SP10     NULL
                a   b   c       d   e      NULL 
                f   g   h       i   j      SHIFT 
                k   l   m       n   o      BACK_SPACE
                p   q   r       s   t      CLEAR 
                u   v   w       x   Y      DOUBLE_WIDTH    
                z <SPACE>.      /   :      LARGE_FONT
                ;   <   =       >   ?      ENTER
                @   [   \       ]   _      ENTER  

                
*-------------------------------------------------------------------*/

///////////////////////////////////////////////////////////////////////////////
#include "ecrsys.h"
#include "ftype.h"
#include "sysdata.h"
#include "data.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
#include "tft_disp.h"
#include "font.h"
#include "mathes.h"
#include "keydef.h"

#define	MAX_DESC_EX_LEN		(MAX_PRN_LEN * 2 + 2)

/*--------------------------------------------------------------------*
 *             The description of character code table                *
 *--------------------------------------------------------------------*/
#if	COUNTRY == SWEDEN
#define	SPCH_00						0x5B
#define	SPCH_01						0x5C
#define	SPCH_17						0x5D
#define	CH_BK_SLASH					0x94		/* '\' */
#else
#define	SPCH_00						142			/* 0x8E */
#define	SPCH_01						148			/* 0x94 */
#define	SPCH_17						143			/* 0x8F */
#define	CH_BK_SLASH					0x5C
#endif

#define SYM_20AC       0x81     //欧元符号
#define SYM_0130       0x82     //拉丁大写I
#define SYM_0131       0x83     //拉丁小写i
const char Crncy_Symvol[]   =   {'$', SYM_20AC, 0xA2, 0xA3, 0xA5, '*'};

const 	byte code[] = {  
        #if  TFT_SIZE == TFT_12INCH
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
        #endif
			0x31,	0x32,	0x33,	0x34,	0x35,	0xFF,
            0x36,	0x37,	0x38,	0x39,	0x30,   0xFF,
            0x41,   0x42,   0x43,   0x44,   0x45,   0xFF,
            0x46,   0x47,   0x48,   0x49,   0x4A,   0xFF,
			0x4B,   0x4C,   0x4D,   0x4E,   0x4F,   0xFF,
			0x50,   0x51,   0x52,	0x53,	0x54,	0xFF,
			0x55,	0x56,   0x57,	0x58,	0x59,	0xFF,
			0x5A,   0x2E,   0x2C,	0x2D,	0x24,   0xFF,
            0X23,   0x2B,	0x3D,	0x25,	0x2A,	0xFF,
            0x20,	0x20,	0x20,   0xFF,	0xFF,	0xFF,
            
        #if  TFT_SIZE == TFT_12INCH
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
        #endif            
            0x31,	0x32,	0x33,	0x34,	0x35,	0xFF,
            0x36,	0x37,	0x38,	0x39,	0x30,   0xFF,
            0x61,   0x62,   0x63,   0x64,   0x65,   0xFF,
            0x66,   0x67,   0x68,   0x69,   0x6A,   0xFF,
			0x6B,   0x6C,   0x6D,   0x6E,   0x6F,   0xFF,
			0x70,   0x71,   0x72,	0x73,	0x74,	0xFF,
			0x75,	0x76,   0x77,	0x78,	0x79,	0xFF,
			0x7A,   0x2E,   0x2C,	0x2D,	0x24,   0xFF,
            0X23,   0x2B,	0x3D,	0x25,	0x2A,	0xFF,
            0x20,	0x20,	0x20,   0xFF,	0xFF,	0xFF,
            
        #if  TFT_SIZE == TFT_12INCH
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
        #endif        
            0xC0,	0xC1,	0xC2,	0xC4,	0xC6,	0xFF,
            0xC8,	0xC9,	0xCA,	0xCB,	0xDF,   0xFF,
            0xCC,   0xCD,   0xCE,   0xCF,   0xD1,   0xFF,
            0xD2,   0xD3,   0xD4,   0xD6,   SYM_0130,0xFF,
			0xD9,   0xDA,   0xDB,   0xDC,   0xBF,   0xFF,
			0x28,   0x29,   0x2F,	0x5C,	0x3F,	0xFF,
			0x21,   0x40,   0x26,	0xBD,	0xBC,   0xFF,
            0X5B,   0x5D,	0x22,	0x3A,	0x3B,	0xFF,
            0xFF,	0xFF,	0xA2,   0xA3,	0xA5,	0xFF,
            0x20,	0x20,	0x20,   SYM_20AC,0xFF,  0xFF,
            
        #if  TFT_SIZE == TFT_12INCH
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
            0xFF,   0xFF,   0xFF,   0xFF,   0xFF,   0xFF,
        #endif            
            0xE0,	0xE1,	0xE2,	0xE4,	0xE6,	0xFF,
            0xE8,	0xE9,	0xEA,	0xEB,	0xDF,   0xFF,
            0xEC,   0xED,   0xEE,   0xEF,   0xF1,   0xFF,
            0xF2,   0xF3,   0xF4,   0xF6,   SYM_0131,0xFF,
			0xF9,   0xFA,   0xFB,   0xFC,   0xBF,   0xFF,
			0x28,   0x29,   0x2F,	0x5C,	0x3F,	0xFF,
			0x21,   0x40,   0x26,	0xBD,	0xBC,   0xFF,
            0X5B,   0x5D,	0x22,	0x3A,	0x3B,	0xFF,
            0xFF,	0xFF,	0xA2,   0xA3,	0xA5,	0xFF,
            0x20,	0x20,	0x20,   0xFF,   0xFF,   0xFF,
};
const WORD Desc_Input_KeyTab[] = 
{
#if  TFT_SIZE == TFT_12INCH
    KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
    KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
    KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,KD_NULL,
#endif
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_BTN, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_NULL, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_LARGE_FONT, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_CAP_SHIFT, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_BACK_SPACE, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_CANCEL, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_DB_WIDTH, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_SYMBOLE, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_ENTER, 
    DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,DS_CHAR,KD_ENTER
};


const byte Desc_Input_Key_Size[] = 
{
#if  TFT_SIZE == TFT_12INCH
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
#endif
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x11,
    0x11, 0x11, 0x11,0x11, 0x11, 0x21,
    0x13, 0x10, 0x10,0x11, 0x11, 0x01,
};

BUTTON_DEF  Input_Btn;   /*专用于显示按键的输入*/

/*----------------------------------------------------------------------------*
*   功能: 显示可输入字符与按键对应的位置
*   Btn: 当前正在修改的按键. 由于PLU, DEPT, CLERK 等均需要使用按键直接操作, 
*       所以要考虑按键实时显示的效果.
*   mode:     2  --- 按键名称的输入
*             1  --- 允许在输入描述符同时设定字符的格式(是否为双宽).
*             0  --- 在输入描述符同时不能选择字符格式的设定.
*   flag:     2 --- 画第二层的按键布局, 不需要画控制按键
*             1 --- 画第一层的按键布局, 不需要画控制按键
*             0 --- 画全新的按键布局.
*   字符所在按键的背景色统一为浅灰色, 字体为黑色.
*   需要准备的工作:
*       1. 清空输入缓冲区的显示
*       2. 显示可输入键盘
*
*----------------------------------------------------------------------------*/
void Lcd_Desc_Input_Layout(byte mode, byte flag)
{
    BUTTON_DEF Disp_Btn;
    word Cmd;
    char *str;
    byte len;
    byte i;
    word j;

    //清空输入缓冲区的显示
    Lcd_Clr_Text_Btn(BUF_ID_TL_INPUT, 0);

    //显示可输入键盘
    for(i = 0; i < MAX_LAYOUT_KEY; i++)
    {
        Cmd = Desc_Input_KeyTab[i];
        if(Cmd == DS_CHAR)//字符按键
        {
            Disp_Btn.fill_color = GRAY;
            Disp_Btn.font_color = BLACK;
            memset(Disp_Btn.desc, 0x20, MAX_BTN_DESC_LEN);

            if(flag == 0)
                j = i;
            else
                j = i + (word)MAX_LAYOUT_KEY*(flag-1);
            
            if(code[j] == 0x20)
                memcpy(Disp_Btn.desc,Str_Space, strlen(Str_Space));
            else if(code[j] != 0xff)
                Disp_Btn.desc[0] = code[j];
            Disp_Btn.desc[MAX_BTN_DESC_LEN] = 0;
        }
        else if(Cmd == KD_SYMBOLE)
        {
            Disp_Btn.fill_color = Get_All_Key_Color(Cmd, 0);
            Disp_Btn.font_color = Get_All_Key_Color(Cmd, 1);
            memset(Disp_Btn.desc,0x20, MAX_BTN_DESC_LEN);
            if(flag >= 3)
                memcpy(Disp_Btn.desc, "NORMAL", 6);
            else
                memcpy(Disp_Btn.desc, "SYMBOL", 6);
        }
        else //控制按键, 
        {
            if(flag == 0)  //不是每次都需要画控制按键,只在第一次画键盘布局时才画
            {
                if(mode == 0)
                {
                    if(Cmd == KD_LARGE_FONT)
                        Cmd = KD_NULL;
                }
                else if((mode == 2)&&(Cmd == DS_BTN))
                {
                    Lcd_Draw_Button(Input_Btn);
                    continue;
                }
                Disp_Btn.fill_color = Get_All_Key_Color(Cmd, 0);
                Disp_Btn.font_color = Get_All_Key_Color(Cmd, 1);
                Disp_Btn.desc[MAX_BTN_DESC_LEN] = Get_All_Key_Desc(Disp_Btn.desc,MAX_BTN_DESC_LEN, Cmd);
            }
            else
                continue;
        }
        Disp_Btn.posi = i;
        Disp_Btn.size = Desc_Input_Key_Size[i];
        Lcd_Draw_Button(Disp_Btn);
    }
}

byte Btn_Desc_Input(BUTTON_DEF *Btn)
{
    byte i;
    Input_Btn.size = 0x11;
    for(i = 0; i < MAX_LAYOUT_KEY; i++)
    {
        if(Desc_Input_KeyTab[i] == DS_BTN)
            break;
    }
    if(i >= MAX_LAYOUT_KEY)
        return NG;
    Input_Btn.posi = i;
    Input_Btn.fill_color = Btn->fill_color;
    Input_Btn.font_color = Btn->font_color;
    memcpy(Input_Btn.desc, Btn->desc, MAX_BTN_DESC_LEN+1);
    memset(Btn->desc, 0x20, MAX_BTN_DESC_LEN+1);
    
    return Get_Desc(Btn->desc, MAX_BTN_DESC_LEN+1, 2);
}

byte Check_Key(byte code, byte flag)
{
    if(flag == RIGHT)
    {
        if(code%10 >= 4)
            return (code/10)*6 + (code%10 - 4);
    }
    else //if(flag == LEFT)
    {
        if(code%10 < 4)
            return (code/10)*4 + (code%10);
    }
    return 0xff;
}

/*----------------------------------------------------------------------------*
*   功能: 输入一个描述符, 将输入的字符串放入desc_str[]中.
*   输入参数:
*       *desc_str: 保存最后确定的输入字符串

⌨️ 快捷键说明

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