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

📄 tskmenu.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
📖 第 1 页 / 共 4 页
字号:
//#include <p18cxxx.h>
//To manage the menu display and explain meaning of key
#include "includes.h"
#include "tskmenu.h"
#include "picture.h"
#include "funcCommon.h"
#include "event.h"
#include "funclcd.h"
#include "funcfontlib.h"
#include "funcfile.h"
#include "hardware.h"
#include "file.h"
#include "filesys.h"
#include "device.h"
#include "f_callrecord.h"

//extern MCNM_FILE	SystemFile;

extern unsigned char DebugContent[48];

extern OS_MEM			*pMemSml;
extern OS_MEM			*pMemLge;

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

extern unsigned char GetPYNode(unsigned char);

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);
INT16U rom * PB_SearchMatchItem(INT8U rom *pnum, INT8U len);
extern INT8U MFunc_CheckPhoneBook(void);

extern INT8U MFunc_CheckSM(INT8U type);
extern INT8U MFunc_SaveSM(INT8U rom * psm, INT8U type);

extern void Func_GetSysTime(NM_TIME * ptrTime);

void MenuInit(void);

//void Func_DisplayNumAndTime(INT8U rom * ptrNum, INT8U Len, NM_TIME * ptrTime);
INT8U MFunc_Select_Ring(void);
INT8U MFunc_BackLedSet(void);
INT8U MFunc_LocalNumberSet(void);
INT8U MFunc_ReadSM(INT8U * item);
void Func_DisplaySmallIndex (INT8U Index);
INT8U MFunc_EditSMS(INT8U type);

void MFunc_DirectCall(INT8U rom * ptrData, INT8U Len);
INT8U MFunc_WaitForInput(INT8U);

#pragma romdata EXTRAM
INT8U CurMenu;
INT8U PrevMenu;	//used when exit from MENU_BOOK_END

//电话本编辑和文本编辑
rom INT16U	tmpCurText[160];				//临时的全局变量,仅用于调试(分配一块内存,用于文本编辑)

rom INT8U	CurPhoneNum[24];				//电话号码(ASCII代码)
INT8U		CurPhoneNumLen;					//电话号码长度
rom INT16U	*CurText;						//文本字符串或姓名字符串指针(必须指向RAM的变量,因为可能要修改其中的内容)
INT8U		CurTextLen;						//文本字符串或姓名字符串的长度
INT8U		CurTextIstPos;
INT8U		CurTextWest;					//English or Chinese

rom INT8U	CurInputChars[8];				//拼音输入时,字母字符串
INT8U 		CurInputCharsLen;				//拼音输入时,已输入字母长度
INT8U		CurInputMethod;					//输入法
INT8U		CurLineNo;						//符号或英文的行号(Symbol and English)

rom INT16U * pLetterLine;					//显示某个数字键所代表的几个字母,以供选择;(英文输入)
											//或显示某行特殊符号,以供选择。(符号输入)
											//或显示待选汉字,以供选择(拼音输入)
											
INT8U		LetterLinePos;					//当前字母或数字位置(英文输入)
											//或当前显示首个汉字的序号(如果只有一屏,则为0;两屏,则为MAX_DISP_HANZI_SEL)
INT8U		HanZiSelNum;					//供选择的汉字的个数
INT8U		PrevKey;						//上次按的键(ASCII码)
INT8U		MenuTimerRunning;				//定时器是否在运行。(英文输入)
INT8U		CurInputCase;					//大小写
INT8U		HanZiSel;						//汉字正待选择

INT8U EnterTextEdit(void);
void MenuDisplayText(void);

INT8U EnterPhoneEdit(void);
void MenuDisplayPinYin(unsigned char);

void MFunc_WaitSendResult(void);

//extern OS_EVENT 	*rom peventTimer;


#pragma romdata CCODE

