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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?