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

📄 tree_backup.c

📁 基于跳转表的LCD目录跳转C程序
💻 C
字号:
#include<pic.h>
#include "lcd.h"
bank3 struct Tree title_first[3];   //Define all title
bank3 struct Tree title_second[2];
bank3 struct Tree title_third[2][3];
const unsigned char *Table_TitleName[]={"SetParameters",
										 "SrvMoto",
										 "Motor",
/*the table of title names*/			 "PwrVol",
										 "Kp",
										 "Kd",
										 "Ki",
										 "Record"
										 };

/*Set parameter for title0*/
void Buildtitle_first()    //the first layer
{
	title_first[0].value=-9999;  //set "SetParameter" title
	title_first[0].TitleName=Table_TitleName[0];
	title_first[0].type=Type_title;
	
	title_first[1].value=70; //set "PwrVol" title
	title_first[1].TitleName=Table_TitleName[3];
	title_first[1].type=Type_readonly;
		
	title_first[2].value=-23;     //set "Record" title
	title_first[2].TitleName=Table_TitleName[7];
	title_first[2].type=Type_readonly;
}
/*Set parameter for title1*/
void Buildtitle_second()
{
	title_second[0].value=-9999; //set "Srv_Moto" title
	title_second[0].TitleName=Table_TitleName[1];
	title_second[0].type=Type_title;

	title_second[1].value=-9999;       //set "Motor" title
	title_second[1].TitleName=Table_TitleName[2];
	title_second[1].type=Type_title;
}
/*Set parameter for title3*/
void Buildtitle_third()
{
	title_third[0][0].value=0;		//set "Kp_Srv" title
	title_third[0][0].TitleName=Table_TitleName[4];
	title_third[0][0].type=Type_value;

	title_third[0][1].value=0;        //set "Kd_Srv" title
	title_third[0][1].TitleName=Table_TitleName[5];
	title_third[0][1].type=Type_value;

	title_third[0][2].value=0;    //set "Ki_Srv" title
	title_third[0][2].TitleName=Table_TitleName[6];
	title_third[0][2].type=Type_value;

	title_third[1][0].value=0;    //set "Kp_Moto" title
	title_third[1][0].TitleName=Table_TitleName[4];
	title_third[1][0].type=Type_value;
	
	title_third[1][1].value=0;    //set "Kd_Moto" title
	title_third[1][1].TitleName=Table_TitleName[5];
	title_third[1][1].type=Type_value;

	title_third[1][2].value=0;     //set "Ki_Moto" title
	title_third[1][2].TitleName=Table_TitleName[6];
	title_third[1][2].type=Type_value;
}