//four fix word
rom INT8U fixword4[][8]={
{0x1A,0x90,0xDD,0x8B,0xB0,0x8B,0x55,0x5F },	//(0) 通话记录(0x901A,0x8BDD,0x8BB0,0x5F55)
{0x87,0x65,0x2C,0x67,0xE1,0x4F,0x6F,0x60},	//(1) 文本信息
{0x2C,0x67,0x3A,0x67,0xBE,0x8B,0x6E,0x7F},	//(2) 本机设置
{0x51,0x7F,0xDC,0x7E,0x9F,0x52,0xFD,0x80},	//(3) 网络功能
{0x2A,0x67,0xA5,0x63,0x65,0x67,0x35,0x75},	//(4) 未接来电
{0xF2,0x5D,0xA5,0x63,0x65,0x67,0x35,0x75},	//(5) 已接来电
{0xF2,0x5D,0xE8,0x62,0x35,0x75,0xDD,0x8B},	//(6) 已拨电话
{0xDD,0x8B,0x55,0x53,0xE5,0x67,0xE2,0x8B},	//(7) 话单查询
{0xFB,0x8B,0x36,0x65,0xED,0x77,0xE1,0x4F},	//(8) 读收短信
{0xFB,0x8B,0xD1,0x53,0xED,0x77,0xE1,0x4F},	//(9) 读发短信
{0x99,0x51,0xED,0x77,0xE1,0x4F,0x00,0x30},	//(10) (书)写短信(SPACE);(书)=0x66,0x4E,
{0xED,0x77,0xE1,0x4F,0xBE,0x8B,0x6E,0x7F},	//(11) 短信设置
{0x39,0x8D,0x87,0x73,0xE5,0x67,0xE2,0x8B},	//(12) 费率查询
{0x2C,0x67,0x3A,0x67,0xF7,0x53,0x01,0x78},	//(13) (设置)本机号码
{0xBE,0x8B,0x6E,0x7F,0xC3,0x94,0xF0,0x58},	//(14) 设置铃声
{0xBE,0x8B,0x6E,0x7F,0xCC,0x80,0x49,0x51},	//(15) 设置背光
{0x70,0x65,0x6E,0x63,0x21,0x6A,0x0F,0x5F},	//(16) 数据模式
{0x03,0x8C,0xD5,0x8B,0x21,0x6A,0x0F,0x5F},	//(17) 调试模式
{0xD1,0x76,0xC6,0x89,0x21,0x6A,0x0F,0x5F} 	//(18) 监视模式
};


//five fix word
rom INT8U fixword5[][10] =  {
{0x2D,0x4E,0xC3,0x5F,0x0D,0x67,0xA1,0x52,0x68,0x56},	// (0) 中心服务器
{0xED,0x77,0xE1,0x4F,0x09,0x67,0x48,0x65,0x1F,0x67},	// (1) 短信有效期
{0x20,0x4F,0x01,0x90,0xA5,0x62,0x4A,0x54,0x00,0x30},	// (2) 传送报告
{0xED,0x77,0xE1,0x4F,0x7B,0x7C,0x8B,0x57,0x00,0x30} 	// (3) 短信类型<緿
};


rom INT16U TextBackLightClose[6]={0x80cc,0x5149,0x5173,0x0000};rom INT16U TextBackLightOpen[6]={0x80cc,0x5149,0x5f00,0x0000};	//背光开
rom INT16U TextNoRecord[6]={0x65e0,0x8bb0,0x5f55};			//无记录
INT16U rom RingSelectWords[]={0x94c3, 0x58f0,0x0000}; 				//铃声
rom INT8U TextSmsOver[12]={0x2a,0x00,0x2a,0x00,0xd3,0x7e,0x5f,0x67,0x2a,0x00,0x2a,0x00};  //**结束**
rom INT8U TextQPhoneNum[6]={0xF7,0x53,0x01,0x78,0x3F,0x00};			//号码?
rom INT8U TextQName[6]={0xD3,0x59,0x0D,0x54,0x3F,0x00};				//姓名?
rom INT8U TextQSave[6]={0xDD,0x4F,0x58,0x5B,0x3F,0x00};				//保存?

rom INT8U TextSendSucc[10]={0xD1,0x53,0x01,0x90,0x10,0x62,0x9F,0x52,0x00,0x00};			//发送成功
rom INT8U TextSendFail[10]={0xD1,0x53,0x01,0x90,0x31,0x59,0x25,0x8D,0x00,0x00};			//发送失败
rom INT8U TextSending[16]={0x63,0x6B,0x28,0x57,0xD1,0x53,0x01,0x90,0x2E,0x00,0x2E,0x00,0x2E,0x00,0x00,0x00};	//正在发送


MENU_NODE	MenuNode[]={
//level num	sn	left-key	right-key		prev-node			next-node				attribute	  len1 pline1			pbmp
{	0,  1, 0, MENU_KEY_FUN,	MENU_KEY_BOOK,	MENU_ROOT,			MENU_REC,				MENU_ATT_FIX,	0,	NULL,			NULL},//line0-->MENU_ROOT
{	1,  4, 0, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_ROOT,			MENU_REC_RCVNO,			MENU_ATT_FIX,	4,	fixword4[0],	&PIC_CALL_RECORD},//line1-->MENU_REC
{	1,  4, 1, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_ROOT,			MENU_SMS_RDRCV,			MENU_ATT_FIX,	4,	fixword4[1],	&PIC_SHORT_MESSAGE},//line2-->MENU_SMS
{	1,  4, 2, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_ROOT,			MENU_SET_RATE,			MENU_ATT_FIX,	4,	fixword4[2],	&PIC_PHONE_SETUP},//line3-->MENU_SET
{	1,  4, 3, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_ROOT,			MENU_NET_MDM,			MENU_ATT_FIX,	4,	fixword4[3],	&PIC_NETWORK_FUNCTION},//line4-->MENU_NET
{	1,  0, 0, MENU_KEY_MDF,	MENU_KEY_CAN,	MENU_ROOT,			MENU_BOOK_END,			MENU_ATT_VAR,	0,	NULL,			NULL},//line5-->MENU_BOOK_END (a special menu)

{	2,  4, 0, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_REC,			MENU_REC_RCVNO_END,		MENU_ATT_FIX,	4,	fixword4[4],	NULL},//line6-->MENU_REC_RCVNO
{	2,  4, 1, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_REC,			MENU_REC_RCVED_END,		MENU_ATT_FIX,	4,	fixword4[5],	NULL},//line7-->MENU_REC_RCVED
{	2,  4, 2, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_REC,			MENU_REC_XMT_END,		MENU_ATT_FIX,	4,	fixword4[6],	NULL},//line8-->MENU_XMT
{	2,  4, 3, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_REC,			MENU_REC_BILL_NUM,		MENU_ATT_FIX,	4,	fixword4[7],	NULL},//line9-->MENU_BILL

{	2,  4, 0, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS,			MENU_SMS_RDRCV_NUM,		MENU_ATT_FIX,	4,	fixword4[8],	NULL},//line10-->MENU_SMS_RDRCV
{	2,  4, 1, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS,			MENU_SMS_RDXMT_NUM,		MENU_ATT_FIX,	4,	fixword4[9],	NULL},//line11-->MENU_SMS_RDXMT
{	2,  4, 2, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS,			MENU_SMS_WR_TXT,		MENU_ATT_FIX,	4,	fixword4[10],	NULL},//line12-->MENU_SMS_WR
{	2,  4, 3, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS,			MENU_SMS_SET_CENTER,	MENU_ATT_FIX,	4,	fixword4[11],	NULL},//line13-->MENU_SMS_SET

{	2,  4, 0, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SET,			MENU_SET_RATE_END,		MENU_ATT_FIX,	4,	fixword4[12],	NULL},//line14-->MENU_SET_RATE
{	2,  4, 1, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SET,			MENU_SET_LOCAL_END,		MENU_ATT_FIX,	4,	fixword4[13],	NULL},//line15-->MENU_SET_LOCAL
{	2,  4, 2, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SET,			MENU_SET_RING_END,		MENU_ATT_FIX,	4,	fixword4[14],	NULL},//line16-->MENU_SET_RING
{	2,  4, 3, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SET,			MENU_SET_LIGHT_END,		MENU_ATT_FIX,	4,	fixword4[15],	NULL},//line17-->MENU_SET_LIGHT

{	2,  3, 0, MENU_KEY_BLK,	MENU_KEY_CAN,	MENU_NET,			MENU_NET_MDM,			MENU_ATT_FIX,	4,	fixword4[16],	NULL},//line18-->MENU_NET_MDN
{	2,  3, 1, MENU_KEY_BLK,	MENU_KEY_CAN,	MENU_NET,			MENU_NET_DBG,			MENU_ATT_FIX,	4,	fixword4[17],	NULL},//line19-->MENU_NET_BDG
{	2,  3, 2, MENU_KEY_BLK,	MENU_KEY_CAN,	MENU_NET,			MENU_NET_MON,			MENU_ATT_FIX,	4,	fixword4[18],	NULL}, //line20-->MENU_NET_MON

{	3,  0, 0, MENU_KEY_SAVE,MENU_KEY_CAN,	MENU_REC_RCVNO,		MENU_REC_RCVNO_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line21-->MENU_REC_RCVNO_END
{	3,  0, 0, MENU_KEY_SAVE,MENU_KEY_CAN,	MENU_REC_RCVED,		MENU_REC_RCVED_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line22-->MENU_REC_RCVED_END
{	3,  0, 0, MENU_KEY_SAVE,MENU_KEY_CAN,	MENU_REC_XMT,		MENU_REC_XMT_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line23-->MENU_REC_XMT_END
{	3,  0, 0, MENU_KEY_READ,MENU_KEY_CAN,	MENU_REC_BILL,	MENU_REC_BILL_NUM_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line24-->MENU_REC_BILL_NUM

{	3,  0, 0, MENU_KEY_READ,MENU_KEY_CAN,	MENU_SMS_RDRCV,	MENU_SMS_RDRCV_NUM_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line25-->MENU_SMS_RDRCV_NUM
{	3,  0, 0, MENU_KEY_READ,MENU_KEY_CAN,	MENU_SMS_RDXMT,	MENU_SMS_RDXMT_NUM_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line26-->MENU_SMS_RDXMT_NUM
{	3,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SMS_WR,	MENU_SMS_WR_TXT_EDIT,		MENU_ATT_VAR,	0,	NULL,			NULL},//line27-->MENU_SMS_WR_TXT

{	3,  3, 0, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS_SET,	MENU_SMS_SET_CENTER_END,	MENU_ATT_FIX,	5,	fixword5[0],	NULL},//line28-->MENU_SMS_SET_CENTER
{	3,  3, 1, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS_SET,	MENU_SMS_SET_LIFE_END,		MENU_ATT_FIX,	5,	fixword5[1],	NULL},//line29-->MENU_SMS_SET_LIFE
{	3,  3, 2, MENU_KEY_SEL,	MENU_KEY_CAN,	MENU_SMS_SET,	MENU_SMS_SET_REPORT_END,	MENU_ATT_FIX,	5,	fixword5[2],	NULL},//line30-->MENU_SMS_SET_REPORT

{	3,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SET_RATE,		MENU_SET_RATE_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line31-->MENU_SET_RATE_END
{	3,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SET_LOCAL,		MENU_SET_LOCAL_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line32-->MENU_SET_LOCAL_END
{	3,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SET_RING,		MENU_SET_RING_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line33-->MENU_SET_RING_END
{	3,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SET_LIGHT,		MENU_SET_LIGHT_END,		MENU_ATT_VAR,	0,	NULL,			NULL},//line34-->MENU_SET_LIGHT_END

{	4,  0, 0, MENU_KEY_BLK,	MENU_KEY_CAN,	MENU_REC_BILL_NUM,	MENU_REC_BILL_NUM_END,	MENU_ATT_VAR,	0,	NULL,			NULL},//line35-->MENU_REC_BILL_NUM_END
{	4,  0, 0, MENU_KEY_DEL,	MENU_KEY_CAN,	MENU_SMS_RDRCV_NUM,	MENU_SMS_RDRCV_NUM_END,	MENU_ATT_VAR,	0,	NULL,			NULL},//line36-->MENU_SMS_RDRCV_NUM_END
{	4,  0, 0, MENU_KEY_DEL,	MENU_KEY_CAN,	MENU_SMS_RDXMT_NUM,	MENU_SMS_RDXMT_NUM_END,	MENU_ATT_VAR,	0,	NULL,			NULL},//line37-->MENU_SMS_RDXMT_NUM_END
{	4,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SMS_WR_TXT,	MENU_SMS_WR_TXT_EDIT,	MENU_ATT_VAR,	0,	NULL,			NULL},//line38-->MENU_SMS_WR_TXT_EDIT
{	4,  0, 0, MENU_KEY_SAVE,MENU_KEY_SEND,	MENU_SMS_WR_TXT,	MENU_SMS_WR_TXT_SEND,	MENU_ATT_VAR,	0,	NULL,			NULL},//line39-->MENU_SMS_WR_TXT_SEND

{	4,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SMS_SET_CENTER,MENU_SMS_SET_CENTER_END,MENU_ATT_VAR,	0,	NULL,			NULL},//line40-->MENU_SMS_SET_CENTER_END
{	4,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SMS_SET_LIFE,	MENU_SMS_SET_LIFE_END,	MENU_ATT_VAR,	0,	NULL,			NULL},//line41-->MENU_SMS_SET_LIFE_END
{	4,  0, 0, MENU_KEY_OK,	MENU_KEY_CAN,	MENU_SMS_SET_REPORT,MENU_SMS_SET_REPORT_END,MENU_ATT_VAR,	0,	NULL,			NULL} //line42-->MENU_SMS_SET_REPORT_END
};

rom INT16U MenuEditLowerKey[][5]={
	{' ','-',':','=','0'},	{'.',',','?','!','1'},		{'a','b','c','2',0},
	{'d','e','f','3',0},	{'g','h','i','4',0},		{'j','k','l','5',0},
	{'m','n','o','6',0},	{'p','q','r','s','7'},		{'t','u','v','8',0},
	{'w','x','y','z','9'}	
};
rom INT16U MenuEditUpperKey[][5]={
	{' ','-',':','=','0'},	{'.',',','?','!','1'},		{'A','B','C','2',0},
	{'D','E','F','3',0},	{'G','H','I','4',0},		{'J','K','L','5',0},
	{'M','N','O','6',0},	{'P','Q','R','S','7'},		{'T','U','V','8',0},
	{'W','X','Y','Z','9'}	
};

rom INT16U MenuEditSymbol[][8]={
	{'.',',','?','!','/','<','>','@'},
	{'#','$','%','^','&','*','(',')'},
	{'{','}','[',']','+','-','_','='}
};
rom INT8U LetterLineLen[]={5,5,4,4,4,4,4,5,4,5};		//Sn=key-0x30

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


#pragma code MYCODE


//display compressed number and time (in NM_TIME structure) in a given area
void Func_DisplayNumAndTime(INT8U rom * ptrNum, INT8U Len, NM_TIME * ptrTime){
	INT8U chrTemp,pos,i;
	INT8U rom * pmem;
	INT8U rom * ptrTemp;

	pos = 0;
	pmem = OSMemGet(pMemSml, &chrTemp);
	if(chrTemp != OS_NO_ERR) return;
	i = app_c2a(ptrNum, Len, pmem);
	ptrTemp = (INT8U rom *)PB_SearchMatchItem(pmem, i);
	if( ptrTemp == NULL_PTR){
		i = app_c2u(ptrNum, Len, pmem);
		app_printf(pmem, i, 2, 0);
	}
	else{
		app_printf(ptrTemp,10,2,0);
	}
	OSMemPut(pMemSml,pmem);
	
	//display time
	Disp_Word(4,0, 0xd41e+(ptrTime->chrYear/10), PIX6);
	Disp_Word(4,6, 0xd41e+(ptrTime->chrYear%10), PIX6);
	Disp_Word(4,6*2, 0xd41d,PIX6);
	Disp_Word(4,6*3, 0xd41e+(ptrTime->chrMonth/10), PIX6);
	Disp_Word(4,6*4, 0xd41e+(ptrTime->chrMonth%10), PIX6);
	Disp_Word(4,6*5, 0xd41d,PIX6);
	Disp_Word(4,6*6, 0xd41e+(ptrTime->chrDate/10), PIX6);
	Disp_Word(4,6*7, 0xd41e+(ptrTime->chrDate%10), PIX6);
	//
	Disp_Word(4,6*8, 0x0020, PIX8);
	//
	Disp_Word(4,8+6*8, 0xd41e+(ptrTime->chrHour/10), PIX6);
	Disp_Word(4,8+6*9, 0xd41e+(ptrTime->chrHour%10), PIX6);
	Disp_Word(4,8+6*10, 0xd428,PIX6);
	Disp_Word(4,8+6*11, 0xd41e+(ptrTime->chrMinute/10), PIX6);
	Disp_Word(4,8+6*12, 0xd41e+(ptrTime->chrMinute%10), PIX6);
	Disp_Word(4,8+6*13, 0xd428,PIX6);
	Disp_Word(4,8+6*14, 0xd41e+(ptrTime->chrSecond/10), PIX6);
	Disp_Word(4,8+6*15, 0xd41e+(ptrTime->chrSecond%10), PIX6);
}



void MenuDisplayKey(INT8U menu)
{
	INT8U i;
	INT8U key[2];
	
	key[0]=MenuNode[menu].fun_left;
	key[1]=MenuNode[menu].fun_right;
	
	for(i=0;i<2;i++){
		switch(key[i]){
			case MENU_KEY_FUN:
				Display_Menu_Icon(i, &PIC_FUNCTION);
			break;
			case MENU_KEY_BOOK:
				Display_Menu_Icon(i, &PIC_PHONEBOOK);
			break;
			case MENU_KEY_SEL:
				Display_Menu_Icon(i, &PIC_ENTER);
			break;
			case MENU_KEY_CAN:
				Display_Menu_Icon(i, &PIC_RETURN);
			break;
			case MENU_KEY_OK:
				Display_Menu_Icon(i, &PIC_ACKNOWLEDGE);
			break;
			case MENU_KEY_BLK:
				Display_Menu_Icon(i, &PIC_BLANK);
			break;
			case MENU_KEY_READ:
				Display_Menu_Icon(i, &PIC_READ);
			break;
			case MENU_KEY_SAVE:
				Display_Menu_Icon(i, &PIC_SAVE);
			break;
			case MENU_KEY_DEL:
				Display_Menu_Icon(i, &PIC_DELETE);
			break;
			default:
				Display_Menu_Icon(i, &PIC_WAITING);
			break;
		}
	}
}

void MenuDisplayPhone(INT8U line_no,INT8U len,rom INT8U *ptr)
{
	INT8U i,PosY;

	PosY=0;
	if(len>20)	len=20;
	
	for(i=0;i<len;i++){
		(void)Disp_Word(line_no,PosY,ptr[i]+0xD41E-0x30,PIX6);
		PosY+=6;
	}
}

/*
INT8U MenuDisplayLetter(INT8U line_no,INT8U len,rom INT8U *ptr)
{
	INT8U i,PosY;

	PosY=0;
	for(i=0;i<len;){
		(void)Disp_Word(line_no,PosY,*ptr,PIX8);
		ptr++;
		PosY+=8;
		i++;
		if(PosY>=128) return(i);
	}
	return(i);
}
*/

void MenuDisplaySequence(INT8U node)
{
	INT8U	i,pos;
	INT8U	lay[4];

	if(MenuNode[node].attr==MENU_ATT_FIX){
		pos=node;
		lay[1]=0x20;	//MENU_ROOT using this line "<SPACE>"

		for(i=MenuNode[node].node_level;i>0;i--){
		lay[i]=MenuNode[pos].node_sn+0x31;
			pos=MenuNode[pos].prev_node;

⌨️ 快捷键说明

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