Lost !

-----hard working for the furture.

导航

统计

lcd 菜单

lcd.h

查看代码
 #ifndef __LCD_H
#define __LCD_H 

#include "sys.h"
#include "stdlib.h"

#define LCD_Data_Addr    ((uint32_t)0x60020000)   //FSMC写数据地址 
#define LCD_Reg_Addr     ((uint32_t)0x60000000)		//FSMC写寄存器地址

#define LCD_WrDat(dat) LCD_WriteRAM(dat);
#define LCD_WrCom(com) LCD_WriteCmd(com);
//横屏显示宏开关
#define hengping 

//定义LCD的尺寸
#define LCD_W 320
#define LCD_H 240

//-----------------LCD端口定义---------------- 
#define	LCD_LED PCout(8) 	//LCD背光
#define LCD_REST PCout(9)	//复位

#define LCD_LIGHT_ON	LCD_LED = 1;//点亮背光
#define LCD_LIGHT_OFF	LCD_LED = 0;//点亮背光

#define	LCD_CS_SET  	GPIOD->BSRR=1<<7    //片选端口 
// #define	LCD_RS_SET	GPIOC->BSRR=1<<8    //数据/命令 
// #define	LCD_WR_SET	GPIOC->BSRR=1<<7    //写数据
#define	LCD_RD_SET	GPIOD->BSRR=1<<4    //读数据	
 
//////////////////////////////////////////////////////////////////////
//画笔颜色
#define WHITE         	 0xFFFF
#define White         	 0xFFFF

#define BLACK         	 0x0000

#define BLUE         	   0x001F  
#define Blue         	   0x001F 

#define BRED             0XF81F
#define GRED 		         0XFFE0
#define GBLUE		         0X07FF

#define RED           	 0xF800
#define Red           	 0xF800

#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 		       0XBC40 //棕色
#define BRRED 		       0XFC07 //棕红色
#define GRAY  		       0X8430 //灰色
//GUI颜色

#define DARKBLUE      	 0X01CF	//深蓝色
#define LIGHTBLUE      	 0X7D7C	//浅蓝色  
#define GRAYBLUE       	 0X5458 //灰蓝色
//以上三色为PANEL的颜色 
 
#define LIGHTGREEN     	 0X841F //浅绿色
#define LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
#define LIGHTGRAY1       0XEFFF //浅灰色(PANNEL)
#define LIGHTGRAY2       0XFEEE //浅灰色(PANNEL)


#define LGRAY 		 			 0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)

/*******************reg define***********************************/
#define RAM_Prepare 0x002c


void LCD_GPIOConfig(void);
void FSMC_LCD_Init(void);
void LCD_WriteRAM(unsigned int val);
void LCD_WriteCmd(unsigned int index);
void LCD_WriteReg(unsigned int LCD_Reg, unsigned int LCD_RegValue);
void LCD_WriteRAM_Prepare(void);
void LCD_Init(void);
void LCD_SetCursor(u16 Xpos, u16 Ypos);
void LCD_Set_Window(u16 x1,u16 y1,u16 x2,u16 y2);
void LCD_Clear(u16 Color);
void LCD_DrawPoint(unsigned short Xpos,unsigned short Ypos,unsigned short RGB_Code);
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 RGB_Code);
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 RGB_Code);
void LCD_Color_FillColor(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color);
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 RGB_Code);
u16 WriteOneASCII(u8 *pucMsk,u16 x0,u16 y0,u16 color,u16 back_color);

void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len, u16 color, u16 back_color);


u16 WriteOneHzChar(u8 *pucMsk, u16 x0,u16 y0,u16 color,u16 back_color);

void LCD_ShowString(u16 x0, u16 y0,u8 *pcStr, u16 color,u16 back_color);



void Battery_Status(u8 voltage);
void Battery_Charging(u8 model);

/* 显示更新 */
void LCD_Update_Display(void);

//显示 时钟 跟 电池电量
void LCD_Start(void);

//初始化 主页面布局
void LCD_Main_Page(void);

/* 显示主界面 */
u8 LCD_Page1(void);

/* 管理员登录界面 */
u8 LCD_Page2(void);

#endif

lcd.c

查看代码
 #include "main.h"
#include "Font_Lib.h"	 	//字库文件库
#include "123.h"	 			//字库文件库

	//关机检测标志
	u8 guanbi = 0;

/*****************************************************************************
** 函数名称:LCD_GPIOConfig
** 功能描述: LCD GPIO初始化
**参数:无
*****************************************************************************/
void LCD_GPIOConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE); 
						 
/*********************GPIO For the LCD_Bus=***********************/	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

/************************************************************	
 *	PC9 -> LCD_RESET
 *	PC8 -> Light
 *	PD4	-> RD	,	PD5	-> WR 
 *	PD7	-> CS	,	PD11 -> RS 
 **********************************************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP; 	 
  GPIO_Init(GPIOD, &GPIO_InitStructure); 

}

/*****************************************************************************
** 函数名称:FSMC_LCD_Init
** 功能描述: LCD FSMC初始化
**参数:无
*****************************************************************************/
void FSMC_LCD_Init(void)
{
	FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
	FSMC_NORSRAMTimingInitTypeDef  FSMC_TimingInitStructure;
	/* Enable the FSMC Clock */
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);  

  FSMC_TimingInitStructure.FSMC_AddressSetupTime = 0x02;
  FSMC_TimingInitStructure.FSMC_AddressHoldTime = 0x00;
  FSMC_TimingInitStructure.FSMC_DataSetupTime = 0x05;
  FSMC_TimingInitStructure.FSMC_BusTurnAroundDuration = 0x00;
  FSMC_TimingInitStructure.FSMC_CLKDivision = 0x00;
  FSMC_TimingInitStructure.FSMC_DataLatency = 0x00;
  FSMC_TimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;	//  存储器写使能
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;		// 读写使用不同的时序
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_TimingInitStructure;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_TimingInitStructure;	  

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //	初始化FSMC配置
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); //	使能BANK1 
}


