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

📄 mmi.c

📁 msp430与图形液晶接口(12232),需要自己定义字库
💻 C
📖 第 1 页 / 共 5 页
字号:
	
	if (bittst(&p[3],7)) set_data[28]=1;	//单相接地功能投退 PAGE14
	else set_data[28]=0;
	set_data[29]=p[32]+(p[33]<<8);				//零序电压
	set_data[31]=p[34]+(p[35]<<8);				//零序电压时限PAGE15
	
	if (bittst(&p[3],6)) set_data[33]=1;	//PT断线功能投退 PAGE16
	else set_data[33]=0;
	
	if (bittst(&p[3],5)) set_data[34]=1;	//过负荷投退 PAGE17
	else set_data[34]=0;
	set_data[35]=p[36]+(p[37]<<8);		//过负荷电流
	
	set_data[37]=p[38]+(p[39]<<8);		//过负荷时间PAGE18
	
	set_data[38]=p[6]+(p[7]<<8);					//突变量   PAGE19
	set_data[39]=p[0]+(p[1]<<8);				//主机地址	
	
	set_data[40]=ct_val;				 				//电流变比 PAGE20
	set_data[41]=pt_val;				 				//电压变比
	
	if (bittst(&p[2],5))	set_data[42]=1 ;		//五防功能投退 PAGE21
	else  set_data[42]=0;
	
#endif
#if DEVICE_TYPE==35				// 差动保护
	if (bittst(&p[2],0)) set_data[0]=1;		//差速断投退 PAGE0
	else  set_data[0]=0;	
	set_data[1]=p[8]+(p[9]<<8);						//差速断电流
	
	if (bittst(&p[2],1)) set_data[2]=1;		//比率差动投退 PAGE1
	else  set_data[2]=0;	
	set_data[3]=p[10]+(p[11]<<8);						//比率差动电流
	set_data[5]=p[12]+(p[13]<<8);						//比率差动制动电流PAGE2
	set_data[7]=p[14]+(p[15]<<8);						//比率差动制动系数PAGE3
	set_data[9]=p[16]+(p[17]<<8);						//比率差动谐波系数PAGE4
	set_data[11]=p[18]+(p[19]<<8);						//差流过大告警电流PAGE5
	set_data[13]=p[20]+(p[21]<<8);						//差流过大告警时限PAGE6
	if (bittst(&p[2],2)) set_data[15]=1;		//差流过大告警投退 PAGE7
	else  set_data[15]=0;	
	set_data[17]=p[22]+(p[23]<<8);						//高压侧过负荷告警电流PAGE8
	set_data[19]=p[24]+(p[25]<<8);						//高压侧过负荷告警时限PAGE9
	if (bittst(&p[2],3)) set_data[21]=1;		//高压侧过负荷告警投退 PAGE10
	else  set_data[21]=0;	
	set_data[23]=p[34]+(p[35]<<8);						//过负荷启动通风电流PAGE11
	set_data[25]=p[36]+(p[37]<<8);						//过负荷启动通风时限PAGE12
	if (bittst(&p[2],6)) set_data[27]=1;		//过负荷启动通风投退 PAGE13
	else  set_data[27]=0;	
	set_data[29]=p[38]+(p[39]<<8);						//过负荷闭锁调压电流PAGE14
	set_data[31]=p[40]+(p[41]<<8);						//过负荷闭锁调压时限PAGE15
	if (bittst(&p[2],7)) set_data[33]=1;		//过负荷闭锁调压投退 PAGE16
	else  set_data[33]=0;	
	set_data[35]=p[44]+(p[45]<<8);						//低压侧平衡系数PAGE17
	if (bittst(&p[3],1)) set_data[36]=1;		//CT断线检测投退 PAGE18
	else  set_data[36]=0;	
	if (bittst(&p[3],2)) set_data[37]=1;		//CT断线闭锁差动投退 PAGE18
	else  set_data[37]=0;	
	set_data[38]=p[6]+(p[7]<<8);					//突变量   PAGE19
	set_data[39]=p[0]+(p[1]<<8);				//主机地址	
	
	if (bittst(&p[2],5))	set_data[40]=1 ;	//五防功能投退 PAGE20
	else  set_data[40]=0 ;

#endif

}
void dis_to_set()
{
	INT8U vv[4];
	INT16U cc0,cc1;
	cc0=0; cc1=0;
#if DEVICE_TYPE==11
	my_set.id=set_data[49];
	my_set.i_inc=set_data[48];
	my_set.i_sd=set_data[0];
	my_set.t_sd=set_data[1];
	my_set.i_gl=set_data[4];
	my_set.t_gl=set_data[5];
	my_set.i_gfh=set_data[13];
	my_set.t_gfh=set_data[15];
	my_set.i_lx=set_data[18];
	my_set.t_lx=set_data[19];
	my_set.u_dy_sd=set_data[9];
	my_set.f_frq=set_data[25];
	my_set.t_frq=set_data[27];
	my_set.f_inc=set_data[30];
	my_set.t_inc=set_data[31];
	my_set.u_frq=set_data[33];
	my_set.i_frq=set_data[35];
	my_set.t_rec=set_data[37];
	my_set.u_rec=set_data[43];
	my_set.a_rec=set_data[45];
	my_set.t_hjs=set_data[39];
	my_set.u_xx=set_data[20];
	my_set.t_xx=set_data[21];
	my_set.u_dy_gl=set_data[11];
	my_set.PSP=set_data[50];
	my_set.QSP=set_data[51];	
	
	if (set_data[2]==1) bitset(&cc0,1);	//速断投退
	if (set_data[8]==1) bitset(&cc0,0);	//低压闭锁速断
	if (set_data[3]==1) bitset(&cc0,2); 	//速断方向功能投退
	if (set_data[6]==1) bitset(&cc0,3);  //过流功能投退
	if (set_data[7]==1) bitset(&cc0,4); 	//过流方向投退
	if (set_data[16]>=1) bitset(&cc0,5);	//过负荷功能投退
	if (set_data[16]==2)bitset(&cc0,10);	//过负荷出口选择
	if (set_data[17]==1)bitset(&cc0,6);	//过负荷方向投退
	if (set_data[22]>=1)bitset(&cc0,7);	//零序投退
	if (set_data[22]==2)bitset(&cc0,9);	//零序出口选择
	if (set_data[23]>=1)bitset(&cc0,8);	//选线投退	
	if (set_data[23]==2)bitset(&cc1,5);	//选线谐波选择	
	if (set_data[36]==1)bitset(&cc0,11); //重合闸投退
	if (set_data[44]==1)bitset(&cc0,12); //重合闸检同期
	if (set_data[42]==1)bitset(&cc0,13);//重合闸检无压
	if (set_data[40]==1)bitset(&cc0,14);//后加速
	if (set_data[41]==1)bitset(&cc1,8);//手合后加速
	if (set_data[28]==1)bitset(&cc1,0);	//低频减载
	if (set_data[29]==1)bitset(&cc1,1);	//滑差闭锁
	if (set_data[32]==1)bitset(&cc1,2);	//低压闭锁低频
	if (set_data[34]==1)bitset(&cc1,3);	//低流闭锁低频
	if (set_data[10]==1)bitset(&cc1,4);	//低压闭锁过流
	if (set_data[46]==1)bitset(&cc1,6);	//PT断线
	if (set_data[47]==1)bitset(&cc1,7);	//PT断线闭锁方向
	if (set_data[54]==1)bitset(&cc0,15);	//五防投退
	ct_val=set_data[52];
	pt_val=set_data[53];
	
#endif
#if DEVICE_TYPE==21
	my_set.id=set_data[25];
	my_set.i_inc=set_data[24];
	my_set.i_sd=set_data[0];
	my_set.t_sd=set_data[1];
	my_set.i_gl=set_data[2];
	my_set.t_gl=set_data[3];
	my_set.i_lx=set_data[6];
	my_set.t_i_lx=set_data[7];
	my_set.u_lx=set_data[8];
	my_set.t_u_lx=set_data[9];
	my_set.u_gy=set_data[12];
	my_set.t_u_gy=set_data[13];
	my_set.u_qy=set_data[14];
	my_set.t_u_qy=set_data[15];
	my_set.i_bs_qy=set_data[19];	
	my_set.PSP=set_data[27];
	my_set.QSP=set_data[26];
	if(set_data[4]==1) bitset(&cc0,0);	//速断投退
	if(set_data[5]==1) bitset(&cc0,1);	//过流投退
	if(set_data[10]==1) bitset(&cc0,2);	//零序电流投退
	if(set_data[11]==1) bitset(&cc0,5);	//零序电压投退
	if(set_data[16]==1) bitset(&cc0,3);	//过压投退
	if(set_data[17]==1) bitset(&cc0,4);	//欠压投退
	if(set_data[21]==1) bitset(&cc0,6);	//有流闭锁投退
	if(set_data[23]==1) bitset(&cc0,7);	//PT断线投退
	if (set_data[27]==1)bitset(&cc0,8);	//五防投退
	ct_val=set_data[28];
	pt_val=set_data[29];
#endif


#if DEVICE_TYPE==35		//差动保护
	my_set.id=set_data[39];					// 主机地址
	my_set.i_inc=set_data[38];			//  突变量启动电流
	my_set.i_csd=set_data[1];			// 4 差速断电流
	my_set.i_cd=set_data[3];  		// 5 差动电流
	my_set.i_zd=set_data[5];			// 6 制动电流
	my_set.k_zd=set_data[7];  		// 7 制动系数
	my_set.k_k2=set_data[9];			// 8 二次谐波系数
	my_set.i_gj=set_data[11];  	// 9  差流过大告警电流
	my_set.t_gj=set_data[13];			// 10 差流过大时间
	my_set.i_ggfh=set_data[17];			// 11高过负荷电流
	my_set.t_ggfh=set_data[19]; 	// 12 高过负荷时间
	my_set.i_tf=set_data[23];	// 17 启动通风电流
	my_set.t_tf=set_data[25];	// 18 启动通风时间
	my_set.i_ty=set_data[29];			// 19 调压电流
	my_set.t_ty=set_data[31];		// 20 调压时间
	my_set.k_kl=set_data[35];			// 22平衡系数	
  if(set_data[0]==1) bitset(&cc0,0);	//速断投退
	if(set_data[2]==1) bitset(&cc0,1);	//差动投退
	if(set_data[15]==1) bitset(&cc0,2);	//差流过大投退
	if(set_data[21]==1) bitset(&cc0,3);	//高压侧过负荷投退	
	if(set_data[27]==1) bitset(&cc0,6);	//过负荷启动通风投退
	if(set_data[33]==1) bitset(&cc0,7);	//过负荷闭锁调压投退
	if(set_data[36]==1) bitset(&cc0,9);	//CT断线投退
	if(set_data[37]==1) bitset(&cc0,10);	//CT断线闭锁差动投退
	if (set_data[40]==1)bitset(&cc0,5);	//五防投退
#endif
#if DEVICE_TYPE==11	 || DEVICE_TYPE==21 || DEVICE_TYPE==35	|| DEVICE_TYPE==45 || DEVICE_TYPE==46

	vv[0]=ct_val & 0xff;
	vv[1]=ct_val >> 8;
	vv[2]=pt_val & 0xff;
	vv[3]=pt_val >> 8;
#endif
	write_430_mem(PTCT_ADDR,4,&vv[0]);
}
void com_rx_handle()
{
	INT8U i,n;
	INT8U cmd,r_len,f_len,type;
	INT16U sum;		
	INT16U vv;
	com_no_rx_time=0;
	if (lcd_off_flag==0) com_tx_time=0;//液晶得电时连续问数据,否则2S问一次	
	if (com_erro_flag==0x55 && current_page==ERRO_PAGE && erro_point==3)
	{	
		current_page=MAIN_PAGE;
		page_point=0;
		arrow_state=0;
		arrow_point=0;
	  lcd_display_handle(current_page);
	}
	com_erro_flag=0;
	com_rx_flag=0;

	cmd=com_rx_buf[0];
	r_len=com_rx_count;
	com_rx_count=0;
	f_len=com_rx_buf[1];
	if ((f_len+4)!=r_len) return;
	sum=(com_rx_buf[r_len-2] & 0xff)+(com_rx_buf[r_len-1] << 8);
	if (sum_check(&com_rx_buf[0],r_len-2) != sum) 	  return;
	type=com_rx_buf[2];
	run_status=com_rx_buf[3];	
	if (bittst(&run_status,SYS_ERRO)) asp_flag=0x55;
	if (bittst(&run_status,ADC_ERRO) )
	{
		if (ad_erro_flag==0)
		{
			ad_erro_flag=0x55;			
			if (lcd_off_flag==0x55)
			{
				no_key_time=0; 	
				lcd_off_flag=0;
				LCD_on();				
			}
			current_page=ERRO_PAGE;
			erro_point=0;
			lcd_display_handle(current_page);
		}
		P1OUT &= ~0x08;		//P1.3点亮AD故障灯
	}	
	else
	{
		if (current_page==ERRO_PAGE && erro_point==0)
		{	
			current_page=MAIN_PAGE;
			page_point=0;
			arrow_state=0;
			arrow_point=0;
		  lcd_display_handle(current_page);
		}
		ad_erro_flag=0;
		P1OUT |= 0x08;			//P1.3 清AD故障灯
	}
	if (bittst(&run_status,SET_ERRO) )
	{
		if (set_erro_flag==0)
		{
			if (lcd_off_flag==0x55)
			{
				no_key_time=0; 	
				lcd_off_flag=0;
				LCD_on();				
			}
			set_erro_flag=0x55;						
			current_page=ERRO_PAGE;
			erro_point=2;
			lcd_display_handle(current_page);
		}
	}
	else set_erro_flag=0;
	if (bittst(&run_status,KCH_ERRO) )
	{
		if (kch_erro_flag==0)
		{
			if (lcd_off_flag==0x55)
			{
				no_key_time=0; 	
				lcd_off_flag=0;
				LCD_on();				
			}
			kch_erro_flag=0x55;		
			current_page=ERRO_PAGE;	
			erro_point=1;
			lcd_display_handle(current_page);
		}
	}
	else kch_erro_flag=0;
	if (bittst(&run_status,ZXQ_ERRO))
	{
		if (zxq_erro_flag==0)
		{
			zxq_erro_flag=0x55;
			if (lcd_off_flag==0x55)
			{
				no_key_time=0; 	
				lcd_off_flag=0;
				LCD_on();				
			}					
			current_page=ERRO_PAGE;	
			erro_point=4;
			lcd_display_handle(current_page);
		}
	}
	else
	{
		if (current_page==ERRO_PAGE && erro_point==4 	)//液晶显示执行器故障页
		{
			current_page=MAIN_PAGE;
			page_point=0;
	 		arrow_state=0;
			lcd_display_handle(current_page);
		}
		zxq_erro_flag=0;
	}
	if (cmd==MMI_DEV)  			//装置类型
	{
		main_version=com_rx_buf[6]+(com_rx_buf[7]<<8);
		if (type!=DEVICE_TYPE)
		{
		  if (sys_lock!=0x55)
		  {
        sys_lock=0x55;
        current_page=LOCK_PAGE;
        main_type=type;
        lcd_display_handle(current_page);
			}
		}
		else sys_lock=0;
	}
	else if(cmd==MMI_DRF)		//全数据
	{
		for(i=0;i<YC_NUM;i++)	
			yc_data[i]=com_rx_buf[4+i*2] +(com_rx_buf[5+i*2]<<8);
		for(i=0;i<6;i++)
			yx_data[i]=com_rx_buf[4+YC_NUM*2+i];		
		#if DEVICE_TYPE!=61
		oct_status=yx_data[4];
		if (bittst(&yx_data[0],FLG_HWK) )
		{
			P1OUT &= ~0x02;			//置合位灯
			P1OUT |= 0x01;			//清分位灯
		}
		else
		{
			P1OUT |= 0x02;			//清合位灯
			P1OUT &= ~0x01;			//置分位灯
		}
		if (bittst(&yx_data[0],FLG_YK) )
		{
			P6OUT &= ~0x80; //置远方灯
			P6OUT |= 0x40;	//清就地灯
		}
		else
		{
			P6OUT |= 0x80;			//清远方灯
			P6OUT &= ~0x40; 		//置就地灯
		}
		#endif
	}	
	else if(cmd==MMI_RDK)		//读系数
	{
		
		for(i=0;i<KCH_LEN;i++)
		{
			vv=com_rx_buf[4+i*2] +(com_rx_buf[5+i*2]<<8);
			kch_data[i]=((INT32U)vv *(INT32U)1000+8192) >>14;
		}		
		current_page=KCH_PAGE;
		page_point=0;
		cursor_state=0;
		cursor_line=0;
		lcd_display_handle(current_page);
	}
	else if(cmd==MMI_WRK)		//写系数
	{
		if (com_rx_buf[4]==0x55)		// 写成功
			write_eep_ok=0x55;
		else
			write_eep_ok=0;
		kch_erro_flag=0;	
		if(current_page==KCH_PAGE)
		{
			current_page=MODIFY_RETUREN_PAGE;
			lcd_display_handle(current_page);
		}
	}
	else if(cmd==MMI_RDS)		//读定值
	{
		set_to_dis(&com_rx_buf[6]);
		current_page=SET_PAGE;
		page_point=0;
		lcd_display_handle(current_page);
	}
	else if(cmd==MMI_LDS)		//下载定值
	{
		wrs_flag=0x55;
	}
	else if(cmd==MMI_WRS)		//写定值
	{
		if (com_rx_buf[5]==0x55)		// 写成功
			write_eep_ok=0x55;
		else
			write_eep_ok=0;
		set_erro_flag=0;	
		if(current_page==SET_PAGE)
		{
			current_page=MODIFY_RETUREN_PAGE;
			lcd_display_handle(current_page);
		}
	}
	else if(cmd==MMI_COE)		//YK执行
	{
		current_page=COE_RETURN_PAGE;
		coe_return_data=com_rx_buf[4];
		lcd_display_handle(current_page);
	}
	else if(cmd==MMI_ASP)		//ASP
	{
		if (((f_len-2) % 8 )==0)
		{
		  if (lcd_off_flag==0x55)		//若液晶关断电源
			{
				lcd_off_flag=0;
				no_key_time=0; 	
				LCD_on();		
				LCD_clear();
			}
			n=(f_len-2)/8;
			for(i=0;i<n;i++)
			{
				if (asp_wtp>=ASP_PAGE_NUM) asp_wtp=0;
				asp_data[asp_wtp].year=mytime.year;
				asp_data[asp_wtp].month=mytime.month;
				asp_data[asp_wtp].day=mytime.day;
				asp_data[asp_wtp].hour=com_rx_buf[i*8+4];
				asp_data[asp_wtp].minute=com_rx_buf[i*8+5];
				vv=com_rx_buf[i*8+6]+(com_rx_buf[i*8+7]<<8);
				asp_data[asp_wtp].second=vv / 1000;
				asp_data[asp_wtp].type=com_rx_buf[i*8+8];
				asp_data[asp_wtp].phase=com_rx_buf[i*8+9];
				vv=com_rx_buf[i*8+10]+(com_rx_buf[i*8+11]<<8);
				asp_data[asp_wtp].data=vv;				
				current_page=ASP_PAGE;		
				page_point=asp_wtp;	
				asp_line_point=0;
				lcd_display_handle(current_page);
				write_430_mem(ASP_ADDR+asp_wtp*10,10,&asp_data[asp_wtp].year);
				asp_wtp=(asp_wtp+1) % ASP_PAGE_NUM;
			}			
			asp_erro_flag=0x55;
		}
	}
	else if(cmd==MMI_RDR)
	{
	  for(i=0;i<3;i++)	
	    rdr_data[i]=com_rx_buf[6+i*2]+(com_rx_buf[7+i*2]<<8);	
	}
	else if(cmd==MMI_AJT)		//时间
	{

⌨️ 快捷键说明

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