📄 tree.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 + -