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

📄 tree.c

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

/*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;
	
	title_first[3].value=0;      //set "Confirm" title
	title_first[3].TitleName=Table_TitleName[8];
	title_first[3].type=Type_command_send;
}
/*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;
	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);
	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 || Line1.type==Type_value)
					DisplayNum(Line1.value,8,1);
				if(Line0.type==Type_readonly || Line0.type==Type_value)
					DisplayNum(Line0.value,8,0);	
				lastline=firstline;
				while(Up);
			}//"up" end
			
			if(Down==1)       //Press "Down" key
			{
				if(n2==0)  //if at the 1st layer
				{
					if(n1<title_first_len) n1=n1+1;
					Line0=title_first[n1-1];
					Line1=title_first[n1];	
				}
				if(n2!=0 && n3==0)
				{
					if(n2<title_second_len) n2=n2+1;  //the "title_second_len" here is the len of second layer
					Line0=title_second[n2-1];
					Line1=title_second[n2];
				}
				if(n3!=0)
				{
					if(n3<title_third_len2) 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 || Line0.type==Type_value)
					DisplayNum(Line0.value,8,0);
				if(Line1.type==Type_readonly || Line1.type==Type_value)
					DisplayNum(Line1.value,8,1);
				lastline=secondline;
				while(Down);
			}//"Down" end
			
			if(Ent==1)    //Press "Ent" key
			{
				temp=orientation(n1,n2,n3);
				if(temp->type==Type_command_send){
					while(Ent);
					break;
				}
				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[0];
							Line1=title_second[1];	
						}
						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 || Line1.type==Type_value)
							DisplayNum(Line1.value,8,1);
						if(Line0.type==Type_readonly || Line0.type==Type_value)
							DisplayNum(Line0.value,8,0);
						lastline=firstline;
					}
				while(Ent);
			}//"Ent" end
							
			if(Esc==1)       //Press "Esc" key
			{
				if(n2!=0 && n3==0)    //2nd layer
				{
					n2=0;
					if(n1==title_first_len)
					{
						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 || Line0.type==Type_value)
							DisplayNum(Line0.value,8,0);
						if(Line1.type==Type_readonly || 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 || Line1.type==Type_value)
								DisplayNum(Line1.value,8,1);
							if(Line0.type==Type_readonly || 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 || Line1.type==Type_value)
							DisplayNum(Line1.value,8,1);
						if(Line0.type==Type_readonly || 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 || Line0.type==Type_value)
							DisplayNum(Line0.value,8,0);
						if(Line1.type==Type_readonly || Line1.type==Type_value)
							DisplayNum(Line1.value,8,1);
						lastline=secondline;
					}
				}
				while(Esc);
			}//"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;
				DelayNms(200);
			}
			if(Down==1){
				temp_value-=1;	
				if(temp_value==-10000)temp_value=0;
				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);
			}//if end
		}//else end
	}//for end
	
	/*send data to S12*/
}//"Buildtree" function end
					
					
	
	
struct Tree * orientation(unsigned char a,unsigned char b,unsigned char c)
{
	struct Tree *head;
	if(b==0)head=&title_first[a-1];            //1st layer	
	else if(b!=0 && c==0)head=&title_second[b-1];   //2nd layer
	else if(c!=0)head=&title_third[b-1][c-1];		//3rd layer
	return head;
}

⌨️ 快捷键说明

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