/*****************************************************************************
** 函数名称:LCD_WriteRAM
** 功能描述: 写数据到GRAM
**参数:val
*****************************************************************************/
void LCD_WriteRAM(unsigned int val)
{
	*(volatile uint16_t *)(LCD_Data_Addr) = val;
}
/*****************************************************************************
** 函数名称:LCD_WriteCmd
** 功能描述: 写索引寄存器
**参数:index
*****************************************************************************/
void LCD_WriteCmd(unsigned int index)
{
	*(volatile uint16_t *)(LCD_Reg_Addr) = index;
}

/*****************************************************************************
** 函数名称:LCD_WriteReg
** 功能描述: 给指定寄存器写值
**参数:LCD_Reg,LCD_RegValue
*****************************************************************************/
void LCD_WriteReg(unsigned int LCD_Reg, unsigned int LCD_RegValue)
{
	*(volatile uint16_t *) (LCD_Reg_Addr) = LCD_Reg;
	*(volatile uint16_t *) (LCD_Data_Addr) = LCD_RegValue;
}
/*****************************************************************************
** 函数名称:LCD_WriteRAM_Prepare
** 功能描述: 写数据准备
**参数:无
*****************************************************************************/
void LCD_WriteRAM_Prepare(void)   
{
	LCD_WrCom(0x002c);
}
/*****************************************************************************
** 函数名称:LCD_SetCursor
** 功能描述: 设定坐标点
**参数:Xpos,Ypos
*****************************************************************************/
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
	LCD_WriteCmd(0x002A);
	LCD_WriteRAM(Xpos>>8);
	LCD_WriteRAM(Xpos);
	LCD_WriteCmd(0x002B);
	LCD_WriteRAM(Ypos>>8);
	LCD_WriteRAM(Ypos);
}
/*****************************************************************************
** 函数名称:LCD_Set_Window
** 功能描述: 设定窗口
**参数:X1,y1,x2,y2
*****************************************************************************/
void LCD_Set_Window(u16 x1,u16 y1,u16 x2,u16 y2)
{

	LCD_WriteCmd(0x002A);
	LCD_WriteRAM(x1>>8);//X开始地址
	LCD_WriteRAM(x1);
	LCD_WriteRAM(x2>>8);//X结束地址
	LCD_WriteRAM(x2);//X结束地址

  LCD_WriteCmd(0x002B);
	LCD_WriteRAM(y1>>8);//Y开始地址
	LCD_WriteRAM(y1);
	LCD_WriteRAM(y2>>8);//Y结束地址
	LCD_WriteRAM(y2);
}


/*******************************************************************************
//画点
//x:0~239
//y:0~399
//RGB_Code:此点的颜色
*******************************************************************************/
void LCD_DrawPoint(unsigned short Xpos,unsigned short Ypos,unsigned short RGB_Code)
{
  LCD_SetCursor(Xpos,Ypos);
	///LCD_WriteReg(0x002c,RGB_Code);	
	LCD_WriteRAM_Prepare();//写RAM准备
  LCD_WriteRAM(RGB_Code);//设置颜色
}
/*******************************************************************************
//画线
//x1,y1:起点坐标
//x2,y2:终点坐标 
*******************************************************************************/
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u16 RGB_Code)
{
	u16 t; 
	int xerr=0,yerr=0,delta_x,delta_y,distance; 
	int incx,incy,uRow,uCol; 

	delta_x=x2-x1; //计算坐标增量 
	delta_y=y2-y1; 
	uRow=x1; 
	uCol=y1; 
	if(delta_x>0)incx=1; //设置单步方向 
	else if(delta_x==0)incx=0;//垂直线 
	else {incx=-1;delta_x=-delta_x;} 
	if(delta_y>0)incy=1; 
	else if(delta_y==0)incy=0;//水平线 
	else{incy=-1;delta_y=-delta_y;} 
	if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 
	else distance=delta_y; 
	for(t=0;t<=distance+1;t++ )//画线输出 
	{  
		LCD_DrawPoint(uRow,uCol,RGB_Code);//画点 
		xerr+=delta_x ; 
		yerr+=delta_y ; 
		if(xerr>distance) 
		{ 
			xerr-=distance; 
			uRow+=incx; 
		} 
		if(yerr>distance) 
		{ 
			yerr-=distance; 
			uCol+=incy; 
		} 
	}  
}    

/*****************************************************************************
** 函数名称: Draw_Circle
** 功能描述: 在指定位置画一个指定大小的圆
//(x,y):中心点
//r    :半径
*****************************************************************************/
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 RGB_Code)
{
	int a,b;
	int di;
	a=0;b=r;	  
	di=3-(r<<1);             //判断下个点位置的标志
	while(a<=b)
		{
			LCD_DrawPoint(x0-b,y0-a,RGB_Code);             //3           
			LCD_DrawPoint(x0+b,y0-a,RGB_Code);             //0           
			LCD_DrawPoint(x0-a,y0+b,RGB_Code);             //1       
			LCD_DrawPoint(x0-b,y0-a,RGB_Code);             //7           
			LCD_DrawPoint(x0-a,y0-b,RGB_Code);             //2             
			LCD_DrawPoint(x0+b,y0+a,RGB_Code);             //4               
			LCD_DrawPoint(x0+a,y0-b,RGB_Code);             //5
			LCD_DrawPoint(x0+a,y0+b,RGB_Code);             //6 
			LCD_DrawPoint(x0-b,y0+a,RGB_Code);             
			a++;
			//使用Bresenham算法画圆     
			if(di<0)di +=4*a+6;	  
			else
				{
					di+=10+4*(a-b);   
					b--;
				} 
			LCD_DrawPoint(x0+a,y0+b,RGB_Code);
		}
} 
/*****************************************************************************
** 函数名称: LCD_DrawRectangle
** 功能描述: 画矩形
*****************************************************************************/

void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 RGB_Code)
{
	LCD_DrawLine(x1,y1,x2,y1,RGB_Code);
	LCD_DrawLine(x1,y1,x1,y2,RGB_Code);
	LCD_DrawLine(x1,y2,x2,y2,RGB_Code);
	LCD_DrawLine(x2,y1,x2,y2,RGB_Code);
}

//在指定区域内填充指定颜色块			 
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
//color:要填充的颜色
void LCD_Color_FillColor(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{  
	u16 i,t;
	
	t = (ex-sx+1)*(ey-sy+1);
	LCD_Set_Window(sx,sy,ex,ey);
	LCD_WriteRAM_Prepare();     //开始写入GRAM
	for(i=0;i<t;i++)
		{
			LCD_WriteRAM(color);//写入数据 
		}
}  


//在指定区域内填充指定颜色块			 
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1)   
//color:要填充的颜色
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)
{  
	u16 i,t;
	
	t = (ex-sx+1)*(ey-sy+1);
	LCD_Set_Window(sx,sy,ex,ey);
	LCD_WriteRAM_Prepare();     //开始写入GRAM
	for(i=0;i<t;i++)
		{
			LCD_WriteRAM(color[i]);//写入数据 
		}
}  

/*****************************************************************************
** 函数名称: WriteOneASCII
** 功能描述: 显示一个指定大小的字符
*****************************************************************************/
u16 WriteOneASCII(u8 *pucMsk, u16 x0, u16 y0, u16 color, u16 back_color)
{
	u16 i,j;
	u16 y;
	u8 ucChar;

	y = y0;
	for(i=0; i<16; i++)  														// 16行 
		{                                 						// 16行 
			ucChar = *pucMsk++;
			#ifdef __DISPLAY_BUFFER                     // 使用显存显示
			for(j=0; j<8; j++)  												// 8列 
				{                             
					if((ucChar << j)& 0x80)                 // 显示字模 
						{
							DispBuf[240*(y0+i) + x0+j] = color;
						}
				}
			#else                                       // 直接显示
			LCD_Set_Window(x0,y,x0+16,y+16);          	// 设置写数据地址指针 
			LCD_WriteRAM_Prepare();        					  	// 开始写入GRAM
			for(j=0; j<8; j++) 													// 8列 
				{                     
					if((ucChar << j) & 0x80)								// 显示字模 
						{ 
							LCD_WriteRAM(color);
						} 
					else 
						{
							LCD_WriteRAM(back_color);
						}
				}
			y++;
			#endif
		}
	return (8); 
}

//*****************************************************************
//输入参数:m:乘数
//	        n:幂
//返回值:  m的n次方
//修改记录:无
//******************************************************************  
u32 mypow(u8 m,u8 n)
{
	u32 result=1;	 
	while(n--)result*=m;    
	return result;
}	 

//num:数据范围(0~4294967295);	 
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len, u16 color, u16 back_color)
{         	
	u8 t,temp;
	u8 enshow=0;						   
	for(t=0;t<len;t++)
	{
		temp=(num/mypow(10,len-t-1))%10;
		if(enshow==0&&t<(len-1))
		{
			if(temp==0)
			{
				WriteOneASCII((u8 *)&ASCII_1608[('0' - 0x20)][0],x + 8*t, y, color,back_color);
				continue;
			}else enshow=1;	 
		}
		WriteOneASCII((u8 *)&ASCII_1608[(temp + '0' - 0x20)][0],x + 8*t, y, color,back_color);
	}
} 

void WriteOneDigitalTube(u16 x0, u16 y0,u8 num, u16 color, u16 back_color)
{
	u16 i,j;
	LCD_Set_Window(x0,y0,x0+23,y0+34);          	// 设置写数据地址指针 
	LCD_WriteRAM_Prepare();        					  	// 开始写入GRAM
	for(i=0;i<105;i++) 												
		{
			for(j=0; j<8; j++)                           // 16列 
				{
					if(((DigitalTube[num][i] << j)&0x80) == 0x80)
						{
							if(((DigitalTube[8][i] << j)&0x80) == 0x80)
								{
									LCD_WriteRAM(back_color);
								}
							else
								{
									LCD_WriteRAM(0xF7BE);
								}
						}
					else
						{
							LCD_WriteRAM(color);
						}
				}
		}
}


//num:数据范围(0~4294967295);	 
void LCD_DigitalTubeNum(u16 x,u16 y,u32 num,u8 len, u16 color, u16 back_color)
{         	
	u8 t,temp;
	u8 enshow=0;						   
	for(t=0;t<len;t++)
		{
			temp=(num/mypow(10,len-t-1))%10;
			if(enshow==0&&t<(len-1))
				{
					if(temp==0)
						{
							WriteOneDigitalTube(x + 24*t,y,temp,color,back_color);
							continue;
						}else enshow=1;	 
				}
			WriteOneDigitalTube(x + 24*t,y,temp,color,back_color);
		}
} 


void LCD_DigitalTubePassNum(u16 x,u16 y,u32 num,u8 len, u16 color, u16 back_color)
{         	
	u8 t,temp;
	u8 enshow=0;						   
	for(t=0;t<len;t++)
		{
			temp=(num/mypow(10,len-t-1))%10;
			if(enshow==0&&t<(len-1))
				{
					if(temp==0)
						{
							WriteOneDigitalTube(x + 24*t,y,10,color,back_color);
							continue;
						}else enshow=1;	 
				}
			WriteOneDigitalTube(x + 24*t,y,10,color,back_color);
		}
} 


/*****************************************************************************
** 函数名称: WriteOneHzChar
** 功能描述: 显示一个指定大小的汉字
*****************************************************************************/
u16 WriteOneHzChar(u8 *pucMsk, u16 x0, u16 y0, u16 color, u16 back_color)
{
	u16 i,j;
	u16 mod[16];                                    	// 当前字模    
	u16 *pusMsk;                                      // 当前字库地址 
	u16 y;

	pusMsk = (u16 *)pucMsk;
	for(i=0; i<16; i++)                               // 保存当前汉字点阵式字模 
		{
			mod[i] = *pusMsk++;                           // 取得当前字模,半字对齐访问
			mod[i] = ((mod[i] & 0xff00) >> 8) | ((mod[i] & 0x00ff) << 8); // 字模交换高低字节 为了显示需要 
		}
	y = y0;
	for(i=0; i<16; i++)                               // 16行 
		{ 
			#ifdef __DISPLAY_BUFFER                       // 使用显存显示
			for(j=0; j<16; j++)                           // 16列 
				{
				if((mod[i] << j)& 0x8000)                   // 显示字模  
					{
						DispBuf[240*(y0+i) + x0+j] = color;
					}
				}
			#else
			LCD_Set_Window(x0, y,x0+16,y+16);            // 设置写数据地址指针 
			LCD_WriteRAM_Prepare();        					   	 // 开始写入GRAM
			for(j=0; j<16; j++)                          // 16列 
				{
					if((mod[i] << j) & 0x8000)               // 显示字模 
						{ 
							LCD_WriteRAM(color);
						} 
					else 
						{
							LCD_WriteRAM(back_color);            // 用读方式跳过写空白点的像素
						}
				}
			y++;
			#endif
	}
	return (16);                                     // 返回16位列宽 
}


u16 findHzIndex(u8 *hz)                     /* 在自定义汉字库在查找所要显示 *//* 的汉字的位置 */
{
	u16 i=0;
	FNT_GB16 *ptGb16 = (FNT_GB16 *)GBHZ_16;
	while(ptGb16[i].Index[0] > 0x80) 
		{
			if ((*hz == ptGb16[i].Index[0]) && (*(hz+1) == ptGb16[i].Index[1])) 
				{
					return i;
				}
			i++;
			if(i > (u16)(sizeof((FNT_GB16 *)GBHZ_16) / sizeof(FNT_GB16) - 1))  /* 搜索下标约束 */
				{
					break;
				}
		}
	return 0;
}


/*****************************************************************************
** 函数名称: LCD_ShowString
** 功能描述: 在指定位置开始显示一个字符串和一串汉字
				支持自动换行
*****************************************************************************/   			   
void LCD_ShowString(u16 x0, u16 y0,u8 *pcStr, u16 color,u16 back_color)
{
	u16 usIndex;
	u16 usWidth = 0;
	FNT_GB16 *ptGb16 = 0;

	ptGb16 = (FNT_GB16 *)GBHZ_16;  
	while(1)
		{
			if(*pcStr == 0) 
				{
					break;                                     /* 字符串结束            */
				}      
			x0 = x0 + (usWidth);                           /* 调节字符串显示松紧度         */
			if(*pcStr > 0x80)                              /* 判断为汉字                   */
				{
					if((x0 + 16) > LCD_W)                      /* 检查剩余空间是否足够         */
						{
							x0 = 0;
							y0 = y0 + 16;                          /* 改变显示坐标                 */
							if(y0 > LCD_H)                         /* 纵坐标超出                   */
								{
									y0 = 0;
								}
						}
					usIndex = findHzIndex(pcStr);
					usWidth = WriteOneHzChar((u8 *)&(ptGb16[usIndex].Msk[0]), x0, y0, color,back_color) + 1;
					/* 显示字符  */
					pcStr += 2;
				}
			else 
				{                                           /* 判断为非汉字                 */
				if (*pcStr == '\r')                         /* 换行                         */
					{ 
						y0 = y0 + 16;                           /* 改变显示坐标                 */
						if(y0 > LCD_H)                          /* 纵坐标超出                   */
							{
								y0 = 0;
							}
						pcStr++;
						usWidth = 0;
						continue;
					} 
				else if (*pcStr == '\n')                    /* 对齐到起点                   */
					{
						x0 = 0;
						pcStr++;
						usWidth = 0;
						continue;
					} 
				else 
					{
						if((x0 + 8) > LCD_W)                     /* 检查剩余空间是否足够         */
							{
								x0 = 0;
								y0 = y0 + 16;                        /* 改变显示坐标                 */
								if(y0 > LCD_H)                       /* 纵坐标超出                   */
									{ 
										y0 = 0;
									}
							}
						usWidth = WriteOneASCII((u8 *)&ASCII_1608[(*pcStr - 0x20)][0], x0, y0, color,back_color);
						/* ASCII码表21H的值对应区位码3区*/
						pcStr += 1;
					}
			 }
		}												  	  
}
/*****************************************************************************
** 函数名称:LCD_Clear
** 功能描述: 清屏
**参数:Color
Made by Mleaf_HEXI
时间:2012 08 25
*****************************************************************************/

void LCD_Clear(u16 Color)                  
{	
	u32 index=0; 
	LCD_Set_Window(0,0,320,240);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(index=0;index<76800;index++)
		{
			LCD_WriteRAM(Color);
		}
}


/*****************************************************************************
** 函数名称: LCD_Init
** 功能描述: 初始化ILI9327
Made by mleaf_hx
*****************************************************************************/ 
void LCD_Init(void)
{
	FSMC_LCD_Init();
	LCD_GPIOConfig();

	LCD_REST=1;
	delay_ms(50);
	LCD_REST=0;
	delay_ms(10);
	LCD_REST=1;
	delay_ms(10);

	LCD_WrCom(0x00e9);
	LCD_WrDat(0x0020);     //Exit_invert_mode
	LCD_WrCom(0x0011);     //Exit_sleep_mode 
	delay_ms(100);

	LCD_WrCom(0x00d1);
	LCD_WrDat(0x0000);
	LCD_WrDat(0x0071);
	LCD_WrDat(0x0019);

	LCD_WrCom(0x00d0);
	LCD_WrDat(0x0007);
	LCD_WrDat(0x0001);
	LCD_WrDat(0x0008);

	LCD_WrCom(0x0036);  //Set_address_mode 显示方向
	LCD_WrDat(0x00E8);  //从上往下 从右向左 

	LCD_WrCom(0x003a);  //Set_pixel_format
	LCD_WrDat(0x0005);  //DBI 65K colors

	LCD_WrCom(0x00C1);
	LCD_WrDat(0x0010);
	LCD_WrDat(0x0010);
	LCD_WrDat(0x0002);
	LCD_WrDat(0x0002);

	LCD_WrCom(0x00C0);//Set Default Gamma
	LCD_WrDat(0x0000);
	LCD_WrDat(0x0035);
	LCD_WrDat(0x0000);
	LCD_WrDat(0x0000);
	LCD_WrDat(0x0001);
	LCD_WrDat(0x0002);

	LCD_WrCom(0x00C5); //Set frame rate
	LCD_WrDat(0x0004);

	LCD_WrCom(0x00D2); //power setting
	LCD_WrDat(0x0001);
	LCD_WrDat(0x0044);

	LCD_WrCom(0x00C8); //Set Gamma
	LCD_WrDat(0x0004);
	LCD_WrDat(0x0067);
	LCD_WrDat(0x0035);
	LCD_WrDat(0x0004);
	LCD_WrDat(0x0008);
	LCD_WrDat(0x0006);
	LCD_WrDat(0x0024);
	LCD_WrDat(0x0001);
	LCD_WrDat(0x0037);
	LCD_WrDat(0x0040);
	LCD_WrDat(0x0003);
	LCD_WrDat(0x0010);
	LCD_WrDat(0x0008);
	LCD_WrDat(0x0080);
	LCD_WrDat(0x0000);

	LCD_WrCom(0x002A);//Set_column_address
	LCD_WrDat(0x0000);                
	LCD_WrDat(0x0000); //x1 =   0
	LCD_WrDat(0x0000);
	LCD_WrDat(0x00ef); //x2 = 239

	LCD_WrCom(0x002b); //Set_page_address
	LCD_WrDat(0x0000);
	LCD_WrDat(0x0000); //y1 =   0
	LCD_WrDat(0x0001);
	LCD_WrDat(0x008f); //y2 = 399

	LCD_WrCom(0x0029); //display on
	LCD_WrCom(0x002C); //write_memory_start
	LCD_LIGHT_ON;//开启背光灯



	LCD_Clear(White);//清屏

}

