📄 query.c
字号:
lcd_disp(0,0,disp_buf);
con_disp(0,0,strlen(disp_buf),disp_buf);
if(step<3) break;
else
{
clear_lcd(0,4);
return OK;
}
break;
default:
error=KEY_ERROR;
break;
}
}
}
//==================================================================================
uchar get_add_password(uchar *buf)
{
uchar temp[2],i;
uchar tempbuf0[10],tempbuf1[4];
if(read_rtc(tempbuf0))return 1;
temp[0]=tempbuf0[0]*tempbuf0[0]+tempbuf0[0]*tempbuf0[2]; //年*年+年*天
temp[1]=tempbuf0[0]*tempbuf0[1]+tempbuf0[0]*tempbuf0[2]+temp[0];//年*月+年*天+年*年+年*天
tempbuf1[0]=(((temp[0]&0xf0)>>4)>9)? 0x30:(0x30|((temp[0]&0xf0)>>4));
tempbuf1[1]=((temp[0]&0x0f)>9)? 0x30:(0x30|(temp[0]&0x0f));
tempbuf1[2]=(((temp[1]&0xf0)>>4)>9)? 0x30:(0x30|((temp[1]&0xf0)>>4));
tempbuf1[3]=((temp[1]&0x0f)>9)? 0x30:(0x30|(temp[1]&0x0f));
for(i=0;i<4;i++)*buf++=tempbuf1[i];
return 0;
}
//===================================================================================
uchar get_super_password(void)
{
//uchar tmp_receiver_no;
uchar password[PASSWORD_LEN+10]; //密码
ulong num;
uchar numkey[15],buf[50];
uchar key_tmp;//rlt;//,key_num;
// tmp_receiver_no=0;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
set_value0(password,(uint)sizeof(password));
key_tmp=0;
clear_lcd(0,MAX_LCD_NUM);
strcpy(buf,"请输入超级密码:");
lcd_disp(0,0,buf);
while(1)
{
if(low_pwr) return(POWER_OFF);
openbacklight();
key_tmp=get_key();
if(!key_tmp) continue;//等待按键
if(key_tmp==VOID)//取消退出
{
clear_lcd(0,MAX_LCD_NUM);
return(CANCEL);
}
if(key_tmp==CLEAR)//清除
{
set_value0(numkey,(uint)sizeof(numkey));
clear_lcd(3,1);
num=0;
continue;
}
if(key_tmp>='0' && key_tmp<='9' ) //数字键
{
numkey[num++]=key_tmp;
memcpy(buf,"*****************",strlen(numkey));
buf[strlen(numkey)]=0;
clear_lcd(3,1);
lcd_disp(3,0,buf);
continue;
}
else //功能键
{
//num=numstr_to_long(numkey,0);
switch(key_tmp)
{
case CASH://现金/确认键
if(num==0)
{
clear_lcd(3,1);
strcpy(buf,"按键错误,请重新输入");
lcd_disp(3,0,buf);
num=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
//从eeprom中读出该收款员的密码,并比较
clear_lcd(3,1);
strcpy(buf,"密码校验中...");
lcd_disp(3,0,buf);
if(read_eeprom(SUPERPASSWORD,PASSWORD_LEN,password))
return(READ_EEPROM_FAIL);
get_add_password(password+6);
password[PASSWORD_LEN+4]=0;
//send_str(10,numkey);
if(strcmp(password,numkey))
{
clear_lcd(3,1);
strcpy(buf,"密码不符,请重新输入");
lcd_disp(3,0,buf);
num=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
else
{
clear_lcd(0,MAX_LCD_NUM);
return(0);
}
break;
default:
clear_lcd(3,1);
strcpy(buf,"按键错误,请重新输入");
lcd_disp(3,0,buf);
num=0;
key_tmp=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
}
}
return(0);
}
//====================================================================================
uchar get_start_time_affair(uchar *timebuf,uchar mode)
{
uchar xdata disp_buf[MAX_LCD_COL*MAX_LCD_NUM+1];//显示缓冲,长度为lcd一页
uchar key;//键值
uchar numkey_buf[15];//输入的数字键字符串缓冲区
uchar point,max_key_num;//是否允许输入小数,最大允许输入键数
uchar error;//错误类别
uchar bit_no;//辅币号
uchar i;
uchar xdata rtc[7];
//uint year;
//uchar month,day;
//----------初始化----------------//
clear_lcd(0,MAX_LCD_NUM);
error=0;
for(i=0;i<MAX_KEY_LEN;i++) numkey_buf[i]=0;//初始化数字输入缓冲区
point=0;
max_key_num=12;
bit_no=MAX_BIT_TYPE_NUM;
//----------提示当前功能--------------//
//get_menu_name_sp(MAX_LAYER_MENU,SET_TIME,disp_buf);
//lcd_disp(0,0,disp_buf);
//----------提示下一步操作---------------//
if(!mode)
{
read_rtc(rtc);
sprintf(disp_buf,"请输入开始日期与时间如:\r20%02bx年%02bx月%02bx日%02bx:%02bx\r输入:20%02bx%02bx%02bx%02bx%02bx\r",
rtc[0],rtc[1],rtc[2],rtc[3],rtc[4],rtc[0],rtc[1],rtc[2],rtc[3],rtc[4]);
lcd_disp(0,0,disp_buf);
strcpy(disp_buf,"按[确定]键为全部记录");
lcd_disp(3,0,disp_buf);
}
else {strcpy(disp_buf,"请输入事件类型代码:\r");lcd_disp(0,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;//清除数字输入缓冲区
clear_lcd(3,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
//-------取得输入数字键-------//
error=get_valid_digit(key,point,max_key_num,numkey_buf);
if(error)//输入非法
{
error=KEY_ERROR;
break;
}
//------显示输入数-------//
clear_lcd(3,1);
lcd_disp(3,0,numkey_buf);
break;
case ENTER://最后确定
if(!mode)
{
for(i=0;i<(strlen(numkey_buf)/2-1);i++)
rtc[i]=(numkey_buf[i*2+2]-0x30)*0x10+numkey_buf[i*2+3]-0x30;
for(i=0;i<(strlen(numkey_buf)/2-1);i++)*timebuf++=rtc[i];
}
else
{
if(numkey_buf[1]) *timebuf=(numkey_buf[0]-0x30)*0x10+numkey_buf[1]-0x30;
else *timebuf=numkey_buf[0]-0x30;
}
return 0;
break;
default:
error=KEY_ERROR;
break;
}
}
}
//======================================================================================
uint look_up_fau(uchar *buf,uchar mode,uint temp)
{
uchar addbuf[10];
uint addtemp;
uint i;
uchar lrc;
ulong fauadd;
if(read_eeprom(FAU_Quantity,2,&addtemp))return 0;
if(!mode) //按时间
{
for(i=0;i<addtemp;i++)
{
fauadd=FAU_DATA_START_ADD+9*i;
if(i%yisectorqu)fauadd+=7;
if(read_flash(fauadd,9,addbuf))return 0;
lrc=lrcdata(8,1,addbuf);
if(((addbuf[0]>buf[0])
||((addbuf[0]==buf[0])&&(addbuf[1]>buf[1]))
||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]>buf[2]))
||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]==buf[2])&&(addbuf[3]>buf[3]))
||((addbuf[0]==buf[0])&&(addbuf[1]==buf[1])&&(addbuf[2]==buf[2])&&(addbuf[3]==buf[3])&&(addbuf[4]>=buf[4]))
)&&(lrc==addbuf[8])) return i+1;
}
}
else ////按事件
{
for(i=temp;i<addtemp;i++)
{
fauadd=FAU_DATA_START_ADD+9*i;
if(i%yisectorqu)fauadd+=7;
if(read_flash(fauadd,9,addbuf))return 0;
lrc=lrcdata(8,1,addbuf);
if((addbuf[5]==buf[0])&&(lrc==addbuf[8])) return i+1;
}
}
return 0xffff;
}
//====================================================================================
void disp_fauqu(uchar fau)
{
uchar buf[25];
strcpy(buf,"事件类型为:");
switch(fau)
{
case SYSINTI:
strcat(buf,"系统初始化");
break;
case SOLFWAREUPDATE:
strcat(buf,"应用软件维护");
break;
case TIMEUPDATE:
strcat(buf,"系统时间更改");
break;
case USERUPDATE:
strcat(buf,"用户权限更改");
break;
case INTPUTDATA:
strcat(buf,"外部接口通讯");
break;
case CLEARFAUDATA:
strcat(buf,"审计记录删除");
break;
case FAILURREAFFAIRS:
strcat(buf,"失败事件记录");
break;
default:
strcat(buf,"其他审计记录");
break;
}
lcd_disp(1,0,buf);
}
//===================================================================================
void disp_fauresult(uchar *fau)
{
uchar buf[25];
uchar buf1[5];
strcpy(buf,"事件结果为:");
if(!*fau)strcat(buf,"成功");//0成功
else strcat(buf,"失败");//1失败
lcd_disp(3,0,buf);
strcpy(buf,"操作用户为:");//1失败
buf1[0]=(*(fau+1)/10)|0x30;
buf1[1]=(*(fau+1)%10)|0x30;
buf1[2]=0;
strcat(buf,buf1);
strcat(buf,"号");
lcd_disp(2,0,buf);
}
//====================================================================================
/*uchar display_faudata(uint start,uchar mode)
{
uchar addbuf[10];
uint addtemp;
uint temp,temp0,oldtemp;
uchar disp_buf[25];
uchar buf1[5];
uchar key_buf;
uchar lrc;
ulong fauadd;
temp=start;
temp--;
if(read_eeprom(FAU_Quantity,2,&addtemp))return 1;
while(1)
{
if((temp!=oldtemp)&&(temp!=0xffff))
{
clear_lcd(0,MAX_LCD_NUM); //清最大显示行数4行
oldtemp=temp;
fauadd=FAU_DATA_START_ADD+9*temp;
lrc=temp%yisectorqu;
if((lrc==0)&&(temp!=0))fauadd+=7;//跨区
if(read_flash(fauadd,9,addbuf))return 1;
lrc=lrcdata(8,1,addbuf);
if(lrc==addbuf[8])
{
sprintf(disp_buf,"20%02bx年%02bx月%02bx日%02bx时%02bx分\r"
,addbuf[0],addbuf[1],addbuf[2],addbuf[3],addbuf[4]);
lcd_disp(0,0,disp_buf);
disp_fauqu(addbuf[5]);
if((addbuf[6]==0)||(addbuf[6]==1))disp_fauresult(&addbuf[6]);
else
{
//strcpy(disp_buf,"失败的操作为:");
strcpy(disp_buf,"操作用户为:");//1失败
buf1[0]=(addbuf[7]/10)|0x30;
buf1[1]=(addbuf[7]%10)|0x30;
buf1[2]=0;
strcat(disp_buf,buf1);
strcat(disp_buf,"号");
lcd_disp(2,0,disp_buf);
catch_error_display(addbuf[6],1);
}
}
else
{
strcpy(disp_buf,"对不起,未查到下一条");
lcd_disp(3,0,disp_buf);
}
}
if(low_pwr) return POWER_OFF;//如果断电了,则exit
openbacklight();
key_buf= get_key();
if(key_buf)
{
switch(key_buf)
{
case UP_ARROW:
if(temp<=start-1) {break;}
else if(!mode)temp--;
else if(temp>(start-1))
{
temp0=look_up_fau(&fau_Affairs,1,temp-1);
temp=temp0-1;
}
break;
case DOWN_ARROW://后翻页
if(temp>=addtemp-1) {strcpy(disp_buf,"对不起,审计类已查完");lcd_disp(3,0,disp_buf);break;}
else if(!mode)temp++;
else
{
if(mode)
{
temp0=look_up_fau(&fau_Affairs,1,temp+1);
if((temp!=0)||(temp!=0xffff))tem
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -