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

📄 pinyinapp.c

📁 电子秤部分源码 功能:键盘输入英文
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 
File:  PinyinApp.c
Func:  PinyinApp
Auth:  Yingchen.Xie
Date:  2008-10-23
*/

#include "util/PinyinApp.h"
#include "util/plu.h"
#include "kernel/socket.h"
#if PINYIN

/* the English char that want to be displayed */
UINT8 InputEnglish = 0;
UINT8 InputMode = 0;       // 0->Chinese      1->English     2->Number
/* display the current mode */
UINT8 DisMode[3] = {0};
/* key interrupt flag */
extern UINT8 key_int_flag;					
/* key value */
extern UINT16 Vkey;
/* the buffer of the input letters */						
UINT8 input_string[10] = {0};			  
/* letters index */
UINT8 input_index = 0;        
/* the buffer of the Chinese characters which are stored in characters library */
UINT8 chinese_string[255] = {0};	

UINT8 SelectNum[9] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};		
/* roll row */
UINT8 roll_row = 0;          
/* number index */
UINT8 num_index = 0;			
/* the buffer of the Chinese characters which will be printing on the last row */
UINT8 print_string[6][19] = {0};	
/* the buffer of the selected Chinese characters */
UINT8 need_string[21] = {0};					  
/* the selected Chinese characters index*/
UINT8 need_index = 0;							  
/* use to turnover the page */
UINT8 *page_str = chinese_string;	
/* use to choose the different letters on the same key */
UINT8 F_value9 = 0;		
UINT8 F_value8 = 0;
UINT8 F_value7 = 0;
UINT8 F_value6 = 0;
UINT8 F_value5 = 0;
UINT8 F_value4 = 0;
UINT8 F_value3 = 0;
UINT8 F_value2 = 0;

/* use to judge if press the shift key or not */
UINT8 F_shift = 0;			

extern INT8 dispersion;

/**
*	left key parse
*/
void key_left(UINT8 value)
{
	UINT8 EBalanceBuf = 0x18, i = 0, disp_buf[33] = {0} ;
	
	switch(value)
	{
		case 0x00:
			trayAdjust = 1;
			break;
		case 0x02:
			adjustFlag = 1;
			break;
		case 0x03:
			Tgm_buf[0] = 0x18;				 //串口向Printer发命令
			gm_SendData2();
			break;
		case 0x04:
			TestPluAPP();
			break;
		case 0x05:
			send(SOCKET_PRINTER, &EBalanceBuf, 1);		
			break;
		case 0x06:									   //set time
			SetTimeFlag = 1;		
			break;	  
		case 0x07:									   //show time	
			TimeShowFlag = TimeShowFlag?0:1;
			pcfLcd__Disp(0, 0x00, disp_buf, 33);
			if(!TimeShowFlag)
			{
				showW();								 //show weight
			  	LcdDisPlu(1); 						//show plu
			}		
			break;
	}
}

/**
* 	copy string to output buffer
*/
void CopyString(UINT8 *str)
{
	UINT8 len = strlen(str);
	UINT8 n = 0;
	memset(print_string[0],0,19);
	memset(print_string[1],0,19);
	memset(print_string[2],0,19);
	memset(print_string[3],0,19);
	memset(print_string[4],0,19);
	memset(print_string[5],0,19);
	for (n = 0; n < 6; n++)
	{
		memcpy(print_string[n], str, 18);
		str += 18;	
	}
}

