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

📄 form.c

📁 该程序是基于c8051f的红外线发射率的测量程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		      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(&para_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 + -