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

📄 menu.c

📁 At91sam7s64+ucosII+pid温度控制
💻 C
字号:
 #include "includes.h"
 #include "Menu.h"
 #include "ST7920.h"
 #include "SAMpioc.h"
StrMenu SMenu;
extern SysDat sys_dat;
extern SetDat set_dat;
extern int CutTime ;
SetDat set_dsp;
char	disp_buff[12][20];
char 	menu_disp[6][20]={"样品编号: ","试验温度: ","切割间隔: "};
char 	menu_set[10][20]={"样品编号: ","间隔设置: ","温度设置: ","校正温度: ","口    模: ","负    荷: ","参数pKp1: ","参数pKd1: ","参数pExt: "};

char	menu_num = 0;
const char    *year = "年";
const char 	*mon  = "月";
const char	*date = "日";

void int2char(int val,char *p)
{
int j;
int i;
	i = val;
	for(j=0;j<4;j++)
	{
		*(p+j) = 0;
	}
	while(i>=1000)
	{
		i = i-1000;
		
		*p  += 1;
	}
	while(i>=100)
	{
		i -= 100;
		*(p+1) += 1;
	}
	while(i>=10)
	{
		i -= 10;
		*(p+2) += 1;
	}

	*(p+3) = (char) i;
}

/*-----------------------------------------------------	
主页面
样品编号:****
试验温度:***.*℃
切割间隔:***.*s   自动(或者手动)
口模:*.***mm   
负荷:*.**kg
****年**月**日   **:**:**
------------------------------------------------------*/

	
void hms2str(char *str)
{
char s[10];
char i;
		i = sys_dat.Time[2]>>4;
		sprintf(s, "%d", i);
		strcpy(str,s);
		i = sys_dat.Time[2]&0x0f;
		sprintf(s, "%d", i);
		strcat(str,s);
		strcat(str,": ");
		
		i = sys_dat.Time[1]>>4;
		sprintf(s, "%d", i);
		strcat(str,s);
		i = sys_dat.Time[1]&0x0f;
		sprintf(s, "%d", i);
		strcat(str,s);
		strcat(str,": ");
		
		
		i = sys_dat.Time[0]>>4;
		sprintf(s, "%d", i);
		strcat(str,s);
		i = sys_dat.Time[0]&0x0f;
		sprintf(s, "%d", i);
		strcat(str,s);
		strcat(str,"    ");
		

}

void time2str(char *str1,char *str2)
{
char s[10];
char i;
		
		i = sys_dat.Time[6]>>4;
		if(i == 0)
		{
			
			switch(sys_dat.Time[6])
			{
				case 0:
					strcpy(str1,"00");
				break;
				case 1:
					strcpy(str1,"01");
				break;
				case 2:
					strcpy(str1,"02");
				break;
				case 3:
					strcpy(str1,"03");
				break;
				case 4:
					strcpy(str1,"04");
				break;
				case 5:
					strcpy(str1,"05");
				break;
				case 6:
					strcpy(str1,"06");
				break;
				case 7:
					strcpy(str1,"07");
				break;
				case 8:
					strcpy(str1,"08");
				break;
				case 9:
					strcpy(str1,"09");
				break;	
				default:
					strcpy(str1,"00");
				break;
			}
		}
		else
		{
			sprintf(s, "%2d", sys_dat.Time[6]);
			strcpy(str1,s);
		}
		strcat(str1,"年");
		sprintf(s, "%2d", sys_dat.Time[5]);
		strcat(s,"月");
		strcat(str1,s);
		sprintf(s, "%2d", sys_dat.Time[3]);
		strcat(s,"日");
		strcat(str1,s);
		
		
		i = sys_dat.Time[2]>>4;
		sprintf(s, "%d", i);
		strcpy(str2,s);
		i = sys_dat.Time[2]&0x0f;
		sprintf(s, "%d", i);
		strcat(str2,s);
		strcat(str2,": ");
		
		i = sys_dat.Time[1]>>4;
		sprintf(s, "%d", i);
		strcat(str2,s);
		i = sys_dat.Time[1]&0x0f;
		sprintf(s, "%d", i);
		strcat(str2,s);
		strcat(str2,": ");
		
		
		i = sys_dat.Time[0]>>4;
		sprintf(s, "%d", i);
		strcat(str2,s);
		i = sys_dat.Time[0]&0x0f;
		sprintf(s, "%d", i);
		strcat(str2,s);
		strcat(str2,"    ");
}
void flt2str(int val,char *s,int num)
{
int i;
char l[6];


		i = val/num;
		
		if(num==10)
		{
			sprintf(s, "%3d", i);
		}
		else if(num == 100)
		{
			sprintf(s,"%1d",i);
		}
		else if(num == 1000)
		{
			sprintf(s,"%1d",i);
		}
		
		strcat(s,".");
	//	strcpy(s,l);
		i = val;
		while(i	>=num)
		{
			i = i - num;
		}
		if(num==10)
			sprintf(l, "%1d", i);
		else if(num==100)
			sprintf(l, "%2d", i);
		else if(num == 1000)
			sprintf(l, "%3d", i);
		else
			 sprintf(l, "%d", i);
		for(i = 0;i<6;i++)
		{
			if(l[i]!= '\0')
			{
				if(l[i] == ' ')
					l[i] =  '0';
			}
		}

		strcat(s,l);	
}		
				
void start_init()
{
	set_dat.Number = 1987;
	sys_dat.Number = 2345;
	set_dat.CutPeriod = 456;
	sys_dat.Period = set_dat.CutPeriod;
	set_dat.SetTemp = 789;
	sys_dat.Temp = 123;
	set_dat.AdTemp = 567;
	set_dat.D = 234;
	set_dat.Weight = 345;
	sys_dat.CutState = 0;
	set_dat.pidkp = 500;
	set_dat.pidkd = 4000;
	sys_dat.Time[0] = 12;
	sys_dat.Time[1] = 35;
	sys_dat.Time[2] = 21;
	sys_dat.Time[3] = 20;
	sys_dat.Time[4] = 2;
	sys_dat.Time[5] = 5;
	sys_dat.Time[6] = 8;
}
//
void disp_set()				//设置参数状态
{	
int i;
char s[20];
		set_dsp = set_dat;
		strcpy(disp_buff[0],menu_set[0]);		//样品编号
		sprintf(s, "%4d", set_dsp.Number);
		strcat(disp_buff[0],s);	
			
		strcpy(disp_buff[1],menu_set[1]);		//切割间隔***S
		sprintf(s, "%3d", set_dsp.CutPeriod);
		strcat(disp_buff[1],s);	
		
		strcpy(disp_buff[2],menu_set[2]);		//控制温度设置:***.*℃
		flt2str(set_dsp.SetTemp,s,10);
		strcat(disp_buff[2],s);	
		
		strcpy(disp_buff[3],menu_set[3]);		//校正温度:- **.*℃
	//	flt2str(set_dsp.AdTemp,s,10);
		if(set_dsp.AdTemp < 0)
		{
			i = 0-set_dsp.AdTemp;
			strcat(disp_buff[3]," -");
		}
		else
		{
			i = set_dsp.AdTemp;
			strcat(disp_buff[3]," +");
		}
	//	i = i/10;
		//i = set_dsp.AdTemp;
		sprintf(s,"%2d",i/10);
		strcat(s,".");
		strcat(disp_buff[3],s);

		//i = set_dsp.AdTemp;
		
		while(i	>=10)
		{
			i = i - 10;
		}
		sprintf(s, "%d", i);
		strcat(disp_buff[3],s);
		
		strcpy(disp_buff[4],menu_set[4]);		//口  模:*.***
		flt2str(set_dsp.D,s,1000);
		strcat(disp_buff[4],s);	
		
		strcpy(disp_buff[5],menu_set[5]);		//负  荷:*.***
		flt2str(set_dsp.Weight,s,1000);
		strcat(disp_buff[5],s);	

		time2str(disp_buff[6],disp_buff[7]);		//time
		
		strcpy(disp_buff[8],menu_set[6]);		//参数PKP1:****
		sprintf(s, "%4d", set_dsp.pidkp);
		strcat(disp_buff[8],s);	
		
		strcpy(disp_buff[9],menu_set[7]);		//参数PKD1:****
		sprintf(s, "%4d", set_dsp.pidkd);
		strcat(disp_buff[9],s);	

		strcpy(disp_buff[10],menu_set[8]);		//参数pext:****
		sprintf(s, "%4d", set_dsp.pidext);
		strcat(disp_buff[10],s);	
		
	for(i=0;i<12;i++)
	{
		strcat(disp_buff[i],"   ");
	}
}	
void disp_init()			//测量状态
{
int i;
char s[20];
		strcpy(disp_buff[0],menu_disp[0]);
		sprintf(s, "%4d", set_dat.Number);
		strcat(disp_buff[0],s);
		
		
		strcpy(disp_buff[1],menu_disp[1]);
		flt2str(sys_dat.Temp,s,10);
		strcat(disp_buff[1],s);	
		
		if(!sys_dat.CutState)		//AUTO				
		{	
			strcpy(disp_buff[2],menu_disp[2]);
		//	flt2str(set_dat.CutPeriod,s,10);
			sprintf(s,"%3d",set_dat.CutPeriod);
			strcat(disp_buff[2],s);
			strcat(disp_buff[2],"P");
		}
		else
		{
			strcpy(disp_buff[2],"手动秒表: ");
			sprintf(s, "%3d", CutTime);
			strcat(disp_buff[2],s);
			strcat(disp_buff[2],"S");
		}	
	/*	strcpy(disp_buff[3],menu_disp[3]);
		flt2str(sys_dat.D,s,1000);
		strcat(disp_buff[3],s);	
		
		strcpy(disp_buff[4],menu_disp[4]);
		flt2str(sys_dat.Weight,s,100);
		strcat(disp_buff[4],s);	

		time2str(disp_buff[5],disp_buff[6]);
*/
	hms2str	(disp_buff[3]);				//显示时分秒,不显示年月日	
	for(i=0;i<6;i++)
	{
		strcat(disp_buff[i],"   ");
	}


}
void cursor(char MenuItem,char StrItem)
{
char i;
	switch(MenuItem)
	{
		case 0:
			i = 0x80;
			break;
		case 1:
			i = 0x90;
			break;
		case 2:
			i = 0x88;
			break;
		case 3:
			i = 0x98;
			break;
		default:
			i = 0x98;			//如果菜单项超出第4行,光标就放在第四行显示
			break;
	}
	if(MenuItem ==6 || MenuItem ==7)
	{
		i = i + (StrItem << 1);			//time
	}
	else if(MenuItem == 3)
	{
		i = i + (StrItem + 0x06);		//+-
	}
	else
		i = i+0x05+StrItem; 
	lcd_wr_cmd(i);
}
void scr_display(char num,char sta)
{
int i,j;
	lcd_wr_cmd(0x0c);		//显示打开,光标关,反白显示关 
	for(i=0;i<4;i++)
	{
		lcd_sprint(disp_buff[num+i],i,0,16);
	}

}

⌨️ 快捷键说明

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