📄 descinput.c
字号:
///////////////////////////////////////////////////////////////////////////////
// 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 + -