📄 setup.c
字号:
memset(buf,0,50);
result=wait_usal_key(0);
if(result==POWER_OFF) return POWER_OFF;
else if(result==OK)
{
//memset(buf,0x30,50);
strcpy(buf,"按[取消]转手工输入\0");
lcd_disp(0,0,buf);
// for(i=0;i<16;i++)buf[i]=0x30+i;send_str(16,buf);
while(1)
{
result=rece(12,&buf[4]);//bar_code(14,buf);
if(result==0){memset(buf,0x30,4);buf[16]=0;break;}//自动加4个0
result = get_key();
if(result ==VOID){buf[0]=0;break;}
if(low_pwr) return POWER_OFF;
}
}
if(buf[0]==0)
{
strcpy(buf,"请输入要设置的机器号:\0");
lcd_disp(0,0,buf);
memset(buf,0,50);
result=get_num(buf);
if(result) break;
}
key=strlen(buf);
if(key==0) break;
if(!(key>15))
{
for(i=0;i<key;i++)buf[20+i]=buf[i];
for(i=0;i<(16-key);i++)buf[i]='0';
for(i=0;i<key;i++)buf[16-key+i]=buf[i+20];
}
//send_str(17,buf);
StrToHex(16,buf);
if(read_eeprom(MANUFACTURER_INFO+8,((uint)sizeof(g_manufacturer_info)-8),&buf[8]))
return(READ_EEPROM_FAIL);
crctemp=crcxdata(sizeof(g_manufacturer_info)-2,buf);
buf[12]=crctemp>>8;
buf[13]=crctemp;
if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
return(WRITE_EEPROM_FAIL);
clear_lcd(0,4);
strcpy(buf,"机器号设置成功!\r");//按任意键继续\r
lcd_disp(2,0,buf);
/* while(1)
{
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
openbacklight();
key=get_key();
if (!key) continue; //如果无键按下则重新扫描
result=0;//beep(300);
//if((key==ENTER)||(key==VOID)||(key==CLEAR))
break; //如果按下确认键就退出
}
*/
break;
case SET_ZHIDATE:
read_eeprom(PIN_TMP1,10,buf);
if(!((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0 || buf[1]==0xFF) &&
(buf[2]==0 || buf[2]==0xFF) && (buf[3]==0 || buf[3]==0xFF) &&
(buf[4]==0 || buf[4]==0xFF) && (buf[5]==0 || buf[5]==0xFF) &&
(buf[6]==0 || buf[6]==0xFF) && (buf[7]==0 || buf[7]==0xFF)))
{
result=253;//CANCE;
break; //机器已初始化
}
//result=enter_application_direct(USER_CARD);
// if(result) return result;
result=check_clear_card(0,&k);
if(result==POWER_OFF) return POWER_OFF;
else if(result) break;//==CANCEL
clear_lcd(0,4);
//strcpy(buf,"请输入机器制造日期:\0");
read_rtc(rtc);
sprintf(buf,"请输入机器制造日期\r如:20%02bx年%02bx月%02bx日输入20%02bx%02bx%02bx\r",
rtc[0],rtc[1],rtc[2],rtc[0],rtc[1],rtc[2]);
lcd_disp(0,0,buf);
memset(buf,0,50);
result=get_num(buf);
if(result) break;
key=strlen(buf);
if(key!=8)break;
StrToHex(8,buf);
for(key=0;key<4;key++)buf[key+8]=buf[key];
if(read_eeprom(MANUFACTURER_INFO,((uint)sizeof(g_manufacturer_info)-6),buf))
return(READ_EEPROM_FAIL);
crctemp=crcxdata(sizeof(g_manufacturer_info)-2,buf);
buf[12]=crctemp>>8;
buf[13]=crctemp;
if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
return(WRITE_EEPROM_FAIL);
clear_lcd(0,4);
strcpy(buf,"机器制造日期设置成功!\r");//按任意键继续\r
lcd_disp(2,0,buf);
/* while(1)
{
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
openbacklight();
key=get_key();
if (!key) continue; //如果无键按下则重新扫描
result=0;// beep(300);
//if((key==ENTER)||(key==VOID)||(key==CLEAR))
break; //如果按下确认键就退出
}
*/
break;
case CLEAR_PINCODE:
// result=enter_application_direct(USER_CARD);
// if(result) return result;
result=check_clear_card(0,&k);
//send_char(k);
if(result==POWER_OFF) return POWER_OFF;
else if(result) break;//==CANCEL
clear_lcd(0,4);
strcpy(buf,"机器重新初始化\r按[确认]键确定\r");
lcd_disp(0,0,buf);
result=wait_usal_key(1);//接受[取消]键或[确认]键
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
/*
while(1)
{
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
openbacklight();
key=get_key();
if (!key) continue; //如果无键按下则重新扫描
// beep(300);
if((key==VOID)||(key==CLEAR))return 0;
if(key==ENTER)break;//||(key==VOID)||(key==CLEAR))//如果按下确认键就退出
else continue;
}
*/
//
update_Clear_card(k);
for(i=0;i<5;i++)buf[i]=0xaa; //设置格式化文件的标志
if(write_eeprom(FORMATFILE,5,buf))
return(WRITE_EEPROM_FAIL);
read_eeprom(PIN_TMP1,10,buf);
if((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0 || buf[1]==0xFF) &&
(buf[2]==0 || buf[2]==0xFF) && (buf[3]==0 || buf[3]==0xFF) &&
(buf[4]==0 || buf[4]==0xFF) && (buf[5]==0 || buf[5]==0xFF) &&
(buf[6]==0 || buf[6]==0xFF) && (buf[7]==0 || buf[7]==0xFF))
{
break; //机器未初始化
}
memset(buf,0xff,50);
if(!(write_eeprom(PIN_TMP1,10,buf)))//break;//清PIN码
strcpy(buf,"设定成功!\r请关机重启!");//\r按任意键继续\r
else strcpy(buf,"设定失败!!");//\r按任意键继续\r
clear_lcd(0,4);
lcd_disp(2,0,buf);
update_Clear_card(k);
/*while(1)
{
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
openbacklight();
key=get_key();
if (!key) continue; //如果无键按下则重新扫描
result=0;
//beep(300);
//if((key==ENTER)||(key==VOID)||(key==CLEAR))
break; //如果按下确认键就退出
}
*/
break;
case FORMAT_FILE:
read_eeprom(PIN_TMP1,10,buf);
if(!((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0 || buf[1]==0xFF) &&
(buf[2]==0 || buf[2]==0xFF) && (buf[3]==0 || buf[3]==0xFF) &&
(buf[4]==0 || buf[4]==0xFF) && (buf[5]==0 || buf[5]==0xFF) &&
(buf[6]==0 || buf[6]==0xFF) && (buf[7]==0 || buf[7]==0xFF)))
{
result=253;//CANCE;
break; //机器已初始化
}
// result=enter_application_direct(USER_CARD);
// if(result) return result;
result=check_clear_card(0,&k);
if(result==POWER_OFF) return POWER_OFF;
else if(result) break;//==CANCEL
clear_lcd(0,4);
strcpy(buf,"机器文件格式化\r按[确认]键确定\r");
lcd_disp(0,0,buf);
result=wait_usal_key(1);//接受[取消]键或[确认]键
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
// memset(buf,0xff,50);
//if(write_eeprom(PIN_TMP1,10,buf))return(WRITE_EEPROM_FAIL);//break;//清PIN码
result=Format_File();
if(result==0) result=OK;
break;
case UPDATE_PROGRAM:
result=check_clear_card(0,&k);
if(result==POWER_OFF) return POWER_OFF;
else if(result) break;//==CANCEL
clear_lcd(0,4);
strcpy(buf,"请插入升级工具\r按[确认]键确定\r");
lcd_disp(0,0,buf);
result=wait_usal_key(1);//接受[取消]键或[确认]键
if(result==POWER_OFF) return POWER_OFF;
else if(result==CANCEL) break;
for(i=0;i<5;i++)buf[i]=0xaa; //设置升级软件档谋曛?
if(write_eeprom(UPDATA_PROGRAM_FLAG,5,buf))
return(WRITE_EEPROM_FAIL);
shut_bat(1);
RestartToBoot();
break;
#endif
default:
break;
}//end of "switch(function_no)"
//--------2.2.2 提示操作结果----------//
catch_error_display(result,0);
//--------2.2.3 回到上一级菜单----------//
/*while(1)
{//等待按键,直到按下"取消"键
if(low_pwr) return POWER_OFF;//如果断电了,则exit
key = get_key();
if(key) beep(100);
if(key==VOID) break;
}*/
//按下"取消"键,回到上一级菜单
//操作结果完毕后直接退回上一级菜单
delayms(3000);
Last_line=0xff;
dismode=0;
layer=MAX_LAYER_MENU;
display_menu_page(switch_mode,layer,menu_Lmax_ST[last_line-1],cur_line);
}//end of "FUNCTION_LAYER"
}//end of "while(1)"
}//end of "setup"
/*==================================================================
函数功能:设置参数结构(固定加成、折扣、辅币兑换率)
入口参数:function--功能号
出口参数:
返回值: ==POWER_OFF,则表示断电,返回
==OK,成功
==CANCEL,取消操作
全局变量:
编制人: 日期:2003-06-22
==================================================================*/
uchar set_parameter_struct(uchar function)
{
uchar xdata disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
uchar key;//键值
#define MAX_KEY_LEN 10 //数字键字符串最大长度
uchar xdata numkey_buf[MAX_KEY_LEN];//输入的数字键字符串缓冲区
uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
uchar error;//错误类别
ulong num;//输入数
uchar bit_no;//辅币号
struct parameter_struct xdata para; //参数结构
uchar i;
//----------初始化----------------//
clear_lcd(0,4);
error=0;
for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
point=0;
max_key_num=2;
bit_no=MAX_BIT_TYPE_NUM;
//---------读参数结构-----------//
if(read_eeprom(PARAMETER,PARAMETER_LEN,¶))
return(READ_EEPROM_FAIL);
if(crcxdata((uint)sizeof(para)-2,¶)!=para.crc)
return(CRC_ERROR);
//----------提示当前功能--------------//
get_menu_name_sp(MAX_LAYER_MENU,function,disp_buf);
lcd_disp(0,0,disp_buf);
//----------提示下一步操作---------------//
if(function==FIXED_SERVICE)
strcpy(disp_buf,"请输入固定加成\r取值范围[1,99]\r");
else if(function==FIXED_DISCOUNT)
strcpy(disp_buf,"请输入固定折扣\r取值范围[1,99]\r");
else
{
strcpy(disp_buf,"请输入辅币号\r取值范围[1,4]\r");
max_key_num=1;
}
lcd_disp(1,0,disp_buf);
//----------等待按键---------------//
while(1)
{
if(error) catch_error_display(error,0);//捕获错误
if(low_pwr) return POWER_OFF;//监测到断电了,则exit
openbacklight();
key = get_key();
if(!key) continue;
//beep(50);
if(error&&key!=CLEAR&&key!=VOID) continue;//出错后,须即时更正或取消操作
switch(key)
{
case VOID://取消操作
clear_lcd(1,2);
return CANCEL;
break;
case CLEAR://即时更正
if(error)//报错时
{
clear_lcd(3,1);//清除错误显示
error=0;//清除错误标志
}
if(numkey_buf[0]!=0)//若有数输入
{
numkey_buf[0]=0;//清除数字输入缓冲区
num=0;
clear_lcd(2,1);//清除数字显示
}
break;
//-------取得输入数字键-------//
case '0' :
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case KEY00://双0
case POINT://小数点
//-------取得输入数字键-------//
error=get_valid_digit(key,point,max_key_num,numkey_buf);
if(error)//输入非法
{
error=KEY_ERROR;
break;
}
//------显示输入数-------//
clear_lcd(2,1);
lcd_disp(2,0,numkey_buf);
break;
case BIT://功能认可
if(function==SET_BIT_RATE)//对于辅币率的设置,须先输入辅币号
{
if(numkey_buf[0]==0)
{
error=KEY_ERROR;
break;
}
num=numstr_to_long(numkey_buf,point,2);//转换输入数为十进制
if(!num)
{
error=KEY_ERROR;
break;
}
if(num>(MAX_BIT_TYPE_NUM))//超过最多可管理辅币数
{
error=OVER_RANGE_ERROR;
break;
}
for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
bit_no = num-1; //注意:用户输入的1-4对应的数组元素的序号为0-3
point = 1;
max_key_num = 7;
//----------提示下一步操作---------------//
//sprintf(disp_buf,"当前为辅币%lu\r请输入兑换率\r",num);
sprintf(disp_buf,"当前为辅币%lu兑换率1:%lu.%02lu\r请输入兑换率\r",num,para.bit_rate[num-1]/100,
para.bit_rate[num-1]%100);
clear_lcd(0,1);
lcd_disp(0,0,disp_buf);
}
else error=KEY_ERROR;
break;
case ENTER://最后确定
if(numkey_buf[0]==0)//未输入任何数字
{
error=KEY_ERROR;
break;
}
if((function==SET_BIT_RATE)&&(bit_no==MAX_BIT_TYPE_NUM))//设置辅币率时,未输入辅币号
{
error=KEY_ERROR;
break;
}
num=numstr_to_long(numkey_buf,point,2);//转换输入数为十进制
if(!num)//检查
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -