📄 form.c
字号:
para_table.array+=1; //右移一列
else
{
if(para_table.colomn<8) //下移一行
para_table.colomn+=1;
else
para_table.colomn=0;
para_table.array=0;
}
}
break;
default:
break;
}
MOVE_CARACT
}
//=======================================================================================================
//显示参数
//=======================================================================================================
void show_para(void)
{
int i,j;
languge_mode(English,yes); //切换语言
//如果存在数据,则显示
if(para_table.Is_data_exist==yes)
{
for(i=0;i<9;i++)
{
for(j=0;j<8;j++)
{
set_caract_pos(para_table.ins_dot[i][j].x,para_table.ins_dot[i][j].y);
set_window_char(para_table.str[i][j]); //显示字符
}
}
}
}
//===============================================================================================================================================
//检查表中数据是否正确
//===============================================================================================================================================
unsigned int Is_para_right(void)
{
unsigned int i;
for(i=0;i<9;i++)
{
statusbar.text=(unsigned char*)"正在检查数据";//提示检查数据
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("!");
temp_para[i].hour=(para_table.str[i][0]-'0')*10+(para_table.str[i][1]-'0');
if(temp_para[i].hour>24)
{
statusbar.text=(unsigned char*)"小时不能大于";//提示错误
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("24!");
para_table.colomn=i;
para_table.array=0;
init_caract(para_table.ins_dot[i][0].x,para_table.ins_dot[i][0].y,0x4f,0xe0,yes); //在错误处显示红色光标
return error;
}
temp_para[i].minite=(para_table.str[i][2]-'0')*10+(para_table.str[i][3]-'0');
if(temp_para[i].minite>59)
{
statusbar.text=(unsigned char*)"分钟不能大于";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("60!");
para_table.colomn=i;
para_table.array=2;
init_caract(para_table.ins_dot[i][2].x,para_table.ins_dot[i][2].y,0x4f,0xe0,yes); //在错误处显示红色光标
return error;
}
if(para_table.str[i][7]=='\0')
temp_para[i].temperature=(para_table.str[i][4]-'0')*100+(para_table.str[i][5]-'0')*10+(para_table.str[i][6]-'0');
else
{
temp_para[i].temperature=(para_table.str[i][4]-'0')*1000+(para_table.str[i][5]-'0')*100+(para_table.str[i][6]-'0')*10+(para_table.str[i][7]-'0');
if(temp_para[i].temperature>1100)
{
statusbar.text=(unsigned char*)"温度不能大于";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("1100!");
para_table.colomn=i;
para_table.array=4;
init_caract(para_table.ins_dot[i][4].x,para_table.ins_dot[i][4].y,0x4f,0xe0,yes); //在错误处显示红色光标
return error;
}
}
}
statusbar.text=(unsigned char*)"数据正确";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("!");
para_table.Is_data_exist=yes;
return 1;
}
void save_para_to_AI(void)
{
unsigned int i;
//显示正在通信
statusbar.text=(unsigned char*)"正在通信";//提示检查数据
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("!");
write_AI(0x15,12); //停止AI表
for(i=0;i<9;i++)
{
write_AI(0x1A+i*2,temp_para[i].temperature); //写入温度
write_AI(0x1B+i*2,temp_para[i].hour*60+temp_para[i].minite); //写入时间
}
//write_AI(0,1); //从第一段执行
//write_AI(0x15,0); //启动AI表
//显示通信结束
statusbar.text=(unsigned char*)"正在通信";//提示检查数据
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str("!");
}
//================================================================================================================
//
//================================================================================================================
void draw_scale()
{
unsigned char i;
scale.sum_time=0;
for(i=0;i<9;i++)
{
scale.sum_time+=temp_para[i].hour*60+temp_para[i].minite;
}
scale.scale_time=1.2*scale.sum_time/8; //每刻度的值
for(i=1;i<=4;i++)
{
scale.hour=(scale.scale_time*2*i)/60;
scale.minite=(scale.scale_time*2*i)%60;
scale.scale_str[0]=scale.hour/10+'0';
scale.scale_str[1]=scale.hour%10+'0';
scale.scale_str[3]=scale.minite/10+'0';
scale.scale_str[4]=scale.minite%10+'0';
cover_static(&scale_static[i]);
set_caract_pos(scale_static[i].x1,scale_static[i].y1);//插入点
languge_mode(English,no);
set_window_str(scale.scale_str);//输出字符串
}
show_caract(no);//隐藏光标
}
//===============================================================================================================================================
//参数设置回调函数
//===========================================================================================================
void para_form_sub(void)
{
show_form(¶_form);
current_form_index=para_form.index;
show_para();
init_caract(para_table.ins_dot[para_table.colomn][para_table.array].x,para_table.ins_dot[para_table.colomn][para_table.array].y,0x4f,0x00,yes); //在表中置光标
while(1)
{
current_form_index=para_form.index;
switch(search(para_form.index)) //查询
{
case on_btn_para_0:
table_edit(DATA,'0');
break;
case on_btn_para_1:
table_edit(DATA,'1');
break;
case on_btn_para_2:
table_edit(DATA,'2');
break;
case on_btn_para_3:
table_edit(DATA,'3');
break;
case on_btn_para_4:
table_edit(DATA,'4');
break;
case on_btn_para_5:
table_edit(DATA,'5');
break;
case on_btn_para_6:
table_edit(DATA,'6');
break;
case on_btn_para_7:
table_edit(DATA,'7');
break;
case on_btn_para_8:
table_edit(DATA,'8');
break;
case on_btn_para_9:
table_edit(DATA,'9');
break;
case on_btn_para_up:
table_edit(up,NULL);
break;
case on_btn_para_down:
table_edit(down,NULL);
break;
case on_btn_para_left:
table_edit(left,NULL);
break;
case on_btn_para_right:
table_edit(right,NULL);
break;
case on_btn_para_ok:
if(Is_para_right())
{
save_para_to_AI();
scale_renew=1; //刷新曲线使能
show_form(&Main_form); //返回主界面
draw_scale();
return;
}
break;
case on_btn_para_cancle:
break;
case on_btn_para_next_page:
para_form_exp_sub(); //到参数例子界面
break;
case on_btn_para_return:
show_form(&Main_form); //返回主界面
if(scale_renew==1)
{
//重画刻度和曲线起点
draw_scale();
curve1.x0=45;
curve1.y0=380;
curve2.x0=45;
curve2.y0=200;
}
return;
break;
default:
break;
}
}
}
//======================================================================================================
//显示当前温度,工作电压,电流,发射率
//========================================================================================================
unsigned char count=0;
void disp_multi_para(void)
{
if(count==0) //发射率
{
emissivity=(float)(300+emissivity_AD/4096*2.4/2*800)/PV_temp;
E_edit.text[0]=(unsigned int)emissivity%10+'0';
E_edit.text[1]='.';
E_edit.text[2]=((unsigned int)(emissivity*10))%10+'0';
E_edit.text[3]=((unsigned int)(emissivity*100))%10+'0';
E_edit.text[4]=((unsigned int)(emissivity*1000))%10+'0';
E_edit.text[5]='\0';
set_edit_window(&E_edit);
count++;
}
else if(count==1) //温度
{
//显示摄氏温度
if(PV_temp<1000)
{
T_edit.text[0]=PV_temp/100+'0';
T_edit.text[1]=(PV_temp/10)%10+'0';
T_edit.text[2]=PV_temp%10+'0';
T_edit.text[3]='\0';
}
else
{
T_edit.text[0]=PV_temp/1000+'0';
T_edit.text[1]=(PV_temp/100)%10+'0';
T_edit.text[2]=(PV_temp/10)%10+'0';
T_edit.text[3]=PV_temp%10+'0';
T_edit.text[4]='\0';
}
set_edit_window(&T_edit);
//显示开氏温度
if((PV_temp+273)<1000)
{
K_edit.text[0]=(PV_temp+273)/100+'0';
K_edit.text[1]=((PV_temp+273)/10)%10+'0';
K_edit.text[2]=(PV_temp+273)%10+'0';
K_edit.text[3]='\0';
}
else
{
K_edit.text[0]=(PV_temp+273)/1000+'0';
K_edit.text[1]=((PV_temp+273)/100)%10+'0';
K_edit.text[2]=((PV_temp+273)/10)%10+'0';
K_edit.text[3]=(PV_temp+273)%10+'0';
K_edit.text[4]='\0';
}
set_edit_window(&K_edit);
count++;
}
else if(count==2) //工作电压
{
voltage=(float)((float)voltage_AD/4096*2.4-0.47)/(2.4-0.47)*500;
V_edit.text[0]=voltage/100+'0';
V_edit.text[1]=(voltage/10)%10+'0';
V_edit.text[2]=voltage%10+'0';
V_edit.text[3]='\0';
set_edit_window(&V_edit);
count++;
}
else if(count==3) //工作电流
{
count=0;
}
}
//=============================================================================================================================
//保存发射率
//=============================================================================================================================
void save_emissivity()
{
write_byte(E_edit.text[0],fs.item_addr+(PV_temp-300)/50+10);
write_byte(E_edit.text[2],fs.item_addr+(PV_temp-300)/50+10+1);
write_byte(E_edit.text[3],fs.item_addr+(PV_temp-300)/50+10+2);
write_byte(E_edit.text[4],fs.item_addr+(PV_temp-300)/50+10+3);
}
//=======================================================================================================
//主窗体回调函数
//======================================================================================================
void main_form_sub(void)
{
unsigned int i;
show_form(&Main_form);
current_form_index=Main_form.index;
//write_AI(0x15,0);
//temp=read_AI(0x00);
while(1)
{
current_form_index=Main_form.index;
switch(search(Main_form.index)) //查询
{
case on_btn_para: //参数设置
if(start==no) //只有没有运行时才可以进入
para_form_sub();
break;
case on_btn_data: //数据查询
if(start==no) //只有没有运行时才可以进入
search_form_sub();
break;
case on_btn_NO: //试样编号
if(start==no) //只有没有运行时才可以进入
sample_sub();
break;
case on_btn_lang: //语言切换
break;
case on_btn_off: //关机
for(i=0;i<14;i++)
{
tst[i]=read_byte(fs.item_addr+(PV_temp-300)/50+i);
}
break;
case on_btn_help: //帮助
break;
case on_btn_stop_start: //停止和启动
if(start==no)
{
start=yes;
//刷新曲线
show_form(&Main_form);
if(scale_renew==1)
{
//重画刻度和曲线起点
draw_scale();
curve1.x0=45;
curve1.y0=380;
curve2.x0=45;
curve2.y0=200;
}
//从第一段开始运行
write_AI(0x0,1);
write_AI(0x15,0);
//提示
statusbar.text=(unsigned char*)"温度控制已使能";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请先按停止键再操作其他菜单");
languge_mode(English,no);
set_window_str("!");
}
else
{
start=no;
//停止AI表的运行
write_AI(0x15,12);
statusbar.text=(unsigned char*)"温度控制已关闭";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("您可以操作其他菜单了");
languge_mode(English,no);
set_window_str("!");
}
break;
//空闲时要做的工作
case Idel:
if(start==yes)
{
step=read_AI(0x00); //读短号
//计算此段之前运行时间
run_before_time=0;
for(i=0;i<step-1;i++)
run_before_time+=temp_para[i].hour*60+temp_para[i].minite;
run_time=run_before_time+ read_AI(0x56);//当前运行总时间
PV_temp=AIBUF[0]+AIBUF[1]*256;//读出实际温度值
//画时间温度曲线
curve1.x1=(float)run_time/scale.scale_time*35+45;
curve1.y1=380-(PV_temp-300)/200*30;
draw_curve(&curve1);
//显示当前温度,工作电压,电流,发射率
disp_multi_para();
//画发射率温度曲线
curve2.x1=(float)(PV_temp-300)/800*280+45;
curve2.y1=200-(float)emissivity*150;
draw_curve(&curve2);
//存储对应温度发射率
if((PV_temp>=300)&&(((PV_temp%50)<=1)||((PV_temp%50)>=49)))// +-1°内
save_emissivity();
//状态栏提示
statusbar.text=(unsigned char*)"温度控制已使能";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请先按停止键再操作其他菜单");
languge_mode(English,no);
set_window_str("!");
}
break;
default: //不作任何处理
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -