1613 lines
43 KiB
C
1613 lines
43 KiB
C
#include "lcddisplay.h"
|
||
#include "global.h"
|
||
#include "asc16.h"
|
||
#include "asc8.h"
|
||
#include "hzk16.h"
|
||
#include "define.h"
|
||
|
||
static int lcdpipe = 0;
|
||
static char buf[20];
|
||
static unsigned char cur_page, cur_col;
|
||
|
||
void buffer_init() //写显示数据
|
||
{
|
||
serial_buff_init();
|
||
cur_page = cur_col = 0;
|
||
}
|
||
|
||
void buffer_flush(unsigned char LineBit)
|
||
{
|
||
int ret = 0;
|
||
|
||
ret = serial_flush(LineBit);
|
||
if (ret)
|
||
{
|
||
printf("|%s|%s|%d| : call serial_flush( %d ) fail !\n", __FILE__, __func__, __LINE__, LineBit);
|
||
}
|
||
}
|
||
/************************************************/
|
||
/* Read\write display data\command */
|
||
/************************************************/
|
||
void write_databyte(unsigned int databyte) //写显示数据
|
||
{
|
||
//int ret = 0;
|
||
serial_write_buff((unsigned int)cur_page, (unsigned int)cur_col, (unsigned int)databyte);
|
||
|
||
//if(ret != 0)
|
||
//{
|
||
// printf("serial_write_buff error,ret=%d\n",ret);
|
||
//}
|
||
}
|
||
/************************************************/
|
||
/* opration command */
|
||
/************************************************/
|
||
|
||
/******************************************/
|
||
/* 功能:设置显示起始页 */
|
||
/* 输入:起始页值 page */
|
||
/* 输出:无 */
|
||
/* 返回: */
|
||
/******************************************/
|
||
void LcdSetPage(unsigned char Page) //数据写起始页
|
||
{
|
||
cur_page = Page; // page:0-8
|
||
}
|
||
/******************************************/
|
||
/* 功能:设置显示起始列 */
|
||
/* 输入:起始列值column */
|
||
/* 输出:无 */
|
||
/* 返回:正常0,错误非0 */
|
||
/******************************************/
|
||
void LcdSetCol(unsigned char Col) //数据写起始列
|
||
{
|
||
cur_col = Col;
|
||
}
|
||
/******************************************/
|
||
/* 功能:清屏 */
|
||
/* 输入:无 */
|
||
/* 输出:无 */
|
||
/* 返回:正常0,错误非0 */
|
||
/******************************************/
|
||
void LcdClear() //清屏程序
|
||
{
|
||
serial_buff_init();
|
||
buffer_flush(0xFF);
|
||
}
|
||
|
||
void Lcdflush() //清屏程序
|
||
{
|
||
serial_buff_black();
|
||
buffer_flush(0x0F);
|
||
}
|
||
|
||
void initLcdSystem(void)
|
||
{
|
||
buffer_init();
|
||
}
|
||
/****************** 在当前位置上显示6*8点阵字符******************************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
Asc8: 显示内容(*Asc8为字模地址)
|
||
Flag: 显示方式,NORMAL/REVERSE与UPHALF/DOWNHALF的组合
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void PrintASC8(unsigned char Page, unsigned char Col, unsigned char *Asc8, unsigned char Flag)
|
||
{
|
||
unsigned char i, j;
|
||
LcdSetPage(Page); /*设置页与栏*/
|
||
for (i = 0; i < 6; i++)
|
||
{
|
||
LcdSetCol(Col++);
|
||
j = Asc8[i];
|
||
switch (Flag)
|
||
{
|
||
case REVERSE:
|
||
j = ~j; /*全字符反色*/
|
||
break;
|
||
case UPHALF:
|
||
j = j << 4; /*上半字符*/
|
||
break;
|
||
case REVERSE | UPHALF:
|
||
j = ~(j << 4) & 0xFE; /*上半字符反色,最上边一条线不反显*/
|
||
break;
|
||
case DOWNHALF:
|
||
j = j >> 4; /*下半字符*/
|
||
break;
|
||
case REVERSE | DOWNHALF:
|
||
j = ~(j >> 4) & 0x7F; /*下半字符反色,最下边一条线不反显*/
|
||
break;
|
||
default:
|
||
break; /*全字符正常显示*/
|
||
}
|
||
write_databyte(j);
|
||
}
|
||
}
|
||
|
||
/************** 在当前显示位置上显示8*16点阵字符***********************************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
Asc16: 显示内容(*Asc16为字模地址)
|
||
Flag: 显示方式,NORMAL/REVERSE
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void PrintASC16(unsigned char Page, unsigned char Col, unsigned char *Asc16, unsigned char Flag)
|
||
{
|
||
unsigned char i, j, k, mode, nowcol;
|
||
i = 0;
|
||
k = 8;
|
||
mode = 0xFE;
|
||
|
||
do
|
||
{
|
||
LcdSetPage(Page); /*设置页与栏*/
|
||
nowcol = Col;
|
||
for (; i < k; i++) /*上半部分*/
|
||
{
|
||
LcdSetCol(nowcol++);
|
||
j = Asc16[i];
|
||
if (Flag != NORMAL)
|
||
j = ~j & mode; /*反色,最上边一条线不反,最下边一条线不反*/
|
||
write_databyte(j);
|
||
}
|
||
Page++;
|
||
k = 16;
|
||
mode = 0x7F;
|
||
} while (i < 16);
|
||
}
|
||
|
||
/****************** 在当前位置上显示12*16点阵汉字***********************************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
HanZi: 显示内容(*HanZi为字模地址)
|
||
Flag: 显示方式,NORMAL/REVERSE
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void PrintHANZI(unsigned char Page, unsigned char Col, unsigned char *HanZi, unsigned char Flag)
|
||
{
|
||
|
||
unsigned char i, nowcol;
|
||
// lrb add
|
||
unsigned char hz = 0;
|
||
LcdSetPage(Page); /*设置页与栏*/
|
||
nowcol = Col;
|
||
for (i = 0; i < 9; i += 3) /*上半部分*/
|
||
{
|
||
if (Flag == NORMAL)
|
||
{
|
||
LcdSetCol(nowcol++);
|
||
// lrb mixing
|
||
hz = *(HanZi + i) & 0xFC;
|
||
write_databyte(hz);
|
||
// write_databyte(HanZi[i]&0xFC);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte((HanZi[i] << 6) + ((HanZi[i + 1] & 0xF0) >> 2));
|
||
LcdSetCol(nowcol++);
|
||
write_databyte((HanZi[i + 1] << 4) + ((HanZi[i + 2] & 0xC0) >> 4));
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(HanZi[i + 2] << 2);
|
||
}
|
||
else
|
||
{
|
||
LcdSetCol(nowcol++); /*反色,最上边一条线不反*/
|
||
write_databyte(~(HanZi[i] & 0xFC) & 0xFE);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~((HanZi[i] << 6) + ((HanZi[i + 1] & 0xF0) >> 2)) & 0xFE);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~((HanZi[i + 1] << 4) + ((HanZi[i + 2] & 0xC0) >> 4)) & 0xFE);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~(HanZi[i + 2] << 2) & 0xFE);
|
||
}
|
||
}
|
||
LcdSetCol(nowcol); /* 字间距 */
|
||
write_databyte(Flag == NORMAL ? 0x00 : 0xFE);
|
||
LcdSetPage(Page + 1); /*设置页+1,重置栏*/
|
||
nowcol = Col;
|
||
for (; i < 18; i += 3) /*下半部分*/
|
||
{
|
||
if (Flag == NORMAL)
|
||
{
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(HanZi[i] >> 2);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(((HanZi[i] & 0x03) << 4) + ((HanZi[i + 1] & 0xF0) >> 4));
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(((HanZi[i + 1] & 0x0F) << 2) + ((HanZi[i + 2] & 0xC0) >> 6));
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(HanZi[i + 2] & 0x3F);
|
||
}
|
||
else
|
||
{
|
||
LcdSetCol(nowcol++); /*反色,最下边一条线不反*/
|
||
write_databyte(~(HanZi[i] >> 2) & 0x7F);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~(((HanZi[i] & 0x03) << 4) + ((HanZi[i + 1] & 0xF0) >> 4)) & 0x7F);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~(((HanZi[i + 1] & 0x0F) << 2) + ((HanZi[i + 2] & 0xC0) >> 6)) & 0x7F);
|
||
LcdSetCol(nowcol++);
|
||
write_databyte(~(HanZi[i + 2] & 0x3F) & 0x7F);
|
||
}
|
||
}
|
||
LcdSetCol(nowcol);
|
||
write_databyte(Flag == NORMAL ? 0x00 : 0x7F);
|
||
}
|
||
|
||
/****************** 在当前位置上显示6*8点阵字符串******************************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
ValBuf: 显示内容(*ValBuf为字模地址,**ValBuf为字模地址列表)
|
||
Num: 字符个数
|
||
Flag: 显示方式,NORMAL/REVERSE与CENTER的组合(是否下移半行)
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void PrintString8(unsigned char Page, unsigned char Col, unsigned char **ValBuf, unsigned char Num, unsigned char Flag)
|
||
{
|
||
unsigned char i, temp;
|
||
temp = Col;
|
||
ShowString:
|
||
for (Col = temp, i = 0; i < Num; i++)
|
||
{
|
||
PrintASC8(Page, Col, ValBuf[i], Flag);
|
||
Col += 6;
|
||
}
|
||
if ((Flag & 0xFE) == UPHALF) //屏蔽NORMAL/REVERSE位,CENTER和UPHALF值相同
|
||
{
|
||
Page++;
|
||
Flag = (Flag & 0x01) | DOWNHALF; //如果是上面半部分,则要继续显示下半部分
|
||
goto ShowString;
|
||
}
|
||
}
|
||
|
||
/****************** 在当前位置上显示12*16汉字和8*16字符混合字符串****************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
ValBuf: 显示内容(*ValBuf为字模地址,**ValBuf为字模地址列表)
|
||
Num: 字符个数
|
||
Flag: 显示方式,NORMAL: 正常 REVERSE: 反显
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void PrintString16(unsigned char Page, unsigned char Col, unsigned char **ValBuf, unsigned char Num, unsigned char Flag)
|
||
{
|
||
unsigned char i;
|
||
unsigned char *Ptr = NULL;
|
||
unsigned char flag = 0;
|
||
int num = 0;
|
||
FILE *stream;
|
||
if (lcdpipe == 0)
|
||
{
|
||
memset(buf, 0, 20);
|
||
stream = popen("uname -r", "r");
|
||
if (stream == NULL)
|
||
{
|
||
printf("LCD pipe error\n");
|
||
}
|
||
num = fread(buf, 20, 1, stream);
|
||
if(num == -1)
|
||
printf("fread error");
|
||
pclose(stream);
|
||
lcdpipe = 1;
|
||
}
|
||
|
||
if (&ASC16_End > &ASC16_Begin)
|
||
{
|
||
flag = 1;
|
||
}
|
||
|
||
if (strncmp(buf, "2.6.9", 5))
|
||
{
|
||
// printf("begin:%x, end:%x\n",&ASC16_Begin,&ASC16_End);
|
||
for (i = 0; i < Num; i++)
|
||
{
|
||
|
||
Ptr = ValBuf[i];
|
||
// printf("addr:%x\n",Ptr);
|
||
#if 1
|
||
if (flag)
|
||
{
|
||
if (Ptr <= &ASC16_End && Ptr >= &ASC16_Begin)
|
||
{
|
||
PrintASC16(Page, Col, Ptr, Flag);
|
||
Col += 8;
|
||
}
|
||
else
|
||
{
|
||
PrintHANZI(Page, Col, Ptr, Flag);
|
||
Col += 13;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (Ptr >= &ASC16_End && Ptr <= &ASC16_Begin)
|
||
{
|
||
PrintASC16(Page, Col, Ptr, Flag);
|
||
Col += 8;
|
||
}
|
||
else
|
||
{
|
||
PrintHANZI(Page, Col, Ptr, Flag);
|
||
Col += 13;
|
||
}
|
||
}
|
||
#else
|
||
if (sizeof(Ptr) != 18)
|
||
{
|
||
PrintASC16(Page, Col, Ptr, Flag);
|
||
Col += 8;
|
||
}
|
||
else
|
||
{
|
||
PrintHANZI(Page, Col, Ptr, Flag);
|
||
Col += 13;
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (i = 0; i < Num; i++)
|
||
{
|
||
Ptr = ValBuf[i];
|
||
if (Ptr < &ASC16_Begin && Ptr > &ASC16_End)
|
||
{
|
||
PrintASC16(Page, Col, Ptr, Flag);
|
||
Col += 8;
|
||
}
|
||
else
|
||
{
|
||
PrintHANZI(Page, Col, Ptr, Flag);
|
||
Col += 13;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**************** 在当前位置上显示12*16汉字和8*16字符预定义混合字符串*************
|
||
输入参数:
|
||
Page: 显示起始页
|
||
Col: 显示起始行
|
||
CodeStr: 显示内容(字符串的地址列表位置)
|
||
Num: 字符个数,包含要加入的汉字和符号
|
||
Flag: 显示方式,F5-FF:菜单项(FA时反显)
|
||
A?: 前面加"请输入"
|
||
C?: 前面加"请选择"
|
||
1?/2?/3?: 将第三/四或三/四/五个字更改为导入或导出的密钥数 Flag=2:两位 Flag=3:三位
|
||
CLAIM/COLON: 最后加上!/:
|
||
NORMAL/REVERSE: 正常显示/反显
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
备注: STR_GG的第二/三个字显示QueryCnt的数值
|
||
ruob.lin 修改64位兼容问题,20180326
|
||
********************************************************************************/
|
||
void PrintFormatStr(unsigned char Page, unsigned char Col, unsigned char **CodeStr, unsigned char Num, unsigned char Flag)
|
||
{
|
||
unsigned char i, j, k, Offset = 0;
|
||
i = Flag & 0xF0; // 0&0xf0=>0x0000 0000 & 0x1111 0000
|
||
if (i == 0xF0) //如果高半字节为F,表示是菜单项 0xF5-0xFF
|
||
{
|
||
if (Flag == 0xFA)
|
||
Flag = REVERSE; // MenuItem-X=0,选中反显
|
||
else
|
||
Flag = NORMAL; //未选中,正显
|
||
}
|
||
// memcpy(Buffer+Offset,CodeStr,Num<<2); //将CODE段中的格式化字串拷到Buffer中
|
||
memcpy(Buffer + Offset, CodeStr, Num << 4); //将CODE段中的格式化字串拷到Buffer中
|
||
if (i == MY_DATE_NUM_1 || i == MY_DATE_NUM_2 || i == MY_DATE_NUM_3 || i == MY_DATE_NUM_4)
|
||
{ // if(ExData!=0)
|
||
if (i == MY_DATE_NUM_1)
|
||
Buffer[2] = ASC16_Num[1];
|
||
else if (i == MY_DATE_NUM_2)
|
||
Buffer[2] = ASC16_Num[2];
|
||
else if (i == MY_DATE_NUM_3)
|
||
Buffer[2] = ASC16_Num[3];
|
||
else if (i == MY_DATE_NUM_4)
|
||
Buffer[2] = ASC16_Num[4];
|
||
}
|
||
if (i == INPUT_OR_OUTPUT_MY_NUM)
|
||
{
|
||
if (INPUT_OR_OUTPUT_KEY_BIT == 2)
|
||
{
|
||
j = ExData / 10;
|
||
if (j != 0)
|
||
Buffer[2] = ASC16_Num[j];
|
||
j = ExData % 10;
|
||
Buffer[3] = ASC16_Num[j];
|
||
ExData = 0;
|
||
}
|
||
else if (INPUT_OR_OUTPUT_KEY_BIT == 3)
|
||
{
|
||
j = ExData / 100;
|
||
if (j != 0)
|
||
Buffer[2] = ASC16_Num[j];
|
||
k = (ExData % 100) / 10;
|
||
if (j != 0 || k != 0)
|
||
Buffer[3] = ASC16_Num[k];
|
||
j = ExData % 10;
|
||
Buffer[4] = ASC16_Num[j];
|
||
ExData = 0;
|
||
}
|
||
}
|
||
PrintString16(Page, Col, (unsigned char **)Buffer, Num, Flag & 0x01);
|
||
}
|
||
|
||
/*******************************菜单光标移动和定位********************************
|
||
输入参数:
|
||
CurItem: 当前选择项
|
||
AllItem: 总共可选项数
|
||
Key: 输入键值
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
**********************************************************************************/
|
||
void SetItemCursor(unsigned int *CurItem, unsigned int AllItem, unsigned char Key)
|
||
{
|
||
unsigned char i;
|
||
i = *CurItem;
|
||
if (Key == KEY_UP && i > 1)
|
||
{
|
||
i--;
|
||
}
|
||
if (Key == KEY_DOWN && i < AllItem)
|
||
{
|
||
i++;
|
||
}
|
||
|
||
// if(Key==KEY_0&&AllItem>=10) i=10;
|
||
*CurItem = i;
|
||
}
|
||
/*******************************菜单光标移动方向键********************************
|
||
输入参数:
|
||
CurItem: 当前选择项
|
||
AllItem: 总共可选项数
|
||
Key: 输入键值
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
**********************************************************************************/
|
||
void SetItemCursor_DownAndUp(unsigned int *CurItem, unsigned int AllItem, unsigned char Key)
|
||
{
|
||
unsigned char i;
|
||
i = *CurItem;
|
||
if (Key == KEY_UP && i > 1)
|
||
i--;
|
||
if (Key == KEY_DOWN && i < AllItem)
|
||
i++;
|
||
/*if(Key==KEY_1 || Key==KEY_2 ||(Key==KEY_3&&AllItem>=3)
|
||
||(Key==KEY_4&&AllItem>=4)||(Key==KEY_5&&AllItem>=5)
|
||
||(Key==KEY_6&&AllItem>=6)||(Key==KEY_7&&AllItem>=7)
|
||
||(Key==KEY_8&&AllItem>=8)||(Key==KEY_9&&AllItem>=9))i=Key;
|
||
//if(Key==KEY_0&&AllItem>=10) i=10;*/
|
||
*CurItem = i;
|
||
}
|
||
|
||
/********************* 显示一空白行 **********************************
|
||
输入参数:
|
||
Line: 行
|
||
Type: 类型 0: 高度8点 1: 高度16点
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
*********************************************************************/
|
||
void PrintEmptyLine(unsigned char Line, unsigned char Type)
|
||
{
|
||
unsigned char k;
|
||
// unsigned char asc_space[30];
|
||
// memset(asc_space,'\0',30);
|
||
if (Type == 1) // 16*8
|
||
{
|
||
for (k = 17; k != 0; k--)
|
||
Buffer[k - 1] = ASC16_Space;
|
||
PrintString16(Line, 0, Buffer, 17, NORMAL);
|
||
}
|
||
else // 8*6
|
||
{
|
||
for (k = 22; k != 0; k--)
|
||
Buffer[k - 1] = ASC8_Space;
|
||
PrintString8(Line, 0, Buffer, 22, NORMAL);
|
||
}
|
||
}
|
||
/****************显示固定菜单的前导数字编号,"多位数+点 不够前补0"***********************
|
||
输入参数:
|
||
ItemCnt: 菜单项的数量 first_Item: 第一个菜单项的编号
|
||
start_page: 开始放置菜单的页号,place_len: 总长度,前补0
|
||
start_col: 开始放置菜单的行号
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
*****************************************************************************/
|
||
void DispPrefix(unsigned char ItemCnt, unsigned int first_Item, unsigned char start_page, unsigned char place_len, unsigned char start_col)
|
||
{
|
||
unsigned char i, m = 0;
|
||
unsigned int Item[4];
|
||
memset(Item, 0x00, sizeof(int) * 4);
|
||
if (place_len == 2)
|
||
{
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (i = start_page; i < 8; i += 2, m++)
|
||
{
|
||
if (Item[m] != 0)
|
||
{
|
||
PrintASC16(i, 16 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(i, start_col, ASC16_Num[Item[m] / 10], NORMAL);
|
||
PrintASC16(i, 8 + start_col, ASC16_Num[Item[m] % 10], NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if (place_len == 3)
|
||
{
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (i = start_page; i < 8; i += 2, m++)
|
||
{
|
||
if (Item[m] != 0)
|
||
{
|
||
|
||
PrintASC16(i, start_col, ASC16_Num[Item[m] / 100], NORMAL);
|
||
PrintASC16(i, 8 + start_col, ASC16_Num[(Item[m] % 100) / 10], NORMAL);
|
||
PrintASC16(i, 16 + start_col, ASC16_Num[Item[m] % 10], NORMAL);
|
||
PrintASC16(i, 24 + start_col, ASC16_Dot, NORMAL);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/****************显示固定菜单的前导数字编号,"多位数 不够前补0" ***********************
|
||
输入参数:
|
||
ItemCnt: 菜单项的数量 first_Item: 第一个菜单项的编号
|
||
start_page: 开始放置菜单的页号,place_len: 总长度,前补0
|
||
start_col: 开始放置菜单的行号
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
*****************************************************************************/
|
||
void DispPrefix_NoDot(unsigned char ItemCnt, unsigned int first_Item, unsigned char start_page, unsigned char place_len, unsigned char start_col)
|
||
{
|
||
unsigned char i, m = 0;
|
||
unsigned int Item[4];
|
||
memset(Item, 0x00, sizeof(int) * 4);
|
||
if (place_len == 3)
|
||
{
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (i = start_page; i < 8; i += 2, m++)
|
||
{
|
||
if (Item[m] != 0)
|
||
{
|
||
|
||
PrintASC16(i, start_col, ASC16_Num[Item[m] / 100], NORMAL);
|
||
PrintASC16(i, 8 + start_col, ASC16_Num[(Item[m] % 100) / 10], NORMAL);
|
||
PrintASC16(i, 16 + start_col, ASC16_Num[Item[m] % 10], NORMAL);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/****************显示固定菜单的前导数字编号,"一或多位数+点"***********************
|
||
输入参数:
|
||
ItemCnt: 菜单项的数量 first_Item: 第一个菜单项的编号
|
||
start_page: 开始放置菜单的页号 start_col: 开始放置菜单的行号
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
**********************************************************************************/
|
||
void DispPrefix_oneormore_col(unsigned int ItemCnt, unsigned int first_Item, unsigned char start_page, unsigned char start_col)
|
||
{
|
||
unsigned char Item[4], i, j, k = 0;
|
||
memset(Item, 0x00, 4);
|
||
if ((ItemCnt - 1 + first_Item) <= 9)
|
||
{
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (i = start_page, k = 0; i < 8; i += 2, k++)
|
||
{
|
||
if (Item[k] != 0)
|
||
{
|
||
PrintASC16(i, 6 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(i, start_col, ASC16_Num[Item[k]], NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if (first_Item <= 9 && first_Item + ItemCnt - 1 > 9)
|
||
{
|
||
k = 0;
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (j = start_page; j < start_page + (10 - first_Item) * 2; j += 2)
|
||
{
|
||
if (Item[k] != 0)
|
||
{
|
||
PrintASC16(j, 6 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(j, start_col, ASC16_Num[Item[k++]], NORMAL);
|
||
}
|
||
}
|
||
// m=0;
|
||
for (j = start_page + (10 - first_Item) * 2; j < 8; j += 2)
|
||
{
|
||
if (Item[k] != 0)
|
||
{
|
||
PrintASC16(j, 12 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(j, start_col, ASC16_Num[1], NORMAL);
|
||
PrintASC16(j, 6 + start_col, ASC16_Num[Item[k++] - 10], NORMAL);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void DispPrefix_oneormore_col_1(unsigned int ItemCnt, unsigned int first_Item, unsigned char start_page, unsigned char start_col)
|
||
{
|
||
unsigned char Item[4], i, j, k = 0;
|
||
memset(Item, 0x00, 4);
|
||
if ((ItemCnt - 1 + first_Item) <= 9)
|
||
{
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (i = start_page, k = 0; i < 8; i += 2, k++)
|
||
{
|
||
|
||
PrintASC16(i, 6 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(i, start_col, ASC16_Num[Item[k]], NORMAL);
|
||
}
|
||
}
|
||
else if (first_Item <= 9 && first_Item + ItemCnt - 1 > 9)
|
||
{
|
||
k = 0;
|
||
if (ItemCnt >= 1)
|
||
Item[0] = first_Item;
|
||
if (ItemCnt >= 2)
|
||
Item[1] = first_Item + 1;
|
||
if (ItemCnt >= 3)
|
||
Item[2] = first_Item + 2;
|
||
if (ItemCnt == 4)
|
||
Item[3] = first_Item + 3;
|
||
for (j = start_page; j < start_page + (10 - first_Item) * 2; j += 2)
|
||
{
|
||
|
||
{
|
||
PrintASC16(j, 6 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(j, start_col, ASC16_Num[Item[k++]], NORMAL);
|
||
}
|
||
}
|
||
// m=0;
|
||
for (j = start_page + (10 - first_Item) * 2; j < 8; j += 2)
|
||
{
|
||
|
||
{
|
||
PrintASC16(j, 12 + start_col, ASC16_Dot, NORMAL);
|
||
PrintASC16(j, start_col, ASC16_Num[1], NORMAL);
|
||
PrintASC16(j, 6 + start_col, ASC16_Num[Item[k++] - 10], NORMAL);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/*else if(first_Item>9 && first_Item+ItemCnt-1<100)
|
||
{
|
||
if(ItemCnt>=1) Item[0]=first_Item;
|
||
if(ItemCnt>=2) Item[1]=first_Item+1;
|
||
if(ItemCnt>=3) Item[2]=first_Item+2;
|
||
if(ItemCnt==4) Item[3]=first_Item+3;
|
||
for(j=start_page,k=0;j<8;j+=2,k++)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,12+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/10],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if(first_Item>9 && first_Item<100 && first_Item+ItemCnt-1>=100)
|
||
{
|
||
k=0;
|
||
if(ItemCnt>=1) Item[0]=first_Item;
|
||
if(ItemCnt>=2) Item[1]=first_Item+1;
|
||
if(ItemCnt>=3) Item[2]=first_Item+2;
|
||
if(ItemCnt==4) Item[3]=first_Item+3;
|
||
for(j=start_page;j<start_page+(100-first_Item)*2;j+=2)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,12+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/10],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
//m=0;
|
||
for(j=start_page+(100-first_Item)*2;j<8;j+=2)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,18+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/100],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[(Item[k]%100)/10],NORMAL);
|
||
PrintASC16(j,12+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if(first_Item>=100 && first_Item+ItemCnt-1>=100 && first_Item+ItemCnt-1<1000)
|
||
{
|
||
//k=0;
|
||
if(ItemCnt>=1) Item[0]=first_Item;
|
||
if(ItemCnt>=2) Item[1]=first_Item+1;
|
||
if(ItemCnt>=3) Item[2]=first_Item+2;
|
||
if(ItemCnt==4) Item[3]=first_Item+3;
|
||
for(j=start_page,k=0;j<8;j+=2,k++)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,18+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/100],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[(Item[k]%100)/10],NORMAL);
|
||
PrintASC16(j,12+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if(first_Item>=100 && first_Item<1000 && first_Item+ItemCnt-1>=1000)
|
||
{
|
||
k=0;
|
||
if(ItemCnt>=1) Item[0]=first_Item;
|
||
if(ItemCnt>=2) Item[1]=first_Item+1;
|
||
if(ItemCnt>=3) Item[2]=first_Item+2;
|
||
if(ItemCnt==4) Item[3]=first_Item+3;
|
||
for(j=start_page;j<start_page+(1000-first_Item)*2;j+=2)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,18+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/100],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[(Item[k]%100)/10],NORMAL);
|
||
PrintASC16(j,12+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
//m=0;
|
||
for(j=start_page+(1000-first_Item)*2;j<8;j+=2)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,24+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/1000],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[(Item[k]%1000)/100],NORMAL);
|
||
PrintASC16(j,12+start_col,ASC16_Num[((Item[k]%1000)%100)/10],NORMAL);
|
||
PrintASC16(j,18+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
}
|
||
else if(first_Item>=1000 && first_Item+ItemCnt-1>=1000 && first_Item+ItemCnt-1<10000)
|
||
{
|
||
//k=0;
|
||
if(ItemCnt>=1) Item[0]=first_Item;
|
||
if(ItemCnt>=2) Item[1]=first_Item+1;
|
||
if(ItemCnt>=3) Item[2]=first_Item+2;
|
||
if(ItemCnt==4) Item[3]=first_Item+3;
|
||
for(j=start_page,k=0;j<8;j+=2,k++)
|
||
{
|
||
if(Item[k]!=0)
|
||
{
|
||
PrintASC16(j,24+start_col,ASC16_Dot,NORMAL);
|
||
PrintASC16(j,start_col,ASC16_Num[Item[k]/1000],NORMAL);
|
||
PrintASC16(j,6+start_col,ASC16_Num[(Item[k]%1000)/100],NORMAL);
|
||
PrintASC16(j,12+start_col,ASC16_Num[((Item[k]%1000)%100)/10],NORMAL);
|
||
PrintASC16(j,18+start_col,ASC16_Num[Item[k]%10],NORMAL);
|
||
}
|
||
}
|
||
}*/
|
||
|
||
/*************** 退到上级菜单,根据当前的Function,设置MenuItem和Frame的值 ************
|
||
输入参数:
|
||
Function: 当前处理的功能号
|
||
输出参数:
|
||
Frame: 窗口号
|
||
MenuItem: 菜单项号
|
||
*************************************************************************************/
|
||
void ExitToMenu()
|
||
{
|
||
Frame = EXIT_Frame;
|
||
EXIT_Frame = 0;
|
||
MenuItem = MenuItem_num;
|
||
MenuItem_num = 0;
|
||
// printf("MenuItem is %d and Frame is %d\n", MenuItem, Frame);
|
||
/* add by mukesong for key flag (begin)*/
|
||
LEDSTATE &= 0xFB;
|
||
/* add by mukesong for key flag (end)*/
|
||
}
|
||
/************** 6*8数字串的格式化单行上下居中显示********************************
|
||
输入参数:
|
||
Page: 行
|
||
Col: 列
|
||
Value: ASC-'0'格式的数据
|
||
Len: 显示定长,偶数,最长22
|
||
Flag: 显示格式标志 0: 正常,不足补空格 1:正常,不足补下划线 2:星号,不足补下划线
|
||
输出参数:
|
||
无
|
||
返回值:无
|
||
********************************************************************************/
|
||
void DispDigits(unsigned char Page, unsigned char Col, unsigned char *Value, unsigned char Len, unsigned char Flag)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i < Len; i++)
|
||
{
|
||
if (Value[i] == 0x18) // 0x18当前缓冲区空标志
|
||
{
|
||
if (Flag == 0)
|
||
Buffer[i] = ASC8_Space;
|
||
else
|
||
Buffer[i] = ASC8_Line;
|
||
}
|
||
else
|
||
{
|
||
if (Flag == 2)
|
||
Buffer[i] = ASC8_Star;
|
||
else
|
||
Buffer[i] = ASC8_Num[Value[i]];
|
||
}
|
||
}
|
||
PrintString8(Page, Col, Buffer, Len, NORMAL | CENTER);
|
||
}
|
||
|
||
void DispDigits2(unsigned char Page, unsigned char Col, unsigned char *Value, unsigned char Len)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i < Len; i++)
|
||
{
|
||
if (Value[i] == 0x18) // 0x18当前缓冲区空标志
|
||
{
|
||
Buffer[i] = ASC8_Line;
|
||
}
|
||
else
|
||
{
|
||
Buffer[i] = ASC8_Num[Value[i]];
|
||
}
|
||
}
|
||
PrintString8(Page, Col, Buffer, Len, NORMAL | CENTER);
|
||
}
|
||
|
||
/************** 6*8数字串的格式化单行上下居中显示********************************
|
||
输入参数:
|
||
Page: 行
|
||
Col: 列
|
||
Value: ASC-'0'格式的数据
|
||
Len: 显示定长,偶数,最长22
|
||
Flag: 显示格式标志 0: 正常,不足补空格 1:正常,不足补下划线 2:星号,不足补下划线
|
||
输出参数:
|
||
无
|
||
返回值:无
|
||
********************************************************************************/
|
||
void DispVersion(unsigned char Page, unsigned char Col, unsigned char *Value, unsigned char Len, unsigned char Flag)
|
||
{
|
||
unsigned char i, j = 0; /*FIXME*/
|
||
if (Flag == 0)
|
||
{
|
||
for (i = 0; i < Len; i++)
|
||
{
|
||
if (i % 4 == 0)
|
||
Buffer[i] = ASC8_Space;
|
||
else
|
||
{
|
||
// printf("\n");
|
||
Buffer[i] = ASC8_Num[Value[j]];
|
||
j++;
|
||
}
|
||
}
|
||
}
|
||
else if (Flag == 1)
|
||
{
|
||
Buffer[0] = ASC8_Num[Value[0]];
|
||
Buffer[1] = ASC8_Dot;
|
||
Buffer[2] = ASC8_Num[Value[1]];
|
||
Buffer[3] = ASC8_Num[Value[2]];
|
||
}
|
||
|
||
PrintString8(Page, Col, Buffer, Len, NORMAL | CENTER);
|
||
}
|
||
/**************************显示个人密钥是否启用********************************************
|
||
输入参数: 1 page 2 col 3 FLAG :1 启用 0 未启用 4 REVERSE_FLAG: 0 NORMAL 1 REVERSE
|
||
输出参数: 无
|
||
返回:
|
||
*******************************************************************************/
|
||
void DISP_TURN_ON_FLAG(unsigned char page, unsigned char col, unsigned char *FLAG, unsigned char REVERSE_Flag)
|
||
{
|
||
if (FLAG[0] == 1)
|
||
PrintASC16(page, col, ASC16_Star, REVERSE_Flag);
|
||
else
|
||
PrintASC16(page, col, ASC16_Space, REVERSE_Flag);
|
||
}
|
||
/************** 6*8数字串的格式化单行上下居中显示********************************
|
||
输入参数:
|
||
Page: 行
|
||
Col: 列
|
||
Value: ASC-'0'格式的数据
|
||
Len: 显示定长,偶数,最长22
|
||
Flag: 显示格式标志 0: 正常,不足补空格 1:正常,不足补下划线 2:星号,不足补下划线
|
||
REVERSE_FLAG: 0 NORMAL 1 REVERSE
|
||
输出参数:
|
||
无
|
||
返回值:无
|
||
********************************************************************************/
|
||
void DispDigits_Reverse(unsigned char Page, unsigned char Col, unsigned char *Value, unsigned char Len, unsigned char Flag, unsigned char REVERSE_FLAG)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i < Len; i++)
|
||
{
|
||
if (Value[i] == 0x18)
|
||
{
|
||
if (Flag == 0)
|
||
Buffer[i] = ASC8_Space;
|
||
else
|
||
Buffer[i] = ASC8_Line;
|
||
}
|
||
else
|
||
{
|
||
if (Flag == 2)
|
||
Buffer[i] = ASC8_Star;
|
||
else
|
||
Buffer[i] = ASC8_Num[Value[i]];
|
||
}
|
||
}
|
||
PrintString8(Page, Col, Buffer, Len, REVERSE_FLAG | CENTER);
|
||
}
|
||
/************** 日志大小8*16格式化单行上下居中显示********************************
|
||
输入参数:
|
||
Page: 行
|
||
Col: 列
|
||
Value: 高、低两字节
|
||
|
||
输出参数:
|
||
无
|
||
返回值:无
|
||
********************************************************************************/
|
||
void Disp_LogSize(unsigned char Page, unsigned char Col, unsigned char *Value)
|
||
{
|
||
unsigned char i, log[4];
|
||
unsigned int j;
|
||
memset(log, '\0', 4);
|
||
i = Value[0];
|
||
j = Value[1] * 256 + Value[2];
|
||
log[0] = j / 1000;
|
||
log[1] = (j % 1000) / 100;
|
||
log[2] = ((j % 1000) % 100) / 10;
|
||
log[3] = j % 10;
|
||
if (log[0] != 0)
|
||
Buffer[0] = ASC16_Num[log[0]];
|
||
else
|
||
Buffer[0] = ASC16_Space;
|
||
if (log[1] != 0 || log[0] != 0)
|
||
Buffer[1] = ASC16_Num[log[1]];
|
||
else
|
||
Buffer[1] = ASC16_Space;
|
||
if (log[1] != 0 || log[0] != 0 || log[2] != 0)
|
||
Buffer[2] = ASC16_Num[log[2]];
|
||
else
|
||
Buffer[2] = ASC16_Space;
|
||
Buffer[3] = ASC16_Num[log[3]];
|
||
switch (i)
|
||
{
|
||
case UNIT_T:
|
||
Buffer[4] = ASC16_TChar;
|
||
break;
|
||
case UNIT_G:
|
||
Buffer[4] = ASC16_G_Char;
|
||
break;
|
||
case UNIT_M:
|
||
Buffer[4] = ASC16_M_Char;
|
||
break;
|
||
case UNIT_K:
|
||
Buffer[4] = ASC16_K_Char;
|
||
break;
|
||
default:
|
||
Buffer[4] = ASC16_Space;
|
||
break;
|
||
}
|
||
Buffer[5] = ASC16_B_Char;
|
||
PrintString16(Page, Col, Buffer, 6, NORMAL);
|
||
}
|
||
/************** 同步失败序号8*16格式化单行上下居中显示********************************
|
||
输入参数:
|
||
Page: 行
|
||
Col: 列
|
||
Value: 根据协议
|
||
|
||
输出参数:
|
||
无
|
||
返回值:无
|
||
********************************************************************************/
|
||
void Disp_num_failure(unsigned char Page, unsigned char Col, unsigned char *Value)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i < Value[0]; i++)
|
||
{
|
||
Buffer[i] = ASC16_Num[Value[i + 1]];
|
||
}
|
||
if (Value[0] <= 5)
|
||
PrintString16(Page, Col, Buffer, Value[0], NORMAL);
|
||
else
|
||
{
|
||
PrintString16(Page, Col, Buffer, 5, NORMAL);
|
||
PrintString16(Page + 2, Col, Buffer + 5, Value[0] - 5, NORMAL);
|
||
}
|
||
}
|
||
/************** 将BCD字符串展开为BIN字符串**************************************
|
||
输入参数:
|
||
BCDBuf: BCD字符串
|
||
BCDLen: BCD字符串的长度
|
||
输出参数:
|
||
BINBuf: BIN字符串(即ASC码-'0')
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void BCDToBIN(unsigned char *BCDBuf, unsigned char BCDLen, unsigned char *BINBuf)
|
||
{
|
||
unsigned char i, j;
|
||
for (i = BCDLen; i != 0; i--)
|
||
{
|
||
j = BCDBuf[i - 1];
|
||
BINBuf[i * 2 - 1] = j & 0x0F;
|
||
BINBuf[i * 2 - 2] = j >> 4;
|
||
}
|
||
}
|
||
/************** 将ASC字符串展开为BIN字符串**************************************
|
||
输入参数:
|
||
ASCBuf: ASC字符串
|
||
ASCLen: ASC字符串的长度
|
||
输出参数:
|
||
BINBuf: BIN字符串(即ASC码-'0')
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void ASCToBIN(unsigned char *ASCBuf, unsigned char ASCLen, unsigned char *BINBuf)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i <= ASCLen; i++)
|
||
{
|
||
BINBuf[i] = ASCBuf[i] - 0x30;
|
||
}
|
||
}
|
||
/************** 将BIN字符串转变为ASC字符串**************************************
|
||
输入参数:
|
||
BINBuf: BIN字符串
|
||
BINLen: BIN字符串的长度
|
||
输出参数:
|
||
ASCBuf: ASC字符串(即BIN码+'0')
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void BINToASC(unsigned char *BINBuf, unsigned char BINLen, unsigned char *ASCBuf)
|
||
{
|
||
unsigned char i;
|
||
for (i = 0; i <= BINLen; i++)
|
||
{
|
||
ASCBuf[i] = BINBuf[i] + 0x30;
|
||
}
|
||
}
|
||
/************** 将BIN字符串展开为BCD字符串**************************************
|
||
输入参数:
|
||
BINBuf: BIN字符串(即ASC码-'0')
|
||
BINLen: BIN字符串的长度
|
||
输出参数:
|
||
BCDBuf: BCD字符串
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void BINToBCD(unsigned char *BINBuf, unsigned char BINLen, unsigned char *BCDBuf)
|
||
{
|
||
unsigned char i, j, k, m;
|
||
for (i = 0, j = 0; i < BINLen; i += 2)
|
||
{
|
||
k = BINBuf[i] << 4;
|
||
m = BINBuf[i + 1];
|
||
BCDBuf[j++] = k + m;
|
||
// BCDBuf[j++]=BINBuf[i]<<4+BINBuf[i+1];
|
||
}
|
||
}
|
||
/********************* 根据当前选中项刷新输入箭头光标 ********************
|
||
输入参数:
|
||
CurSel: 当前选中项
|
||
AllSel: 总共可选项
|
||
first_page: 放置光标的第一页
|
||
second_page:放置光标的第二页
|
||
输出参数:
|
||
无
|
||
返回值: 无
|
||
*************************************************************************/
|
||
void RefreshArrowPos(unsigned char CurSel, unsigned char AllSel, unsigned char first_page, unsigned char second_page)
|
||
{
|
||
|
||
if (AllSel == 2)
|
||
{
|
||
if (CurSel == 1)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(second_page, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(second_page, 119, ASC16_Arrow, NORMAL);
|
||
}
|
||
}
|
||
else if (AllSel == 3)
|
||
{
|
||
if (CurSel == 1)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else if (CurSel == 2)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Arrow, NORMAL);
|
||
}
|
||
}
|
||
else if (AllSel == 4)
|
||
{
|
||
if (CurSel == 1)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 6, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else if (CurSel == 2)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 6, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else if (CurSel == 3)
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Arrow, NORMAL);
|
||
PrintASC16(first_page + 6, 119, ASC16_Space, NORMAL);
|
||
}
|
||
else
|
||
{
|
||
PrintASC16(first_page, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 2, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 4, 119, ASC16_Space, NORMAL);
|
||
PrintASC16(first_page + 6, 119, ASC16_Arrow, NORMAL);
|
||
}
|
||
}
|
||
}
|
||
/************** 将键入数压入键盘缓冲区(BCD)**************************************
|
||
输入参数:
|
||
ValBuf: 键盘缓冲区
|
||
BufLen: 缓冲区长度
|
||
CurLen: 当前输入内容长度
|
||
Key: 键入值
|
||
输出参数:
|
||
ValBuf: 键盘缓冲区
|
||
CurLen: 当前输入内容长度
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void AddIntoBuf(unsigned char *ValBuf, unsigned char BufLen, unsigned char *CurLen, unsigned char Key)
|
||
{
|
||
unsigned char i;
|
||
if ((*CurLen) < BufLen)
|
||
{
|
||
for (i = 0; i < BufLen - 1; i++)
|
||
ValBuf[i] = ValBuf[i + 1];
|
||
ValBuf[i] = Key;
|
||
|
||
(*CurLen)++;
|
||
}
|
||
}
|
||
/************** 从键盘缓冲区(BCD)中删除最后一个键入值**************************************
|
||
输入参数:
|
||
ValBuf: 键盘缓冲区
|
||
BufLen: 缓冲区长度
|
||
CurLen: 当前输入内容长度
|
||
输出参数:
|
||
ValBuf: 键盘缓冲区
|
||
CurLen: 当前输入内容长度
|
||
返回值: 无
|
||
********************************************************************************/
|
||
void DelFromBuf(unsigned char *ValBuf, unsigned char BufLen, unsigned char *CurLen)
|
||
{
|
||
unsigned char i;
|
||
if ((*CurLen) > 0)
|
||
{
|
||
for (i = BufLen - 1; i > 0; i--)
|
||
ValBuf[i] = ValBuf[i - 1];
|
||
ValBuf[0] = 0x18; // 0x18当前缓冲区空标志
|
||
(*CurLen)--;
|
||
}
|
||
}
|
||
/**************************显示错误号********************************************
|
||
输入参数: Buf[0]
|
||
输出参数: 无
|
||
返回:无
|
||
*******************************************************************************/
|
||
void Disp_error_no(void)
|
||
{
|
||
|
||
unsigned char first_num, second_num;
|
||
first_num = (Buf[1] & 0xF0) >> 4;
|
||
second_num = Buf[1] & 0x0F;
|
||
PrintASC16(4, 56, ASC16_Num[0], NORMAL);
|
||
PrintASC16(4, 64, ASC16_xChar, NORMAL);
|
||
if (first_num < 10)
|
||
PrintASC16(4, 72, ASC16_Num[first_num], NORMAL);
|
||
else if (first_num == 10)
|
||
PrintASC16(4, 72, ASC16_A_Char, NORMAL);
|
||
else if (first_num == 11)
|
||
PrintASC16(4, 72, ASC16_B_Char, NORMAL);
|
||
else if (first_num == 12)
|
||
PrintASC16(4, 72, ASC16_CChar, NORMAL);
|
||
else if (first_num == 13)
|
||
PrintASC16(4, 72, ASC16_D_Char, NORMAL);
|
||
else if (first_num == 14)
|
||
PrintASC16(4, 72, ASC16_E_Char, NORMAL);
|
||
else if (first_num == 15)
|
||
PrintASC16(4, 72, ASC16_F_Char, NORMAL);
|
||
if (second_num < 10)
|
||
PrintASC16(4, 80, ASC16_Num[second_num], NORMAL);
|
||
else if (second_num == 10)
|
||
PrintASC16(4, 80, ASC16_A_Char, NORMAL);
|
||
else if (second_num == 11)
|
||
PrintASC16(4, 80, ASC16_B_Char, NORMAL);
|
||
else if (second_num == 12)
|
||
PrintASC16(4, 80, ASC16_CChar, NORMAL);
|
||
else if (second_num == 13)
|
||
PrintASC16(4, 80, ASC16_D_Char, NORMAL);
|
||
else if (second_num == 14)
|
||
PrintASC16(4, 80, ASC16_E_Char, NORMAL);
|
||
else if (second_num == 15)
|
||
PrintASC16(4, 80, ASC16_F_Char, NORMAL);
|
||
PrintASC16(4, 88, ASC16_Claim, NORMAL);
|
||
}
|
||
/**************************显示数字********************************************
|
||
输入参数: Buf[0],page 页,col 列
|
||
输出参数: 无
|
||
返回:无
|
||
*******************************************************************************/
|
||
void Disp_digit_number(unsigned char *addr, unsigned char disp_len, unsigned char page, unsigned char col)
|
||
{
|
||
unsigned char len, i, left, right, j = col;
|
||
len = disp_len;
|
||
for (i = len - 1; i >= 1; i--)
|
||
{
|
||
left = *(addr + i) & 0x0F;
|
||
right = (*(addr + i) & 0xF0) >> 4;
|
||
if (len == 1 && !right)
|
||
{
|
||
PrintASC16(page, j, ASC16_Num[left], NORMAL);
|
||
}
|
||
else
|
||
{
|
||
PrintASC16(page, j, ASC16_Num[left], NORMAL);
|
||
PrintASC16(page, j - 8, ASC16_Num[right], NORMAL);
|
||
j -= 16;
|
||
}
|
||
}
|
||
left = *(addr + i) & 0x0F;
|
||
right = (*(addr + i) & 0xF0) >> 4;
|
||
if (len == 1 && !right)
|
||
{
|
||
PrintASC16(page, j, ASC16_Num[left], NORMAL);
|
||
}
|
||
else if (!right)
|
||
{
|
||
PrintASC16(page, j, ASC16_Num[left], NORMAL);
|
||
j -= 8;
|
||
}
|
||
else
|
||
{
|
||
PrintASC16(page, j, ASC16_Num[left], NORMAL);
|
||
PrintASC16(page, j - 8, ASC16_Num[right], NORMAL);
|
||
j -= 16;
|
||
}
|
||
}
|
||
/**************************判断IP地址格式是否正确********************************************
|
||
输入参数: 1、IP_value 2、FLAG 0:IP、网关和域名 1:掩码
|
||
输出参数: 无
|
||
返回:格式正确 1 格式错误 0
|
||
*******************************************************************************/
|
||
unsigned char Check_IP_Result(unsigned char *IP_value, unsigned char FLAG)
|
||
{
|
||
unsigned char j;
|
||
for (j = 0; j < 12; j += 3) //中间6位0~255
|
||
{
|
||
if (IP_value[j] > 2)
|
||
return 0;
|
||
else if (IP_value[j] == 2)
|
||
{
|
||
if (IP_value[j + 1] > 5)
|
||
return 0;
|
||
else if (IP_value[j + 1] == 5)
|
||
{
|
||
if (IP_value[j + 2] > 5)
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
#if 0 /* delete it by mukesong 2011-01-19 (begin) */
|
||
|
||
if(!FLAG)
|
||
{
|
||
if(((!IP_value[0] && !IP_value[1] && !IP_value[2]) || (!IP_value[9] && !IP_value[10] && !IP_value[11]))==1) return 0; //前3位和后3位非0
|
||
|
||
if(IP_value[0]>2)//前3位不大于223
|
||
return 0;
|
||
else if(IP_value[0]==2)
|
||
{
|
||
if(IP_value[1]>2)
|
||
return 0;
|
||
else if(IP_value[1]==2)
|
||
{
|
||
if(IP_value[2]>3)
|
||
return 0;
|
||
}
|
||
}
|
||
if(IP_value[9]>2)//后3位不大于254
|
||
return 0;
|
||
else if(IP_value[9]==2)
|
||
{
|
||
if(IP_value[10]>5)
|
||
return 0;
|
||
else if(IP_value[10]==5)
|
||
{
|
||
if(IP_value[11]>4)
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if((IP_value[0]!=2) || (IP_value[1]!=5) ||(IP_value[2]!=5)) return 0;//前3位为255
|
||
if((!IP_value[9] && !IP_value[10] && !IP_value[11])!=1) return 0;//最后3位为0
|
||
}
|
||
#endif /* delete the code by mukesong 2011-01-19 (end) */
|
||
return 1;
|
||
}
|
||
/**************************显示1行IP地址********************************************
|
||
输入参数: 1 page 2 col 3 IP_addr 4 FLAG
|
||
输出参数: 无
|
||
返回:
|
||
*******************************************************************************/
|
||
void Disp_IP_ADDR(unsigned char page, unsigned char col, unsigned char *IP_addr, unsigned char FLAG, unsigned char REVERSE_Flag)
|
||
{
|
||
Buffer[5] = ASC8_Dot;
|
||
DispDigits_Reverse(page, col, IP_addr, 3, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 18, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 24, IP_addr + 3, 3, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 42, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 48, IP_addr + 6, 3, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 66, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 72, IP_addr + 9, 3, FLAG, REVERSE_Flag);
|
||
}
|
||
/**************************显示IP地址是否同步********************************************
|
||
输入参数: 1 page 2 col 3 FLAG :1 同步 0 不同步 4 REVERSE_FLAG: 0 NORMAL 1 REVERSE
|
||
输出参数: 无
|
||
返回:
|
||
*******************************************************************************/
|
||
void DISP_SYNC_FLAG(unsigned char page, unsigned char col, unsigned char *FLAG, unsigned char REVERSE_Flag)
|
||
{
|
||
if (FLAG[0] == 0x01)
|
||
/*[是]*/
|
||
PrintFormatStr(page, col, STR_JLGZRZS + 9, 1, REVERSE_Flag);
|
||
else
|
||
/*[否]*/
|
||
PrintFormatStr(page, col, STR_JLGZRZF + 9, 1, REVERSE_Flag);
|
||
}
|
||
/**************************显示系统日期********************************************
|
||
输入参数: 1 page 2 col 3 Date 4 FLAG 5 REVERSE_Flag
|
||
输出参数: 无
|
||
返回:
|
||
*******************************************************************************/
|
||
void Display_Date(unsigned char page, unsigned char col, unsigned char *Date, unsigned char FLAG, unsigned char REVERSE_Flag)
|
||
{
|
||
Buffer[5] = ASC8_Bias;
|
||
DispDigits_Reverse(page, col, Date, 4, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 25, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 32, Date + 4, 2, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 45, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 52, Date + 6, 2, FLAG, REVERSE_Flag);
|
||
// PrintString8(page,col+60,Buffer+5,1,REVERSE_Flag|CENTER);
|
||
}
|
||
/**************************显示系统时间********************************************
|
||
输入参数: 1 page 2 col 3 Time 4 FLAG 5 REVERSE_Flag
|
||
输出参数: 无
|
||
返回:
|
||
*******************************************************************************/
|
||
void Display_Time(unsigned char page, unsigned char col, unsigned char *Time, unsigned char FLAG, unsigned char REVERSE_Flag)
|
||
{
|
||
Buffer[5] = ASC8_Colon;
|
||
DispDigits_Reverse(page, col, Time, 2, FLAG, REVERSE_Flag);
|
||
PrintString8(page, col + 12, Buffer + 5, 1, REVERSE_Flag | CENTER);
|
||
DispDigits_Reverse(page, col + 18, Time + 2, 2, FLAG, REVERSE_Flag);
|
||
}
|
||
/**************************判断时间格式是否正确********************************************
|
||
输入参数: time_value
|
||
输出参数: 无
|
||
返回: 1 格式正确 0 格式错误
|
||
*******************************************************************************/
|
||
unsigned char Right_Or_Error_HourAndMinute(unsigned char *time_value)
|
||
{
|
||
unsigned char hour, minute;
|
||
hour = time_value[0] * 10 + time_value[1];
|
||
minute = time_value[2] * 10 + time_value[3];
|
||
if (hour <= 23 && minute <= 59)
|
||
return 1;
|
||
else
|
||
return 0;
|
||
}
|
||
/**************************判断日期格式是否正确********************************************
|
||
输入参数: time_value
|
||
输出参数: 无
|
||
返回: 1 格式正确 0 格式错误
|
||
*******************************************************************************/
|
||
unsigned char Right_Or_Error_Time(unsigned char *time_value)
|
||
{
|
||
unsigned char month, day;
|
||
unsigned int year;
|
||
year = 2000 + time_value[0] * 10 + time_value[1];
|
||
month = time_value[2] * 10 + time_value[3];
|
||
day = time_value[4] * 10 + time_value[5];
|
||
// printf("the year is %d the month is %d the day is %d\n", year, month, day);
|
||
|
||
if (month >= 1 && month <= 12)
|
||
{
|
||
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
|
||
{
|
||
if (day > 31)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
else if (month == 2)
|
||
{
|
||
if (year % 4 == 0)
|
||
{
|
||
if (day > 29)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (day > 28)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (day > 30)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
return 1;
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/**************************判断8位长度日期格式是否正确********************************************
|
||
输入参数: time_value
|
||
输出参数: 无
|
||
返回: 1 格式正确 0 格式错误
|
||
*******************************************************************************/
|
||
unsigned char Right_Or_Error_LongTime(unsigned char *time_value)
|
||
{
|
||
unsigned char month, day;
|
||
unsigned int year;
|
||
year = time_value[0] * 1000 + time_value[1] * 100 + time_value[2] * 10 + time_value[3];
|
||
month = time_value[4] * 10 + time_value[5];
|
||
day = time_value[6] * 10 + time_value[7];
|
||
// printf("the year is %d the month is %d the day is %d\n", year, month, day);
|
||
|
||
if (month >= 1 && month <= 12)
|
||
{
|
||
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
|
||
{
|
||
if (day > 31)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
else if (month == 2)
|
||
{
|
||
if (year % 4 == 0)
|
||
{
|
||
if (day > 29)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (day > 28)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (day > 30)
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
return 1;
|
||
}
|
||
else
|
||
{
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/*************************请求发送后接收信息错误处理********************************************
|
||
输入参数: len 接收到的数据长度
|
||
输出参数: 无
|
||
返回: 无
|
||
*******************************************************************************/
|
||
void Rev_Error_dealwith(int len)
|
||
{
|
||
if (len == -R_NO_RESPONSE)
|
||
Buf[1] = R_NO_RESPONSE; //无应答
|
||
else if (len == -R_TX_ERR)
|
||
Buf[1] = R_TX_ERR; // STX或ETX错误
|
||
else if (len == -R_LRC_ERR)
|
||
Buf[1] = R_LRC_ERR; // LRC错误
|
||
else if (len == -R_LEN_ERR)
|
||
Buf[1] = R_LEN_ERR; // LEN错误
|
||
// else if(len==-R_ERROR) //接收数据错误,直接放在Buf[1]中
|
||
}
|