?? 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 + -