示例#1
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);

	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));
}
示例#2
0
//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;
}
示例#3
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();
	}
}