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