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

📄 mmi.c

📁 msp430与图形液晶接口(12232),需要自己定义字库
💻 C
📖 第 1 页 / 共 5 页
字号:
		mytime.year=com_rx_buf[4];
		mytime.month=com_rx_buf[5];
		mytime.day=com_rx_buf[6];
		mytime.hour=com_rx_buf[7];
		mytime.minute=com_rx_buf[8];
		mytime.second=com_rx_buf[9];
		mytime.msecond=com_rx_buf[10]+(com_rx_buf[11]<<8);
	}
}
void com_tx_handle()
{
	INT16U sum,vv;
	INT16U *p;
	INT8U i,len,cmd;
	com_tx_time=2000;			
	if(dev_flag==0x55)		//读装置类型
  {
  	dev_flag=0;
  	cmd=MMI_DEV;  	  	
  	len=2;
  }
  #if DEVICE_TYPE==61
  else if (set_kch_flag==0x55)	//下发定值和系数
	{
		set_kch_flag=0;
		cmd=MMI_SET_KCH;  	
		for(i=0;i<8;i++)
  	{
  		vv=(((INT32U)kch_data[i] << 14)+500)/1000;		
  		com_tx_buf[4+i*2]=vv & 0xff;
  		com_tx_buf[5+i*2]=vv >> 8;
  	}  	  	
  	com_tx_buf[20]=my_set.id & 0xff;
  	com_tx_buf[21]=my_set.id >>8;
  	len=20;
	}
	#endif
  else if(pqt_flag==0x55)		//电度
  {
  	pqt_flag=0;
  	cmd=MMI_PQT;
  	len=2;
  }
 	else if(asp_flag==0x55)		//ASP
  {
  	asp_flag=0;
  	cmd=MMI_ASP;
  	len=2;
  }
  else if(coe_flag==0x55 && coe_data==coe_data_bak)		//YK执行
  {
  	coe_flag=0;
  	cmd=MMI_COE;
  	com_tx_buf[4]=coe_data;
  	com_tx_buf[5]=coe_data;
  	coe_data=0xff;
  	coe_data_bak=0;
  	len=4;
  }
  else if(rds_flag==0x55)		//读定值
  {
  	rds_flag=0;
  	cmd=MMI_RDS;
  	com_tx_buf[4]=0;	//定值组号
  	com_tx_buf[5]=0;	//定值组号  	
  	len=4;
  }
  else if(lds_flag==0x55)		//下载定值
  {
  	lds_flag=0;
  	cmd=MMI_LDS;
  	com_tx_buf[4]=0;	//定值组号
  	com_tx_buf[5]=0;	//定值组号  	
  	dis_to_set();
  	// p=&my_set.id;
  	for(i=0;i<SET_LEN;i++)
  	{
  		com_tx_buf[6+i*2]=p[i] & 0xff;
  		com_tx_buf[7+i*2]=p[i] >> 8;
  	}  	
  	len=SET_LEN*2+4;
  }
  else if(wrs_flag==0x55)		//写入定值
  {
  	wrs_flag=0;
  	cmd=MMI_WRS;
  	com_tx_buf[4]=0;	//定值组号
  	com_tx_buf[5]=0;	//定值组号  	
  	len=4;
  }
  else if(ajt_flag==0x55)		//时间
  {
  	ajt_flag=0;
  	cmd=MMI_AJT;  	
  	len=2;
  }
  else if(rdk_flag==0x55)		//读系数
  {
  	rdk_flag=0;
  	cmd=MMI_RDK;  	
  	len=2;
  }
  else if(wrk_flag==0x55)		//写系数
  {
  	wrk_flag=0;
  	cmd=MMI_WRK;
  	p=&kch_data[0];
  	for(i=0;i<KCH_LEN;i++)
  	{
  		vv=p[i];
  		vv=(((INT32U)vv << 14)+500)/1000;
  		com_tx_buf[4+i*2]=vv & 0xff;
  		com_tx_buf[5+i*2]=vv >> 8;
  	}	
  	len=KCH_LEN*2+2;
  }
  else if(rdr_flag==0x55)		//读主机内存
  {
  	rdr_flag=0;
  	cmd=MMI_RDR;
  	com_tx_buf[4]=rdr_addr & 0xff;	//地址
  	com_tx_buf[5]=rdr_addr >> 8;		//地址  	
  	com_tx_buf[6]=3;	//长度  	
  	len=5;
  }
  else//   if (drf_flag==0x55)				//全数据
  {
  	drf_flag=0;
  	cmd=MMI_DRF;
  	len=2;
  	
  }
  com_tx_buf[0]=cmd;    				//命令码
  com_tx_buf[1]=len;						//帧长
  com_tx_buf[2]=DEVICE_TYPE;    //装置类别
  com_tx_buf[3]=0;      				//运行状态
  sum=sum_check(&com_tx_buf[0],len+2);
  com_tx_buf[len+2]=sum & 0xff;
  com_tx_buf[len+3]=sum >> 8;
  __disable_interrupt();                 // Disable interrupts
  com_tx_point=0;
  com_tx_count=len+4;
  __enable_interrupt();                 // Enable interrupts
}
void dis_yc_dynamic_page()
{
  INT8U i,p1,p2;
  INT16U v;
  char str[32];
	float f;
	#if DEVICE_TYPE==61			//主变自动化装置
	for(i=0;i<2;i++)
	{
		p1=page_point*2+i;
		if (page_point==0)
		{
			f=(float)yc_data[p1] * 150/1023-50;		// 油温变送器0~20MA对应-50~100度,测量装置并150欧电阻0~3V对应0~1023
			sprintf(str,"%5.2f\0",f);	
		}
		else if (page_point==1)			//直流备用
		{
			f=(float)yc_data[p1] * 3/1023;
			sprintf(str,"%5.2f\0",f);	
		}
		else if (page_point==2 || page_point==3)			//交流
		{
			f=(float)yc_data[p1] * 0.47135;  // PT:250V-1.1V AD:3V-1023 0.47135=3/1.414/1023*250/1.1
			sprintf(str,"%5.2f\0",f);	
		}
		else if (page_point==4 )
		{
			v=(INT16U)yc_data[p1];
	  	f=(float)v/1000;		  	
	    sprintf(str,"%6.3f\0",f);				
		}
		
		Lprint(7,1-i,str,LCD_NORMAL);	
	}
	#else
	
  for(i=0;i<2;i++)
  {
  	p1=page_point*2+i;
  	p2=yc_index[p1];
  	if (yc_data_type[p1]==0)			//保护电流二次
  	{
	  	f=(float)yc_data[p2]*100/8191;	
	    sprintf(str,"%5.2f\0",f);	
  	}
  	else if (yc_data_type[p1]==2)			//电压二次
  	{
	  	f=(float)yc_data[p2]*140/8191;	
	    sprintf(str,"%5.2f\0",f);	
  	}
  	else if (yc_data_type[p1]==3)			//测量电流二次
  	{
	  	f=(float)yc_data[p2]*7/8191;	
	    sprintf(str,"%5.3f\0",f);	
  	}
  	else if (yc_data_type[p1]==4)			//功率二次
  	{
	  	f=(float)yc_data[p2]*980*1.732/8191;	
	    sprintf(str,"%5.1f\0",f);	
  	}
  	else if (yc_data_type[p1]==5)			//COS
  	{
  	  v=(INT16U)yc_data[p2];
	  	f=(float)v/1000;	
	  	if (f>1) f=1;
	    sprintf(str,"%6.3f\0",f);	
  	}
  	else if (yc_data_type[p1]==6)			//f
  	{
  	  v=(INT16U)yc_data[p2];
	  	f=(float)v/1000;		  	
	    sprintf(str,"%6.3f\0",f);	
  	}  	
  	else if (yc_data_type[p1]==7)			//测量电流一次
  	{  		
	  	f=(float)yc_data[p2]*(float)ct_val*7/8191;		  	
	    sprintf(str,"%5.1f\0",f);	
  	}  	
  	else if (yc_data_type[p1]==8)			//电压一次
  	{	  	
	  	f=(float)yc_data[p2]*(float)pt_val*140/8191/1000;		  	
	    sprintf(str,"%5.2f\0",f);	
  	}  	
  	else if (yc_data_type[p1]==9)			//功率一次
  	{  		
	  	f=(float)yc_data[p2]*(float)ct_val*(float)pt_val*980*1.732/8191/1000;		  	
	    sprintf(str,"%5.1f\0",f);	
  	}
  	if (yc_data_type[p1]!=0x55)
  	{
  		if (yc_data_type[p1]==9)
  	  	Lprint(5,1-i,str,LCD_NORMAL);	
  	  else
  	  	Lprint(7,1-i,str,LCD_NORMAL);	   	
  	}
  }	
  #endif
	
}
void dis_yx_dynamic_page()
{
  INT8U i,pp,ll;
	#if DEVICE_TYPE==61			//主变自动化装置	
		
	j=(page_point*2) / 8;
	k=(page_point*2) % 8;
	if (bittst(&yx_data[j],k)) Lprint(9,1,"合",LCD_NORMAL);
	else Lprint(9,1,"分",LCD_NORMAL);
	if (bittst(&yx_data[j],k+1)) Lprint(9,0,"合",LCD_NORMAL);
	else Lprint(9,0,"分",LCD_NORMAL);	
  return;	
	#endif	
	if (page_point==0)
	{
		if (bittst(&yx_data[0],0)) Lprint(9,1,"合",LCD_NORMAL);
		else Lprint(9,1,"分",LCD_NORMAL);			
		if (bittst(&yx_data[0],1)) Lprint(9,0,"断线",LCD_NORMAL);	
		else Lprint(9,0,"正常",LCD_NORMAL);	
	}
	else if (page_point==1)
	{
		if (bittst(&yx_data[0],2)) Lprint(10,1,"投入",LCD_NORMAL);
		else Lprint(10,1,"退出",LCD_NORMAL);			
		if (bittst(&yx_data[0],3)) Lprint(10,0,"合",LCD_NORMAL);	
		else Lprint(10,0,"分",LCD_NORMAL);		
	}
	else if(page_point==2  || page_point==3 || page_point==4 || page_point==5)
	{
		if (bittst(&yx_data[0],page_point*2)) Lprint(9,1,"合",LCD_NORMAL);
		else Lprint(9,1,"分",LCD_NORMAL);			
		if (bittst(&yx_data[0],page_point*2+1)) Lprint(9,0,"合",LCD_NORMAL);	
		else Lprint(9,0,"分",LCD_NORMAL);
	}
	else if (page_point==6)
	{
		if (ad_erro_flag==0) Lprint(9,1,"正常",LCD_NORMAL);
		else Lprint(9,1,"故障",LCD_NORMAL);			
		if (kch_erro_flag==0) Lprint(9,0,"正常",LCD_NORMAL);
		else Lprint(9,0,"错误",LCD_NORMAL);
	}
	else if (page_point==7)
	{
		if (set_erro_flag==0) Lprint(9,1,"正常",LCD_NORMAL);
		else Lprint(9,1,"错误",LCD_NORMAL);			
		if (com_erro_flag==0) Lprint(9,0,"正常",LCD_NORMAL);
		else Lprint(9,0,"故障",LCD_NORMAL);
	}
	#if DEVICE_TYPE==35	 || DEVICE_TYPE==46		//差动	高后备
	else if(page_point>7)
	{
		for(i=0;i<2;i++)
		{		
			pp=page_point*2+i;	
			if(pp==23) ll=bittst(&run_status,ZXQ_ERRO);//执行器
			else if(pp==24) ll=0;	// 备用
			else if (pp==16 || pp==17)ll=bittst(&oct_status,(page_point-8)*2+i);//光纤A相	
			else  ll=bittst(&oct_status,(page_point-8)*2+i+1);//光纤B C相	
			if (ll )
				Lprint(11,1-i,"故障",LCD_NORMAL);
			else
				Lprint(11,1-i,"正常",LCD_NORMAL);
		}
	}
	#else
	else if(page_point>7)
	{	
		for(i=0;i<2;i++)
		{		
			pp=page_point*2+i;	
			if(pp==16) ll=bittst(&oct_status,0) | bittst(&oct_status,1);	//光纤A相	
			else if(pp==17) ll=bittst(&oct_status,3)| bittst(&oct_status,4);	//光纤B相	
			else if(pp==18) ll=bittst(&oct_status,5) | bittst(&oct_status,6);	//光纤C相	
			else if(pp==19) ll=0;	//光纤测频	
			else if(pp==20) ll=bittst(&run_status,ZXQ_ERRO);//执行器
			else if(pp==21) ll=0;		//备用
			if (ll )
				Lprint(11,1-i,"故障",LCD_NORMAL);
			else
				Lprint(11,1-i,"正常",LCD_NORMAL);
		}	
	}
	#endif
}
void dis_time_dynamic_page()
{
  char s[16];
	sprintf(s,"%4d\0",(mytime.year+2000));
	Lprint(0,1,s,LCD_NORMAL);
	sprintf(s,"%2d\0",mytime.month);
	Lprint(6,1,s,LCD_NORMAL);			
	sprintf(s,"%2d\0",mytime.day);
	Lprint(10,1,s,LCD_NORMAL);
	sprintf(s,"%2d\0",mytime.hour);
	Lprint(2,0,s,LCD_NORMAL);
	sprintf(s,"%2d\0",mytime.minute);
	Lprint(6,0,s,LCD_NORMAL);
	sprintf(s,"%2d\0",mytime.second);
	Lprint(10,0,s,LCD_NORMAL);	
}
INT16U value_handle(INT16U v,INT16U min,INT16U max)
{
	if (v<min) v=min;
	else if(v>max) v=max;
	return v;
}
void set_data_handle(INT8U tt)
{		
  INT8U type;
  INT16U v;
  type=set_type[tt];
  v=set_data[tt];
#if DEVICE_TYPE==11							//线路
	if (type==1) set_data[tt]=value_handle(v,10,1000);	//电压在1~100V
	else	
	{
		if (tt==25) set_data[tt]=value_handle(v,4500,5000);		//低频减载频率45HZ~50HZ		
		else if(tt==30)	set_data[tt]=value_handle(v,1,200);		//滑差频率0。01HZ~2HZ	
		else if (tt==0 || tt==4 || tt==13 || tt==35) set_data[tt]=value_handle(v,10,8000);	//电流在0.1~80A
		else if (tt==48) set_data[tt]=value_handle(v,100,1000);	//突变量启动电流在1~10A
		else if (tt==18) set_data[tt]=value_handle(v,2,140);	//零序电流在0.02~1.4A
		else if (tt==1) set_data[tt]=value_handle(v,0,9999);	//速断时间在0~99.99S
		else if (tt==5 || tt==15 || tt==27 || tt==19) set_data[tt]=value_handle(v,10,9999);	//时间在0.1~99.99S
		else if (tt==37 || tt==39 ) set_data[tt]=value_handle(v,10,1000);	//重合闸/后加速时间在0.1~10S
		else if (tt==21) set_data[tt]=value_handle(v,1,1000); //选线时间1~1000S	
		else if (tt==31) set_data[tt]=value_handle(v,4,50);	//滑差时间在0.04~0.5S		
		else if(tt==45) set_data[tt]=value_handle(v,20,40);//重合闸角度
		else if(tt==49) set_data[tt]=value_handle(v,1,99);//主机地址
	}
#endif
#if DEVICE_TYPE==21							//电容器
		if (tt==0 || tt==2 || tt==6 ) set_data[tt]=value_handle(v,100,8000);		//电流1~80A		
		else if(tt==19 || tt==24)	set_data[tt]=value_handle(v,100,1000);		//有流闭锁欠压/突变量启动电流1~10A			
		else if (tt==1) set_data[tt]=value_handle(v,0,9999);	//速断时间在0~99.99S
		else if (tt==3 || tt==13 || tt==15) set_data[tt]=value_handle(v,10,9999);	//时间在0.1~99.99S
		else if (tt==7 || tt==9) set_data[tt]=value_handle(v,10,1000);	//时间在0.1~10S
		else if (tt==8 ) set_data[tt]=value_handle(v,100,1400);	// 零序电压在10~140V
		else if (tt==12 ) set_data[tt]=value_handle(v,1000,1400);	// 过电压在100~140V
		else if (tt==14 ) set_data[tt]=value_handle(v,100,1000);	// 欠电压在10~100V	
		else if(tt==25) set_data[tt]=value_handle(v,1,99);//主机地址	
#endif
#if DEVICE_TYPE==45		|| DEVICE_TYPE==46					//低后备 高后备
		if (tt==1 || tt==3 || tt==29) set_data[tt]=value_handle(v,10,999);	// 电压在1~99.9V
		else if (tt==9 || tt==17 || tt==25 || tt==35 ) set_data[tt]=value_handle(v,10,8000);		//电流0.1~80A	
		else if (tt==11 || tt==13 || tt==15 || tt==37) set_data[tt]=value_handle(v,10,9999);	//过流1段时间在0.1~99.99S
		else if (tt==19 || tt==21 || tt==23 || tt==27 || tt==31 ) set_data[tt]=value_handle(v,10,9999);	//过流2段/3段/零序时间在0.1~99.99S
		else if(tt==38 )	set_data[tt]=value_handle(v,100,1000);		//突变量启动电流1~10A			
		else if(tt==39) set_data[tt]=value_handle(v,1,99);//主机地址	
#endif
#if DEVICE_TYPE==35			//差动
	if ( tt==7) set_data[tt]=value_handle(v,30,70);			//制动系数K1在0.3~0.7					  	
	else if (tt==9)	set_data[tt]=value_handle(v,10,40);//谐波系数K2在0.1~0.4					
	else if (tt==35)	set_data[tt]=value_handle(v,20,400);		//平衡系数KL在0.2~4		
	else if (tt==13  || tt==19 || tt==25 || tt==31) set_data[tt]=value_handle(v,10,9999);	//时间在0.1~99.99S
	else if(tt==1 )	set_data[tt]=value_handle(v,500,8000);		//差速断电流5~80A	
	else if(tt==3 || tt==5 || tt==11)	set_data[tt]=value_handle(v,10,1000);		//电流0.1~10A			
	else if(tt==17 || tt==23 || tt==29)	set_data[tt]=value_handle(v,10,8000);		//电流0.1~80A			
	else if(tt==38 )	set_data[tt]=value_handle(v,100,1000);		//突变量启动电流1~10A			
	else if(tt==39) set_data[tt]=value_handle(v,1,99);//主机地址			
				  	
#endif
}
void lcd_display_handle(INT8U page)
{
  INT8U i,j,type;
	char s[16];
	INT16U v;
	INT8U s_enable;
	INT8U bit[4],pp,x,ll,xsd,tt;
	float f;
	if (clear_flag!=0x55)	LCD_clear();	//换页清屏	
	clear_flag=0;
	switch (page)
	{
		case MAIN_PAGE :	//主菜单			 					
			Lprint(0,1,main_str[page_point*2],LCD_NORMAL);			
			Lprint(0,0,main_str[page_point*2+1],LCD_NORMAL);	
			if (arrow_state==0x55)
			{
				if(arrow_point==0) Lprint(0,1,arrow_str,LCD_NORMAL);
				else if(arrow_point==1) Lprint(8,1,arrow_str,LCD_NORMAL);
				else if(arrow_point==2) Lprint(0,0,arrow_str,LCD_NORMAL);
				else if(arrow_point==3) Lprint(8,0,arrow_str,LCD_NORMAL);
			}
		break;
		case YC_PAGE:		//测量页
			Lprint(0,1,yc_str[page_point*2],LCD_NORMAL);			
			Lprint(0,0,yc_str[page_point*2+1],LCD_NORMAL);	
			dis_yc_dynamic_page();	
		break;
		case YX_PAGE:		//状态页
			Lprint(0,1,yx_str[page_point*2],LCD_NORMAL);			
			Lprint(0,0,yx_str[page_point*2+1],LCD_NORMAL);	
			dis_yx_dynamic_page();
		break;
		case PW_PAGE:		//密码页
			Lprint(2,1,pw_str,LCD_NORMAL);
			dec_to_4bit(&bit[0],pass_word);	
			for(i=0;i<4;i++)
			{
				sprintf(s,"%d\0",bit[i]);				
				if (cursor_state==0x55 && cursor_point==i)	
					Lprint(5+i,0,s,LCD_UNDERLINE);		
				else
					Lprint(5+i,0,s,LCD_NORMAL);		
			}
		break;
		case YK_PAGE :	//传动页
			Lprint(0,1,yk_str[page_point*2],LCD_NORMAL);			
			Lprint(0,0,yk_str[page_point*2+1],LCD_NORMAL);	
			if (arrow_state==0x55)
			{
				if(arrow_point==0) Lprint(0,1,arrow_str,LCD_NORMAL);
				else if(arrow_point==1) Lprint(7,1,arrow_str,LCD_NORMAL);
				else if(arrow_point==2) Lprint(0,0,arrow_str,LCD_NORMAL);
				else if(arrow_point==3) Lprint(7,0,arrow_str,LCD_NORMAL);
			}
		break;

⌨️ 快捷键说明

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