⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfunc_chkpb.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
#include "includes.h"
#include "file.h"
#include "filesys.h"
#include "event.h"
#include "funclcd.h"
#include "funcfontlib.h"
#include "picture.h"

extern INT8U rom usrpri_file[];

extern unsigned char DebugContent[48];

extern OS_MEM			*pMemSml;
extern OS_MEM			*pMemLge;

extern INT8U rom IdleNumBuf[];
extern INT8U rom IdleNumBufPTR;

extern unsigned char GetPYNode(unsigned char);

extern void Func_SetVoiceCh(INT8U ctl);

extern void Display_SM(unsigned char Y_N);

extern INT8U EnterTextEdit(void);
extern void MenuDisplayKey(INT8U menu);
extern INT8U MFunc_OperateSM(INT16U rom *pItems, INT8U Num);

extern INT8U MFunc_InsertPhoneBookItem(INT16U rom * pName, INT8U NameLen, INT8U rom * pNum, INT8U NumLen, INT8U Group);
extern INT8U MFunc_DeletePhoneBookItem(INT8U Index);
extern INT8U MFunc_SearchItem(INT16U rom * pName);
extern void MFunc_DirectCall(INT8U rom * ptrData, INT8U Len);
extern INT8U MFunc_WaitForInput(INT8U val);


extern INT8U CurMenu;
extern INT8U PrevMenu;	//used when exit from MENU_BOOK_END


#define	MENU_ROOT			0


extern rom INT16U	tmpCurText[160];
extern rom INT16U	*CurText;
extern INT8U		CurTextLen;
extern rom INT8U	CurPhoneNum[24];
extern INT8U		CurPhoneNumLen;
extern rom INT16U TextNoRecord[6];

extern void MenuDisplayPhone(INT8U line_no,INT8U len,rom INT8U *ptr);
extern INT8U EnterPhoneEdit(void);
extern INT8U PB_SearchInsertP(INT16U rom  * pName, PHONEBOOK * pb);


extern INT16U rom OperPBItem1[];
extern INT16U rom OperPBItem2[];
//#pragma romdata CCODE
//INT16U rom OperPBItem1[] = {0x7f16,0x8f91,0x0000};					//edit
//INT16U rom OperPBItem2[] = {0x5220,0x9664,0x0000};					//delete

//#pragma code MYCODE

INT8U MFunc_CheckPhoneBook(void){
	INT8U chrTemp,i,no_record,err,pos,fhdl;
	INT8U retval,ret2;
	INT8U rom * pMsg;
	INT8U rom * pSml;
	INT16U tmp;
	PHONEBOOK * pbp;	

	no_record = FALSE;
	fhdl = file_open(usrpri_file, (INT8U rom **)(&pbp));
	pbp = &(((F_UserPrivate *)pbp)->PhoneBook);


	if(pbp->item[pbp->head].next == pbp->tail){
		Do_Clear_Screen(2,0,5,127);
		(void)app_printf(TextNoRecord,3,2,0);
		no_record = TRUE;
	}
	if(no_record == FALSE){
		CurTextLen = 0;	//clear the buffer
		retval=EnterTextEdit();
		if(retval==2){				//user conform the input text (Name)
			if(CurTextLen == 0){	//no input
				chrTemp = pbp->head;
			}
			else{
				*(CurText+CurTextLen) = 0x0000;
				chrTemp = PB_SearchInsertP(CurText, pbp);
			}
			Display_Menu_Icon(0,&PIC_SELECTION);
			Display_Menu_Icon(1,&PIC_RETURN);
		}
		else
			return(retval);			//MSG_MENU_CANCEL or Key-C
	}
	for(;;){
		if(no_record == FALSE){
			pos = 0;

			Do_Clear_Screen(2,0,5,127);
			for(i=0;i<3;i++){
				tmp = pbp->item[chrTemp].name[0];
				if( (tmp== 0x0000) || (tmp >= 0xfe00)){
					chrTemp = pbp->item[chrTemp].next;
				} 
				else break;
			}
			(void)app_printf(pbp->item[chrTemp].name,0,2,0);
			CurPhoneNumLen=app_c2a(pbp->item[chrTemp].number,12,CurPhoneNum);
			MenuDisplayPhone(4,CurPhoneNumLen,CurPhoneNum);
		}

		switch(MFunc_WaitForInput(0)){
			case 0xff:
				return(1);
			
			case KEY_FUNC1:
				if(no_record == TRUE) break;
				retval = MFunc_OperateSM(OperPBItem1, 2);
				if(retval == 0){	//edit
					CurPhoneNumLen=app_c2a(pbp->item[chrTemp].number,12,CurPhoneNum);
					CurText=tmpCurText;
					CurTextLen=0;
					for(i=0;i<8;i++){
						CurText[i]=pbp->item[chrTemp].name[i];
						if(CurText[i]==0x0000)	break;
						CurTextLen++;
					}
					ret2=EnterPhoneEdit();
					if(ret2==1){
						return(1);
					}
					else if(ret2==2){
						(void)MFunc_DeletePhoneBookItem(chrTemp);
						chrTemp=MFunc_InsertPhoneBookItem(CurText, CurTextLen, CurPhoneNum, CurPhoneNumLen, 0);
					}

					Display_Menu_Icon(0,&PIC_SELECTION);
					Display_Menu_Icon(1,&PIC_RETURN);
				}
				else if(retval == 1){	//delete
					chrTemp = MFunc_DeletePhoneBookItem(chrTemp);
					if(chrTemp == pbp->item[pbp->item[chrTemp].previous].previous){
						Do_Clear_Screen(2,0,5,127);
						app_printf(TextNoRecord,3,2,0);
						no_record = TRUE;
					}
			}
			else if(retval == 0xff){	//exit due to MSG_MENU_CANCEL
				return(1);
			}
			//if "0xfe"(cancel) just break out
			break;
		case KEY_FUNC2:
		case KEY_C:
			return(0);
		case KEY_UP:
			chrTemp = pbp->item[chrTemp].previous;
			for(i=0;i<3;i++){
				tmp = pbp->item[chrTemp].name[0];
				if( (tmp== 0x0000) || (tmp >= 0xfe00)){
					chrTemp = pbp->item[chrTemp].previous;
				}
				else break; 
			}
			break;
		case KEY_DOWN:
			chrTemp = pbp->item[chrTemp].next;
			break;
		case KEY_SEND:
			if(no_record == TRUE) break;
			CurMenu=MENU_ROOT;
			MenuDisplayKey(MENU_ROOT);
			Do_Clear_Screen(2,0,5,127);
			Do_Clear_Screen(6,32,7,95);	
			MFunc_DirectCall(pbp->item[chrTemp].number, 12);
			break;
		}
	}
}	


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -