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); 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; } } tuichu: return (WaitkeyAndAutoExit(10)); }
//static char PhoneSearch(char *msg) 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;} 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; } } tuichu: WaitkeyAndAutoExit(10); return 0; }
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(); } }