/*The display tree and set data*/
void Display()
{
	unsigned char n1,n2,n3,edit_flag=0,lastline=0xff;
	struct Tree Line0,Line1;
	struct Tree *temp;
	unsigned int pointer;
	int temp_value;
	Line0=title_first[0],Line1=title_first[1]; //current display content
	n1=1,n2=0,n3=0;
	HideCursor();    //hide cursor
	DisplayChar("SmartCarSystem",1,0); 
	DisplayChar("Welcome!",4,1);
	DelayNms(1000);
	for(;;)
	{
		DisplayChar(Line0.TitleName,0,0);
		DisplayChar(Line1.TitleName,0,1);
		CursorOn();
		for(;;)   //waiting for keyboard
		{
			if(edit_flag!=1)
			{
				if(Up==1)       //Press "up" key
				{
					if(n2==0)  //if at the 1st layer
					{
						if(n1>1) n1=n1-1;
						Line0=title_first[n1-1];
						Line1=title_first[n1];	
					}
					if(n2!=0 && n3==0)
					{
						if(n2>1) n2=n2-1;
						Line0=title_second[n2-1];
						Line1=title_second[n2];
					}
					if(n3!=0)
					{
						if(n3>1)n3=n3-1;
						Line0=title_third[n2-1][n3-1];
						Line1=title_third[n2-1][n3];
					}
					DisplayChar(Line1.TitleName,0,1);
					DisplayChar(Line0.TitleName,0,0);
					if(Line1.type==Type_readonly or Line1.type==Type_value)
						DisplayNum(Line1.value,8,1);
					if(Line0.type==Type_readonly or Line0.type==Type_value)
						DisplayNum(Line0.value,8,0);	
					lastline=firstline;
				}//"up" end
				
				if(Down==1)       //Press "Down" key
				{
					if(n2==0)  //if at the 1st layer
					{
						if(n1<3) n1=n1+1;
						Line0=title_first[n1-1];
						Line1=title_first[n1];	
					}
					if(n2!=0 && n3==0)
					{
						if(n2<2) n2=n2+1;  //the "2" here is the len of second layer
						Line0=title_second[n2-1];
						Line1=title_second[n2];
					}
					if(n3!=0)
					{
						if(n3<3) n3=n3+1;
						Line0=title_third[n2-1][n3-1];
						Line1=title_third[n2-1][n3];
					}
					DisplayChar(Line0.TitleName,0,0);
					DisplayChar(Line1.TitleName,0,1);
					if(Line0.type==Type_readonly or Line0.type==Type_value)
						DisplayNum(Line0.value,8,0);
					if(Line1.type==Type_readonly or Line1.type==Type_value)
						DisplayNum(Line1.value,8,1);
					lastline=secondline;
				}//"Down" end
				
				if(Ent==1)    //Press "Ent" key
				{
					temp=orientation(n1,n2,n3);
					if(temp->type==Type_value){
						 edit_flag=1;   //when able to edit
						 DisplayChar("<",15,lastline);
					}
					else{	
							if(n2==0)  //if at the 1st layer
							{
								n2=1;
								Line0=title_second[n2-1];
								Line1=title_second[n2];	
							}
							if(n2!=0 && n3==0)
							{
								n3=1;
								Line0=title_third[n2-1][n3-1];
								Line1=title_third[n2][n3-1];
							}
							DisplayChar(Line1.TitleName,0,1);
							DisplayChar(Line0.TitleName,0,0);
							if(Line1.type==Type_readonly or Line1.type==Type_value)
								DisplayNum(Line1.value,8,1);
							if(Line0.type==Type_readonly or Line0.type==Type_value)
								DisplayNum(Line0.value,8,0);
							lastline=firstline;
						}
				}//"Ent" end
								
				if(Esc==1)       //Press "Esc" key
				{
					if(n2!=0 && n3==0)
					{
						n2=0;
						if(n1==3)
						{
							Line0=title_first[n1-2];
							Line1=title_first[n1-1];
							DisplayChar(Line0.TitleName,0,0);
							DisplayChar(Line1.TitleName,0,1);
							if(Line0.type==Type_readonly or Line0.type==Type_value)
								DisplayNum(Line0.value,8,0);
							if(Line1.type==Type_readonly or Line1.type==Type_value)
								DisplayNum(Line1.value,8,1);
							lastline=secondline;
						}else
							{
								Line0=title_first[n1-1];
								Line1=title_first[n1];
								DisplayChar(Line1.TitleName,0,1);
								DisplayChar(Line0.TitleName,0,0);
								if(Line1.type==Type_readonly or Line1.type==Type_value)
									DisplayNum(Line1.value,8,1);
								if(Line0.type==Type_readonly or Line0.type==Type_value)
									DisplayNum(Line0.value,8,0);
								lastline=firstline;
							}
					}
					if(n3!=0)
					{
						n3=0;
						Line0=title_second[0];
						Line1=title_second[1];
						if(n2==1)
						{
							DisplayChar(Line1.TitleName,0,1);
							DisplayChar(Line0.TitleName,0,0);
							if(Line1.type==Type_readonly or Line1.type==Type_value)
								DisplayNum(Line1.value,8,1);
							if(Line0.type==Type_readonly or Line0.type==Type_value)
								DisplayNum(Line0.value,8,0);
							lastline=firstline;
						}
						else
						{
							DisplayChar(Line0.TitleName,0,0);
							DisplayChar(Line1.TitleName,0,1);
							if(Line0.type==Type_readonly or Line0.type==Type_value)
								DisplayNum(Line0.value,8,0);
							if(Line1.type==Type_readonly or Line1.type==Type_value)
								DisplayNum(Line1.value,8,1);
							lastline=secondline;
						}
					}
				}//"Esc" end
			}//"non-edit" end
					
			else  //edit-stage
			{
				temp=orientation(n1,n2,n3);
				temp_value=temp->value;
				if(Up==1){
					temp_value+=1;	
					if(temp_value==10000)temp_value=0;
					DisplayNum(temp_value,8,lastline);
					DelayNms(200);
				}
				if(Down==1){
					temp_value-=1;	
					if(temp_value==-10000)temp_value=0;
					DisplayNum(temp_value,8,lastline);
					DelayNms(200);
				}
				if(Ent==1){
					edit_flag=0;
					temp->value=temp_value;
					DisplayChar(" ",15,lastline);
					while(Ent);    //until Ent==0 to quit
				}
				if(Esc==1){
					edit_flag=0;
					DisplayChar(" ",15,lastline);
					while(Esc);
				}
			}
				
					
					
	
	
struct Tree * orientation(unsigned char a,unsigned char b,unsigned char c)
{
	if(b==0)return &title_first[a-1];            //1st layer	
	else if(b!=0 && c==0)return &title_second[b-1];   //2nd layer
	else if(c!=0)return &title_third[b-1][c-1];		//3rd layer
	else return &title_first[a-1];
}

⌨️ 快捷键说明

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