/**
*	right key parse 
*/
void key_right(UINT8 value)
{
	static UINT8 CharPos = 0;
	static UINT8 CharRow = 0;
	switch (value)
	{
		case 0x19:
		    F_shift = (F_shift)?0:1;
			break;
		case 0x0D:
			if(!F_shift)
			{
				if (InputMode == 0)
				{
					InputMode = 1;
					strcpy(DisMode, "英");
				}
				else if(InputMode == 1)
				{
					InputMode = 2;
					strcpy(DisMode, "数");
				}
				else if(InputMode == 2)
				{
					InputMode = 0;
					strcpy(DisMode, "中");
				}
			}
			else
			{
				if(InputMode == 1)
					need_string[need_index++] = InputEnglish;
				F_value9 = 0;
				F_value7 = 0;
				F_value6 = 0;
				F_value5 = 0;
				F_value4 = 0;
				F_value8 = 0;
				F_value2 = 0;
				F_value3 = 0;
				input_index = 0;
				memset(input_string,0,10);
			}
			break;
		case 0x21:
			if (F_shift)
			{
			    CharRow--;			   //up
				if(CharRow < 0) 
				{
					CharRow = 0;
				}
			}
			break;
		case 0x29:
			if (F_shift)
			{
			    CharRow++;			   //down
				if(CharRow > 5) 
				{
					CharRow = 0;
				}
			}
			break;
		case 0x30:
			if (F_shift)
			{
			    CharPos--;			   //left
				if(CharPos < 0) CharPos = 0;
			}
			break;
		case 0x31:
			if (F_shift)
			{
			    CharPos++;			  //right
				break;
			}
		case 0x1a:						      //7  
			/* judge mode */
			if (F_shift)
			{
				CharRow = 0;
				/* spell mode */
				switch (F_value7)
				{
					case 4:												//重复按键时循环显示字母
						input_index--;
						input_string[input_index] = 'p';
						InputEnglish = 'p';
						input_index++;
						F_value7 = 0;
						break;
					case 0:
						input_string[input_index] = 'p';
						InputEnglish = 'p';
						input_index++;
						break;	
					case 1:
						input_index--;
						input_string[input_index] = 'q';
						InputEnglish = 'q';
						input_index++;
						break;
					case 2:
						input_index--;
						input_string[input_index] = 'r';
						InputEnglish = 'r';
						input_index++;
						break;
					case 3:
						input_index--;
						input_string[input_index] = 's';
						InputEnglish = 's';
						input_index++;
						break;
					default:
						;					
				}
				F_value7++;										
			}
			else
			{
				
				if(InputMode == 0)
				{	
					/* number mode */
					num_index = 7;	 

					/* input the Chinese character into the corresponding buffer by the value of the key press */
					if(strlen(chinese_string) != 0)
					{
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2];
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2+1];
					} 	 
					/* at the end of a operation,reinitialize the corresponding buffers and flags */
					memset(print_string,0,19);
					memset(chinese_string,0,255);
					memset(input_string,0,10);
					CharRow = 0;
					input_index = 0;
					F_value7 = 0;
				}
				else if(InputMode == 2)
				{
					need_string[need_index++] = '7';	
				}				
			}
			/* clean key flag*/
			F_value8 = 0;
			F_value9 = 0;
			F_value6 = 0;
			F_value5 = 0;
			F_value4 = 0;
			F_value3 = 0;
			F_value2 = 0;
			break;
		case 0x1b:						      //8
			if (F_shift)
			{
				CharRow = 0;
				switch (F_value8)								   

				{
					case 3:
						input_index--;
						input_string[input_index] = 't';
						InputEnglish = 't';
						input_index++;
						F_value8 = 0;
						break;
					case 0:
						input_string[input_index] = 't';
						InputEnglish = 't';
						input_index++;
						break;	
					case 1:
						input_index--;
						input_string[input_index] = 'u';
						InputEnglish = 'u';
						input_index++;
						break;
					case 2:
						input_index--;
						input_string[input_index] = 'v';
						InputEnglish = 'v';
						input_index++;
						break;
					default:
						;					
				}
				F_value8++;
						
			}
			else
			{
				if(InputMode == 0)
				{
					num_index = 8;
					if(strlen(chinese_string) != 0)
					{
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2];
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2+1];
					}
					memset(print_string,0,19);
					memset(chinese_string,0,255);
					memset(input_string,0,10);
					CharRow = 0;
					input_index = 0;
					F_value8 = 0;
				}
				else if(InputMode == 2)
				{
					need_string[need_index++] = '8';	
				}
			}
			F_value7 = 0;
			F_value9 = 0;
			F_value6 = 0;
			F_value5 = 0;
			F_value4 = 0;
			F_value3 = 0;
			F_value2 = 0;
			break;
		case 0x1c:							  //9
			if (F_shift)
			{
				CharRow = 0;
				switch (F_value9)
				{
					case 4:
						input_index--;
						input_string[input_index] = 'w';
						InputEnglish = 'w';
						input_index++;
						F_value9 = 0;
						break;
					case 0:
						input_string[input_index] = 'w';
						InputEnglish = 'w';
						input_index++;
						break;	
					case 1:
						input_index--;
						input_string[input_index] = 'x';
						InputEnglish = 'x';
						input_index++;
						break;
					case 2:
						input_index--;
						input_string[input_index] = 'y';
						InputEnglish = 'y';
						input_index++;
						break;
					case 3:
						input_index--;
						input_string[input_index] = 'z';
						InputEnglish = 'z';
						input_index++;
						break;
					default:
						;					
				}
				F_value9++;
				
			}
			else
			{
				if(InputMode == 0)
				{
					num_index = 9;
					if(strlen(chinese_string) != 0)
					{
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2];
						need_string[need_index++] = print_string[CharRow][(num_index-1)*2+1];
					}
					memset(print_string,0,19);
					memset(chinese_string,0,255);
					memset(input_string,0,10);
					CharRow = 0;
					input_index = 0;
					F_value9 = 0;
				}
				else if(InputMode == 2)
				{
					need_string[need_index++] = '9';	
				}
			}
			F_value8 = 0;
			F_value7 = 0;
			F_value6 = 0;
			F_value5 = 0;
			F_value4 = 0;
			F_value3 = 0;
			F_value2 = 0;
			break;							
		case 0x22:						      //4
			if (F_shift)
			{
				CharRow = 0;
				switch (F_value4)
				{
					case 3:
						input_index--;
						input_string[input_index] = 'g';
						InputEnglish = 'g';
						input_index++;
						F_value4 = 0;
						break;
					case 0:
						input_string[input_index] = 'g';
						InputEnglish = 'g';
						input_index++;
						break;	
					case 1:
						input_index--;
						input_string[input_index] = 'h';
						InputEnglish = 'h';
						input_index++;
						break;
					case 2:
						input_index--;
						input_string[input_index] = 'i';
						InputEnglish = 'i';
						input_index++;
						break;
					default:
						;					
				}
				F_value4++;

⌨️ 快捷键说明

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