static char PhoneHandleBeiZhu(char *msg) { FILE *fp; u8 dispbuff[30]; int numPhone; clear_lcd(); fp=fopen("PhoneBook","rb"); if(fp!=NULL){ //如果有记录,则先把记录读到phonebuff 。 #ifdef DEBUG_PRINTF printf("open PhoneBook success!!\n"); #endif fread(dispbuff,10,1,fp); }else{ text_out_to_row_x_Language2(2,40,"没有记录","没有记录"); goto tuichu; } numPhone=*msg; //如果msg==NULL,则会引起segmentation fault。 fseek(fp,10+numPhone*98+12+18+18+20,SEEK_SET); fread(dispbuff,sizeof(dispbuff),1,fp); fclose(fp); text_out_to_row_x_Language2(0,40,"【备注】","【备注】"); my_DisplayBuff(dispbuff,1,2); tuichu: KeyIsResponse(); SetBLOverTime(10); SetAutoExitTime(10); WaitkeyAndAutoExit(10); return 0; }
static char PhoneSearch(char *msg) { EFILE efile; u8 receive[12]; u8 tempbuff[50]; u8 dispbuff[50]; int i; struct OperateDisplay disp={0,0, 0,0,MaxRowOneScr ,1}; unsigned char retval; unsigned char keyval; retval=GetString_abcABC123PYWuBi_Language2("【输入姓名】","Input name",SRF_PY|SRF_BiHua|SRF_abc|SRF_ABC|SRF_123,SRF_abc,receive,sizeof(receive),0); if(retval!=KEY_Enter)return retval; if(strlen((sc8*)receive)==0)goto tuichu; loop: clear_lcd(); //fp=fopen("PhoneBook","rb"); retval=EepromFile_Open(file_phonebook,&efile); retval=EepromFile_ReadData(tempbuff,10,file_phonebook); if(retval==EepromFile_ReadOk){ //如果有记录,则先把记录读到phonebuff 。 disp.MenuTotal=atoi((sc8*)tempbuff); }else{ DrawTitle_to_row_Language2(2,"没有记录","No record"); goto tuichu; } retval=EepromFile_Open(file_phonebook,&efile); for(i=0;i<disp.MenuTotal;i++){ EepromFile_Seek(&efile,10+i*98,EepromFile_SEEK_SET); EepromFile_read(dispbuff,12,&efile); if(my_FFstrstr((sc8*)dispbuff,(sc8*)receive)==1){ disp.Menucnt=i; if(disp.Menucnt<disp.EndLine-disp.StartLine){ disp.curFlashRow+=disp.Menucnt; }else{ disp.curFlashRow=disp.EndLine-1; } break; } } if(i>=disp.MenuTotal){DrawTitle_to_row_Language2(2,"找不到此记录","Can't find record");goto tuichu;} KeyIsResponse(); while(1){ if(disp.flashflag){ disp.flashflag=0; for(i=disp.StartLine;i<disp.EndLine&&i<disp.MenuTotal+disp.StartLine;i++){ //fseek(fp,10+(disp.Menucnt-disp.curFlashRow+i)*98,SEEK_SET); //fread(dispbuff,12,1,fp); EepromFile_Seek(&efile,10+(disp.Menucnt-disp.curFlashRow+i)*98,EepromFile_SEEK_SET); EepromFile_read(dispbuff,12,&efile); steaddraw_pic_to_row_x(PhoneNameIco,0,i,12,12); text_out_to_row_x_fillSpace(i,16,dispbuff); } DispHighLightRow_to_x(16,disp.curFlashRow); //高亮 } keyval=GetKeyValue(); if(keyval == KEY_NONE) continue; KeyEventPost(); switch(keyval){ case KEY_UP: my_OperateDisplay_KEY_UP(&disp); break; case KEY_DOWN: my_OperateDisplay_KEY_DOWN(&disp); break; case KEY_Enter: case KEY_RIGHT: if(HandlePhoneSelection(disp.Menucnt)==KEY_ReturnInitInterface){ //fclose(fp); return KEY_ReturnInitInterface; } disp.flashflag=1; disp.curFlashRow=0; //fclose(fp); goto loop; case KEY_ReturnPrevious: case KEY_ReturnInitInterface: case KEY_WaitTimeout: //fclose(fp); return keyval; } KeyIsResponse(); } tuichu: WaitkeyAndAutoExit(10); return 0; }
static char PhoneExplorer(char *msg) { EFILE efile; u8 dispbuff[50]; int i; struct OperateDisplay disp={0,0, 0,0,MaxRowOneScr ,1}; unsigned char keyval; loop: clear_lcd(); keyval=EepromFile_ReadData(dispbuff,10,file_phonebook); if(keyval==EepromFile_ReadOk){ //如果有记录,则先把记录读到phonebuff 。 disp.MenuTotal=atoi((sc8*)dispbuff); if(disp.MenuTotal==0){ text_out_to_row_x_Language2(40,2,"没有记录","No record"); goto tuichu; } }else{ text_out_to_row_x_Language2(2,40,"没有记录","No record"); goto tuichu; } keyval=EepromFile_Open(file_phonebook,&efile); KeyIsResponse(); while(1){ if(disp.flashflag){ disp.flashflag=0; for(i=disp.StartLine;i<disp.EndLine&&i<disp.MenuTotal+disp.StartLine;i++){ EepromFile_Seek(&efile,10+(disp.Menucnt-disp.curFlashRow+i)*98,EepromFile_SEEK_SET); EepromFile_read(dispbuff,12,&efile); steaddraw_pic_to_row_x(PhoneNameIco,0,i,12,12); text_out_to_row_x_fillSpace(i,16,dispbuff); } DispHighLightRow_to_x(16,disp.curFlashRow); //高亮 } keyval=GetKeyValue(); if(keyval == KEY_NONE) continue; KeyEventPost(); switch(keyval){ case KEY_UP: my_OperateDisplay_KEY_UP(&disp); break; case KEY_DOWN: my_OperateDisplay_KEY_DOWN(&disp); break; case KEY_Enter: case KEY_RIGHT: if(HandlePhoneSelection(disp.Menucnt)==KEY_ReturnInitInterface){return KEY_ReturnInitInterface;} disp.flashflag=1; //fclose(fp); goto loop; case KEY_ReturnPrevious: case KEY_ReturnInitInterface: case KEY_WaitTimeout: //fclose(fp); return keyval; } KeyIsResponse(); } tuichu: return (WaitkeyAndAutoExit(10)); }
static s8 PhoneHandleNameXiuGai(s8 *msg) { static u8 PhoneNumber[18],PhoneName[12],PhoneZuoJi[18],PhoneEmail[20],PhoneBeiZhu[30],PhoneSave[5]; char temp[50]; int numPhone; EFILE efile; static struct FunctionMenuAddIco Menu[]={ {PhoneNameIco, PhoneName, PhoneNameSize, PhoneAddName}, {PhoneNumberIco,PhoneNumber,PhoneNumberSize,PhoneAddNumber}, {PhoneZuoJiIco, PhoneZuoJi, PhoneZuoJiSize, PhoneAddZuoJi}, {PhoneEmailIco, PhoneEmail, PhoneEmailSize, PhoneAddEmail}, {PhoneBeiZhuIco,PhoneBeiZhu,PhoneBeiZhuSize,PhoneAddBeiZhu}, {PhoneSaveIco, PhoneSave, PhoneSaveSize, PhoneAddSave} }; struct OperateAddIco MenuOp={Menu,sizeof(Menu) / sizeof(Menu[0]),0,0,0,MaxRowOneScr,1,0}; if(Language[0]==LOCAL_LANGUAGE){ strcpy((char *)PhoneNumber,(const char *)con_Chinese_PhoneNumber); strcpy((char *)PhoneName,(const char *)con_Chinese_PhoneName); strcpy((char *)PhoneZuoJi,(const char *)con_Chinese_PhoneZuoJi); strcpy((char *)PhoneEmail,(const char *)con_Chinese_PhoneEmail); strcpy((char *)PhoneBeiZhu,(const char *)con_Chinese_PhoneBeiZhu); strcpy((char *)PhoneSave,(const char *)con_Chinese_PhoneSave); } else{ strcpy((char *)PhoneNumber,(const char *)con_English_PhoneNumber); strcpy((char *)PhoneName,(const char *)con_English_PhoneName); strcpy((char *)PhoneZuoJi,(const char *)con_English_PhoneZuoJi); strcpy((char *)PhoneEmail,(const char *)con_English_PhoneEmail); strcpy((char *)PhoneBeiZhu,(const char *)con_English_PhoneBeiZhu); strcpy((char *)PhoneSave,(const char *)con_English_PhoneSave); } clear_lcd(); KeyIsResponse(); temp[0]=EepromFile_ReadData((unsigned char *)temp,10,file_phonebook); if(temp[0]!=EepromFile_ReadOk){ //如果有记录,则先把记录读到phonebuff 。 clear_lcd(); text_out_to_row_x_Language2(2,40,"没有记录","No record"); return KEY_ReturnPrevious; } EepromFile_Open(file_phonebook,&efile); numPhone=*msg; //如果msg==NULL,则会引起segmentation fault。 EepromFile_Seek(&efile,10+numPhone*98,EepromFile_SEEK_SET); EepromFile_read(PhoneName,PhoneNameSize,&efile); EepromFile_read(PhoneNumber,PhoneNumberSize,&efile); EepromFile_read(PhoneZuoJi,PhoneZuoJiSize,&efile); EepromFile_read(PhoneEmail,PhoneEmailSize,&efile); EepromFile_read(PhoneBeiZhu,PhoneBeiZhuSize,&efile); while(1){ MenuHandler_AddIco(&MenuOp); if(MenuOp.RetVal==KEY_Enter){ if(MenuOp.Menucnt==MenuOp.MenuTotal-1){ if(PhoneDeleteARecord(numPhone)==RIGHT_return){ MenuOp.FucRetVal=MenuOp.Menu->MenuFuc((u8 *)Menu,0); } return MenuOp.FucRetVal; }else{ strcpy(temp,(sc8*)(MenuOp.Menu->MenuStr)); MenuOp.FucRetVal=MenuOp.Menu->MenuFuc(MenuOp.Menu->MenuStr,MenuOp.Menu->size); if(strlen((sc8*)(MenuOp.Menu->MenuStr))==0){ strcpy((s8*)(MenuOp.Menu->MenuStr),temp); } } if(MenuOp.FucRetVal==KEY_WaitTimeout||MenuOp.FucRetVal==KEY_ReturnInitInterface){CurProc=CurProc_Return;return MenuOp.FucRetVal;} else{clear_lcd();MenuOp.flashflag=1;} }else{ return MenuOp.RetVal; } } #undef PhoneNumber #undef PhoneName #undef PhoneZuoJi #undef PhoneEmail #undef PhoneBeiZhu #undef PhoneSave }
static char Calculator(char *msg)//2.计算器 { unsigned char abuff[50]; //因为abuff 要做结果存储,所以要申请大一点,否则如果数值太大,会segmentation fault unsigned char bbuff[22]; signed char jjcc[2]={0,0}; signed char input09,inputcnt; signed char inputFlag; unsigned char keyval; enum {WaitFirst,WaitFirst_inputed,WaitSecond,WaitSecond_inputed}ope; ope=WaitFirst; inputcnt=0; clear_lcd(); text_out_to_row_x_Language2(0,34,"【计算器】","Calculator"); draw_line(0,12,132,12,1); draw_line(0,11,132,11,1); text_out_to_row_fillSpace(1,"0"); while(1){ keyval=GetKeyValue(); if(keyval==0)continue; KeyEventPost(); inputFlag=0; switch(keyval){ case KEY0: inputFlag=1; input09= '0';break; //号码键 case KEY1: inputFlag=1; input09= '1';break; case KEY2: inputFlag=1; input09= '2';break; case KEY3: inputFlag=1; input09= '3';break; case KEY4: inputFlag=1; input09= '4';break; case KEY5: inputFlag=1; input09= '5';break; case KEY6: inputFlag=1; input09= '6';break; case KEY7: inputFlag=1; input09= '7';break; case KEY8: inputFlag=1; input09= '8';break; case KEY9: inputFlag=1; input09= '9';break; case KEYJING: inputFlag=1; input09= '.';break; //小数点键 case KEY_UP: inputFlag=2; input09= '+';break; //加 case KEY_DOWN: inputFlag=2; input09= '-';break; //减 case KEY_LEFT: inputFlag=2; input09= '*';break; //乘 case KEY_RIGHT: inputFlag=2; input09= '/';break; //除 case KEYXING: inputFlag=2; input09= '&';break; case KEY_Enter: //等于键 if(ope==WaitSecond_inputed){ if(strlen((char const *)abuff)<sizeof(bbuff)-3){ calculate_result(abuff,(char const *)bbuff,(char const *)jjcc); }else{ clear_area_to_row(1,3); text_out_to_row_fillSpace(2,"数据太大!无法计算!"); } ope=WaitFirst_inputed; inputcnt=0; }else{ //如果只是输入了第一个数据,按确认则清0。 clear_area_to_row(1,3); text_out_to_row_fillSpace(1,"0"); ope=WaitFirst; inputcnt=0; } break; case KEY_DEL: //删除返回键 if(inputcnt){ inputcnt--; if(ope==WaitFirst_inputed){abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);} else if(ope==WaitSecond_inputed){bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);} }else{ //return 1; } case KEY_ReturnInitInterface: case KEY_ReturnPrevious: KeyIsResponse(); return keyval; } if(inputFlag==1&&inputcnt<sizeof(bbuff)-3){ //如果有0到9.输入并且没有超过规定的位数 if(inputcnt==0&&input09=='.'){ if(ope==WaitFirst||ope==WaitFirst_inputed){ope=WaitFirst_inputed;abuff[inputcnt++]='0';abuff[inputcnt++]='.';abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);} else if(ope==WaitSecond||ope==WaitSecond_inputed){ope=WaitSecond_inputed;bbuff[inputcnt++]='0';bbuff[inputcnt++]='.';bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);} }else if(inputcnt!=0||input09!='0'){ //如果输入的第一个数不为0 if(ope==WaitFirst||ope==WaitFirst_inputed){ope=WaitFirst_inputed;abuff[inputcnt++]=input09;abuff[inputcnt]=0;text_out_to_row_fillSpace(1,abuff);} else if(ope==WaitSecond||ope==WaitSecond_inputed){ope=WaitSecond_inputed;bbuff[inputcnt++]=input09;bbuff[inputcnt]=0;text_out_to_row_fillSpace(3,bbuff);} } } if(inputFlag==2){ if(ope==WaitFirst_inputed||ope==WaitSecond){ //如果输入了第一个并在等待第二个时,可以更换运算符。 if(input09=='&'){if(jjcc[0]=='+')jjcc[0]='-';else if(jjcc[0]=='-')jjcc[0]='*';else if(jjcc[0]=='*')jjcc[0]='/';else jjcc[0]='+';} else jjcc[0]=input09; text_out_to_row_x_fillSpace(2,6,(unsigned char const *)jjcc); ope=WaitSecond; inputcnt=0; }else if(ope==WaitSecond_inputed){ //如果输入了第二个数据,则计算出结果,并可以连算。 calculate_result(abuff,(char const *)bbuff,(char const *)jjcc); if(input09=='&')jjcc[0]='+'; else jjcc[0]=input09; text_out_to_row_x_fillSpace(2,6,(unsigned char const *)jjcc); ope=WaitSecond; inputcnt=0; } } #ifdef DEBUG_PRINTF printf("inputFlag=%d, inputcnt=%d\n",inputFlag,inputcnt); #endif KeyIsResponse(); } }