/* 显示电池状态 */
void Battery_Status(u8 voltage)
{
	u16 i;

	if(voltage == 5)
		{
			/* 显示满格电源 */
			LCD_Set_Window(290,7,292,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(294,7,296,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(298,7,300,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(302,7,304,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(306,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
		}
	else if(voltage == 4)
		{
			/* 清空显示 */
			LCD_Set_Window(290,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<133;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
				
			/* 缺 1 格电 */
			LCD_Set_Window(290,7,292,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(294,7,296,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(298,7,300,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(302,7,304,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
		}
	else if(voltage == 3)
		{
			/* 清空显示 */
			LCD_Set_Window(290,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<133;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
				
			/* 缺 1 格电 */
			LCD_Set_Window(290,7,292,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(294,7,296,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(298,7,300,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
		}
	else if(voltage == 2)
		{
			/* 清空显示 */
			LCD_Set_Window(290,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<133;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
				
			/* 缺 1 格电 */
			LCD_Set_Window(290,7,292,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
			LCD_Set_Window(294,7,296,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
		}
	else if(voltage == 1)
		{
			/* 清空显示 */
			LCD_Set_Window(290,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<133;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
				
			/* 缺 1 格电 */
			LCD_Set_Window(290,7,292,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<21;i++)
				{
					LCD_WriteRAM(0x0000);
				}
		}
	else
		{
			/* 空格电源 */
			LCD_Set_Window(290,7,308,13);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<133;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
		}
}

/* 显示充电状态 */
void Battery_Charging(u8 model)
{
	u8 i;
	if(model == 1)
		{
			//显示空电池状态
			LCD_Set_Window(278,6,282,14);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<45;i++)
				{
					LCD_WriteRAM((BatteryCharging[2*i]<<8) + BatteryCharging[2*i + 1]);
				}
		}
	else
		{
			//显示空电池状态
			LCD_Set_Window(278,6,282,14);
			LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
			for(i=0;i<45;i++)
				{
					LCD_WriteRAM(0xFFFF);
				}
		}
}

//显示箭头
void Arrow_According(u16 x,u16 y,u8 Arrowbit, u16 color,u16 back_color)
{
	u8 i,j;
	LCD_Set_Window(x,y,x+15,y+14);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(i=0;i<30;i++)
		{
			for(j=0;j<8;j++)
				{
					if(Arrowbit == 0)
						{
							LCD_WriteRAM(back_color);
						}
					else
						{
							if((ArrowBuff[i] << j) & 0x80)								// 显示字模 
								{
									LCD_WriteRAM(color);
								} 
							else 
								{
									LCD_WriteRAM(back_color);
								}
						}
				}
		}
}


/* 显示更新 */
void LCD_Update_Display(void)
{
	//更新时间
	if(LCD.UpdateTimeBit == 1)
		{
			LCD.UpdateTimeBit = 0;
			//更新时间
			LCD_DisplayTime(0);
		}
	//更新电池状态
	if(LCD.UpdateVolBit == 1)
		{
			LCD.UpdateVolBit = 0;
			//更新电池状态
			Get_ADC_POWER();
		}
		
}

//显示 时钟 跟 电池电量
void LCD_Start(void)
{
	u8 i,j;
	//显示时间
	LCD_ShowString(100,3,(u8 *)"0000-00-00 00:00",BLACK,White);
	
	//显示空电池状态
	LCD_Set_Window(288,5,319,15);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(i=0;i<44;i++)
		{
			for(j=0;j<8;j++)
				{
					if((BatteryEmpty[i] << j) & 0x80)								// 显示字模 
						{ 
							LCD_WriteRAM(0xFFFF);
						} 
					else 
						{
							LCD_WriteRAM(0x0000);
						}
				}
		}
}

//初始化 主页面布局
void LCD_Main_Page(void)
{
	u32 y;
	u8 ch[8];
	//清除编号缓存
	LCD_ShowString(10,3,(u8 *)"   ",Red,White);
	
	/* 强制显示 时钟 */
	LCD_DisplayTime(1);
	
	//刷新 电池 显示电池状态	
	LCD.UpdateVolNum = 0;
	Get_ADC_POWER();
		
	//清除缓存显示
	LCD_Set_Window(0,20,319,239);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(y=0;y<70400;y++)
		{
			LCD_WriteRAM(0xFFFF);	
		}
	
	//显示 图标
	LCD_Set_Window(13,55,140,177);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(y=0;y<15744;y++)
		{
			LCD_WriteRAM((gImage_123[y*2]<<8)+gImage_123[y*2 + 1]);	
		}

	//收银员
	LCD_ShowString(155,45,(u8 *)"收银员",BROWN,White);
	LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
	//默认用户名
	LCD_DigitalTubeNum(155+24*3,70,0,3,BLACK,0xFFFF);
	//确认密码		
	LCD_ShowString(155,115,(u8 *)"口令字",BROWN,White);
	LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
	//提示箭头
	Arrow_According(300,150,1,BLACK,White);
		
	//显示登录
	LCD_ShowString(275,215,(u8 *)"登录",DARKBLUE,White);
		
	//显示当前 程序版本  	char *ch = "V_0.0.0";
	ch[0] = 'v';
	ch[1] = '_';
	ch[2] = (Work.Version/100 + 0x30);
	ch[3] = '.';
	ch[4] = ((Work.Version/10)%10 + 0x30);
	ch[5] = '.';
	ch[6] = (Work.Version%10 + 0x30);
	ch[7] = 0;
	LCD_ShowString(10,215,ch,DARKBLUE,White);

}

//切换 输入模式
void Arrow_Switch(void)
{

}


//简单关机流程 
void guanji(void)
{
	//循环判断 关机
	u8 time = 0;
	if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1) == 1)
		{
			if(guanbi == 1)
				{
					do
					{
						delay_ms(5);
						time++;
						if(time >= 100)
							{
								//关闭USB 
								GPIO_ResetBits(GPIOA,GPIO_Pin_8);
								//关电
								GPIO_ResetBits(GPIOE,GPIO_Pin_0);
							}
					}while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1) == 1);
				}
		}
	else
		{
			//放开开机键 
			guanbi = 1;
		}
}



/* 显示主界面 */
u8 LCD_Page1(void)
{
	u8 key = 0;

	//页面1 缓存
	u8 PageMode;						//页面默认步骤
	u8 CashierCache[3];			//收银员缓存
	u8 CashierLen;					//收银员输入长度
	u8 CashierNumber;				//收银员 进入次数
	u8 PasswordCache[6];		//口令字缓存	
	u8 PasswordLen;					//密码输入长度
	
	//赋收银员
	CashierNumber = 0;
	CashierLen = 3;
	CashierCache[0] = 0x30;
	CashierCache[1] = 0x30;
	CashierCache[2] = 0x30;
	//选择 口令字
	PageMode = 2;
	//赋口令字 初值
	PasswordLen = 0;
	PasswordCache[0] = 0;
	PasswordCache[1] = 0;
	PasswordCache[2] = 0;
	PasswordCache[3] = 0;
	PasswordCache[4] = 0;
	PasswordCache[5] = 0;

	//初始化主界面
	LCD_Main_Page();
	while(1)
		{
			
			//简单关机流程 
			guanji();
			
			/* 延时等待 */
			delay_ms(5);
			
			//工作模式
			if(Work.Dormancy == 0)
				{
					/* 显示更新 */
					LCD_Update_Display();
				}
			/* 读卡程序 */
			key = KEY_Scan(0);
			if(key)
				{
					//关闭休眠模式
					Work.Dormancy  = 0;
					
					switch(key)
						{				 
							case 1:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x31;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x31;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x31;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x31;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x31;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x31;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();

												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 2:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x32;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x32;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x31;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x32;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x32;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x32;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 3:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x33;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x33;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x33;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x33;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x33;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x33;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 4:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x34;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x34;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x34;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x34;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x34;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x34;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 5:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x35;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x35;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x35;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x35;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x35;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x35;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 6:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x36;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x36;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x36;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x36;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x36;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x36;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
														return 6;
													}
											}
									}
								break;
							case 7:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x37;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x37;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x37;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x37;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x37;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x37;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;	
							case 8:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x38;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x38;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x38;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x38;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x38;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x38;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 9:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x39;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x39;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x39;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x39;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x39;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x39;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 11:
								if(PageMode == 1)
									{
										//输入收银员 编号
										if(CashierLen == 2)
											{
												CashierLen = 3;
												
												//选择 口令字
												PageMode = 2;
												//显示 输入值
												CashierCache[2] = 0x30;
												LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
												//清除 口令字提示箭头
												Arrow_According(300,150,1,BLACK,White);
												//显示 选择收银员
												Arrow_According(300,80,0,BLACK,White);
												//切换按键
												BEEP_1kHZ();
											}
										else if(CashierLen >= 3)
											{
												/* 第一次超过三个字节 重新输入 */
												if(CashierNumber == 0)
													{
														CashierCache[0] = 0x30;
														CashierCache[1] = 0;
														CashierCache[2] = 0;
														CashierLen = 1;
														CashierNumber = 1;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(6-CashierLen),70,CashierCache[0]-0x30,CashierLen,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else
													{
														//选择 口令字
														PageMode = 2;
														//显示 输入值
														CashierCache[2] = 0x30;
														LCD_DigitalTubeNum(155+24*(3),70,(CashierCache[0] - 0x30)*100 + (CashierCache[1] - 0x30)*10 + (CashierCache[2]- 0x30),3,BLACK,0xFFFF);
														//清除 口令字提示箭头
														Arrow_According(300,150,1,BLACK,White);
														//显示 选择收银员
														Arrow_According(300,80,0,BLACK,White);
														//切换按键
														BEEP_1kHZ();
													}
											}
										else
											{
												if(CashierLen == 0)
													{
														CashierLen	= 1;
														CashierCache[0] = 0x30;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
												else if(CashierLen == 1)
													{
														CashierLen	= 2;
														CashierCache[1] = 0x30;
														LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + (CashierCache[1]- 0x30),2,BLACK,0xFFFF);
														//切换按键
														BEEP_1kHZ();
													}
											}
									}
								else if(PageMode == 2)
									{
										//口令字 输入
										if(PasswordLen == 0)
											{
												PasswordLen = 1;
												PasswordCache[0] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0] - 0x30),PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 1)
											{
												PasswordLen = 2;
												PasswordCache[1] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10 + PasswordCache[1]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 2)
											{
												PasswordLen = 3;
												PasswordCache[2] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100 + (PasswordCache[1]-0x30)*10 + PasswordCache[2]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 3)
											{
												PasswordLen = 4;
												PasswordCache[3] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*1000 + (PasswordCache[1]-0x30)*100 + (PasswordCache[2]-0x30)*10 + PasswordCache[3]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 4)
											{
												PasswordLen = 5;
												PasswordCache[4] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*10000 + (PasswordCache[1]-0x30)*1000 + (PasswordCache[2]-0x30)*100 + (PasswordCache[3]-0x30)*10 + PasswordCache[4]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
											}
										else if(PasswordLen == 5)
											{
												PasswordLen = 6;
												PasswordCache[5] = 0x30;
												LCD_DigitalTubePassNum(155 + 24*(6-PasswordLen) ,140,(PasswordCache[0]-0x30)*100000 + (PasswordCache[1]-0x30)*10000 + (PasswordCache[2]-0x30)*1000 + (PasswordCache[3]-0x30)*100 + (PasswordCache[4]-0x30)*10 + PasswordCache[5]-0x30,PasswordLen,BLACK,0xFFFF);
												//切换按键
												BEEP_1kHZ();
												//判断登录是否正确
												Work.CashierEmployee[0] = CashierCache[0];
												Work.CashierEmployee[1] = CashierCache[1];
												Work.CashierEmployee[2] = CashierCache[2];
												if((PasswordCache[0] == '1')&&(PasswordCache[1] == '2')&&(PasswordCache[2] == '3')&&(PasswordCache[3] == '4')&&(PasswordCache[4] == '5')&&(PasswordCache[5] == '6'))
													{
														LCD_Page2();
													}
											}
									}
								break;
							case 13: // 升级 按键
									  mf_scan_files((u8 *)"0:",Work.Version);								//搜索Bin文件
							
							
							
										
								break;
							case 18: //直接清除
									if(PageMode == 1)
										{
											LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
											CashierLen = 0;
											BEEP_1kHZ();
										}
									else
										{
											LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
											PasswordLen = 0;
											BEEP_1kHZ();
										}
								break;
							case 19: //清除最后一位
									if(PageMode == 1)
										{
											if(CashierLen >= 1)
												{
													if(CashierLen == 1)
														{
															LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
														}
													else if(CashierLen == 2)
														{
															LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubeNum(155+24*(5),70,(CashierCache[0]- 0x30),1,BLACK,0xFFFF);
														}
													else if(CashierLen == 3)
														{
															LCD_DigitalTubeNum(155,70,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubeNum(155+24*(4),70,(CashierCache[0] - 0x30)*10 + CashierCache[1] - 0x30,2,BLACK,0xFFFF);
														}
													//减少一位
													CashierLen = CashierLen - 1;
												}
											BEEP_1kHZ();
										}
									else
										{
											if(PasswordLen >= 1)
												{
													if(PasswordLen == 1)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
														}
													else if(PasswordLen == 2)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubePassNum(155+24*(5),140,(PasswordCache[0]- 0x30),1,BLACK,0xFFFF);
														}
													else if(PasswordLen == 3)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubePassNum(155+24*(4),140,(PasswordCache[0]- 0x30)*10 + PasswordCache[1]- 0x30,2,BLACK,0xFFFF);
														}
													else if(PasswordLen == 4)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubePassNum(155+24*(3),140,(PasswordCache[0]- 0x30)*100 + (PasswordCache[1]- 0x30)*10 + (PasswordCache[2]- 0x30),3,BLACK,0xFFFF);
														}
													else if(PasswordLen == 5)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubePassNum(155+24*(2),140,(PasswordCache[0]- 0x30)*1000 + (PasswordCache[1]- 0x30)*100 + (PasswordCache[2]- 0x30)*10 +(PasswordCache[3]- 0x30) ,4,BLACK,0xFFFF);
														}
													else if(PasswordLen == 6)
														{
															LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
															LCD_DigitalTubePassNum(155+24*(1),140,(PasswordCache[0]- 0x30)*10000 + (PasswordCache[1]- 0x30)*1000 + (PasswordCache[2]- 0x30)*100 +(PasswordCache[3]- 0x30)*10 + (PasswordCache[4]- 0x30) ,5,BLACK,0xFFFF);
														}
													//减少一位
													PasswordLen = PasswordLen - 1;
												}
											BEEP_1kHZ();
										}
								break;
							case 20:
								//切换 输入
								if(PageMode == 1)
									{
										if(CashierLen >= 3)
											{
													//选择 口令字
													PageMode = 2;

													//清除 口令字提示箭头
													Arrow_According(300,150,1,BLACK,White);
													//显示 选择收银员
													Arrow_According(300,80,0,BLACK,White);
													//提示声音
													BEEP_10kHZ();
											}
										else
											{
												//切换不成功
												BEEP_1kHZ();
											}
									}
								else
									{
										//选择 收银员
										PageMode = 1;
										//清空 口令字 长度
										PasswordLen = 0;
										//清空 口令字 缓存
										PasswordCache[0] = 0;
										PasswordCache[1] = 0;
										PasswordCache[2] = 0;
										PasswordCache[3] = 0;
										PasswordCache[4] = 0;
										PasswordCache[5] = 0;
										//打开可以循环输入
										CashierNumber = 0;
										//清空显示
										LCD_DigitalTubeNum(155,140,888888,6,0xF7BE,0xFFFF);
										//清除 口令字提示箭头
										Arrow_According(300,150,0,BLACK,White);
										//显示 选择收银员
										Arrow_According(300,80,1,BLACK,White);
										//提示声音
										BEEP_10kHZ();
									}
								break;
							default :BEEP_10kHZ();break;
						}
				}
		}
//	return 0;
}


/* 判断读 CPU 卡指令是否成功 */
u8 Cheak_90(u8 *buff,u8 len)
{
	u8 i;
	for(i=0;i<len;i++)
		{
			if(buff[i] == 0x90)return 1;
		}
	return 0;
}


/* 管理员登录界面 */
u8 LCD_Page2(void)
{
	u8 key;
	u32 i,t;
	u16 cha[2] = {0x0000,0xFFFF};
	//IC 卡  010700070108
	u8 Ikey[6]={0x01,0x07,0x00,0x07,0x01,0x08};
	//CPU 卡缓存
	u8 size;
	u8 Rand[6];
	u8 Cache[32];//缓存
	u8 CertificaKey[16]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};//外部认证秘钥
	u8 FilePassword[8] = {0x12,0x34,0x56,0x78,0x12,0x34,0x56,0x78};
//	u8 Amount[4]={0x00,0x00,0x00,0x01};//交易金额
//	u8 TerminalNum[6] = {0x00,0x00,0x00,0x00,0x00,0x02};//终端机台号
//	u8 Time[7] = {0x20,0x19,0x12,0x17,0x16,0x20,0x20};//交易记录时间
	
	
	//收银员 编号登录
	LCD_ShowString(10,3,Work.CashierEmployee,Red,White);
	
	//显示 图标
	LCD_Set_Window(0,20,319,239);
	LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
	for(i=0;i<70400;i++)
		{
			LCD_WriteRAM(0xFFFF);	
		}
	
	//功能1
	LCD_ShowString(50,50,(u8 *)"1: NFC_M24SR04 ",BRRED,White);
	//功能2
	LCD_ShowString(50,70,(u8 *)"2: RFID_FM17522 ",BRRED,White);
	//功能3
	LCD_ShowString(50,90,(u8 *)"3: Qrcode",BRRED,White);
	//功能4
	LCD_ShowString(50,110,(u8 *)"4: Time",BRRED,White);
		
	//显示退出
	LCD_ShowString(275,215,(u8 *)"退出",DARKBLUE,White);
		
	//LCD_DrawLine(0,0,320,240,RED);	
	//Draw_Circle(50,50,15,YELLOW);
	//LCD_DrawRectangle(50,50,80,80,BROWN);
	//LCD_ShowString(50,200,(u8 *)"HE XI",RED,BLUE);
		
	while(1)
		{
			/* 延时等待 */
			delay_ms(5);
			//工作模式
			if(Work.Dormancy == 0)
				{
					/* 显示更新 */
					LCD_Update_Display();
				}
			/* 读卡程序 */
			key = KEY_Scan(0);
			if(key)
				{
					switch(key)
						{				 
							case 1: 
								BEEP_10kHZ();
								//清空显示数据 显示功能
								LCD_Set_Window(50,50,269,189);
								LCD_WriteRAM_Prepare();     //开始写入GRAM	 	  
								for(i=0;i<8800;i++)
									{
										LCD_WriteRAM(0xFFFF);	
									}
								//功能 写入 
								LCD_ShowString(50,50,(u8 *)"1: Store URI in M24SR",BRRED,White);
								LCD_ShowString(50,70,(u8 *)"2: Read URI from M24SR",BRRED,White);
								LCD_ShowString(50,90,(u8 *)"3: Store SMS in M24SR ",BRRED,White);
								LCD_ShowString(50,110,(u8 *)"4: Read SMS from M24SR",BRRED,White);									
								
									
									
									
								break;
						case 2:
								//初始化 SPI3 管脚
								InitRc522();
								/* 复位RC522   */
								Reset_RC522();
								/* 寻卡 */
								if(PcdRequest(PICC_REQALL,rc522.UID) == MI_OK)
									{
										if(rc522.type == 0)//IC 卡
											{
												/* 防冲撞 */
												if(PcdAnticoll(rc522.UID) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 选定卡片 */
												if(PcdSelect(rc522.UID) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 验证是不是本公司的卡 */
												if(PcdAuthState(PICC_AUTHENT1B,1,Ikey,rc522.UID) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 读第0个扇区的 第一块 */
												if(PcdRead(1,rc522.BlockData) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												
												//显示余额
												LCD_ShowString(50,150,(u8 *)"Money:",DARKBLUE,White);
												LCD_ShowxNum(50+(6*8),150,(rc522.BlockData[0]*256)+(rc522.BlockData[1]),5,DARKBLUE,White);
												
											}
										else if(rc522.type == 1)//CPU 卡
											{
												/* 防冲撞 */
												if(PcdAnticoll(rc522.UID) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 选定卡片 */
												if(PcdSelect(rc522.UID) != MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* ATS 107880A00220 9000 00000000D3574F0A */	
												if(PiccRequestATS(0,rc522.Buf)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 选择 DF 目录文件 6F07 84054444463031(DDF01) 9000 */
												Choose_DFfile();
												if(PiccTPCL(rc522.SBuf,7,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 获取随机码 0B01 6F187F84 9000*/
												Take_random();
												if(PiccTPCL(rc522.SBuf,5,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												if(Cheak_90(rc522.Buf,size) == 0){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												for(i=0;i<6;i++)Rand[i] = rc522.Buf[i];//备份随机数
												/* 外部认证 3DES加密随机码  0A01 9000*/
												Rand3DES_encryp(Rand,CertificaKey,1);
												if(PiccTPCL(rc522.SBuf,13,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												if(Cheak_90(rc522.Buf,size) == 0){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;};
												/* 选择电子钱包文件夹 */
												Choose_binfile(0);
												if(PiccTPCL(rc522.SBuf,7,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												if(Cheak_90(rc522.Buf,size) == 0){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												/* 认证 DF 口令秘钥 */
												Confirm_BinPass(FilePassword);
												if(PiccTPCL(rc522.SBuf,13,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												if(Cheak_90(rc522.Buf,size) == 0){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}			
												/* 获取余额 */
												ReadBalance();
												if(PiccTPCL(rc522.SBuf,5,rc522.Buf,&size)!=MI_OK){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												if(Cheak_90(rc522.Buf,size) == 0){PcdHalt();PcdAntennaOff();RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );break;}
												
												//显示余额
												LCD_ShowString(50,150,(u8 *)"Money:",DARKBLUE,White);
												LCD_ShowxNum(50+(6*8),150,(rc522.Buf[2]*256)+(rc522.Buf[3]),5,DARKBLUE,White);
												
											}
										BEEP_1kHZ();
									}
								else
									{
										BEEP_10kHZ();
									}
								PcdHalt();
								PcdAntennaOff();   //关闭天线
								RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,DISABLE );
								break;
							case 3:
								BEEP_10kHZ();
								//显示二维码	
								ShowQRcode("http://192.168.0.222:8999/index.html");
								for(i=0;i<LCD.QRC_Len;i++)
									{
										for(t=0;t<LCD.QRC_Len;t++)
											{
												if(LCD.QRCODE[i][t]==0x01)
													{
														LCD_Color_FillColor(4*i+200,4*t+100,4*i+200+4-1,4*t+100+4-1,cha[0]);
													}
												else 
													{
														LCD_Color_FillColor(4*i+200,4*t+100,4*i+200+4-1,4*t+100+4-1,cha[1]);
													}
											}
									}	
								break;
							case 16:
									return 0;
							case 17:
									return 0;
								break;
							default :BEEP_10kHZ();break;
						}
				}
		}
	//return 0;
}

 

posted on   失落''80  阅读(27)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示