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

📄 mmi.c

📁 msp430与图形液晶接口(12232),需要自己定义字库
💻 C
📖 第 1 页 / 共 5 页
字号:
// *********************************************************************
// 	项目名称:	电力五防
// 	软件功能:	电脑钥匙程序
//	版本号:		V1.00
// 	编制时间:	2007.10.15  	
// *********************************************************************
#pragma language=extended
#include  <msp430x14x.h>
#include  <stdio.h>
#define  DEVICE_TYPE 46	//11-线路 21-电容器  45-低后备 46-高后备  35-差动 61-主变自动化装置
#define MY_VERSION 120		//程序版本V1.20
#include "mmi.h"
void   delay(INT16U i);
void  key_in();
void key_handle(INT8U key);
void lcd_display_handle(INT8U page);



void   delay(INT16U i)
{
  if(i==0) return;
  while(i) i--;
}
INT8U  bittst(INT8U *p,INT16U n)
{
  INT16U i;
  INT16U j;
  INT16U v;

  i=n / 8;
  j=n % 8;
  v= (*(p+i)) & bit1_tab[j];
  if (v!=0)	v= 0xff;
  return v;
}
void  bitset(INT16U *p,INT16U n)
{
	INT16U i,j;
	
	i=n / 16;
	j=n % 16;
	*(p+i)=*(p+i) | bit1_tab[j];
}
INT16U  sum_check(INT8U *check_data,INT8U len)
{
	INT16U i,v;
	
	v=0;
	for(i=0;i<len;i++)
	v+=*(check_data+i);
	return v;
}
void start_high_osc()
{
  INT16U i;
	BCSCTL1 &= ~XT2OFF; //START HIGH FREQ
	BCSCTL2=SELS+SELM1; // ACLK MCLK SMCLK=XT2CLK 8M
	do
	{
		IFG1 &= ~OFIFG;
		for(i=0xff;i>0;i--);
	}
	while((IFG1 & OFIFG)!=0);
}

void port_init()
{
 P1SEL = 0;     //P1 = I/O
 P1DIR = 0xFF ;  //P1 = OUTPUT
 P1OUT = 0xFF;	

 P2SEL = 0;		
 P2DIR = 0x00;		//P2 = INTPUT

 P3SEL = 0;	
 P3DIR = 0xFF;		//P3 = OUTPUT
 P3OUT = 0xFF;

 P4SEL = 0;			
 P4DIR = 0xFF;		//P4 = OUTPUT
 P4OUT = 0xFF;

 P5SEL = 0;	
 P5DIR = 0x1F;  //P5.7~5 = INTPUT  P5.4~0= OUTPUT
 P5OUT = 0xFF;

 P6SEL = 0;	
 P6DIR = 0xC0;		//P6.7~6=OUTPUT  P6.5~0=INTPUT
 P6OUT = 0xFF;
}
void dec_to_4bit(INT8U *p,INT16U ww)
{
	//功能:将一个4位的十进制数按位展开
	//入口参数:WW
	//出口参数:*p
	INT16U n0,n1,n2;
	n0=ww/1000;
	p[0]=n0 % 10;			//千位
	n1=ww % 1000;
	p[1]=n1/100;	//百位
	n2=n1%100;
	p[2]=n2/10;		//十位
	p[3]=n2 % 10;	//个位
}
INT16U bit4_to_dec(INT8U *p)
{
	//功能:将4个单位数合成一个十进制四位数
	//入口参数:*p
	//出口参数:vv
	INT16U vv;
	vv=p[0]*1000+p[1]*100+p[2]*10+p[3];
	return vv;
}
void hex_to_4bit(INT8U *p,INT16U ww)
{
	//功能:将一个4位的16进制数按位展开
	//入口参数:WW
	//出口参数:*p	
	p[0]=ww >>12;		
	p[1]=(ww & 0xfff) >>8;	
	p[2]=(ww & 0xff)>>4;		
	p[3]=ww & 0xf;	
}
INT16U bit4_to_hex(INT8U *p)
{
	//功能:将4个单位数合成一个16进制四位数
	//入口参数:*p
	//出口参数:vv
	INT16U vv;
	vv=(p[0]<<12)+(p[1]<<8)+(p[2]<<4)+p[3];
	return vv;
}
void dec_to_3bit(INT8U *p,INT16U ww)
{
	//功能:将一个3位的十进制数按位展开
	//入口参数:WW
	//出口参数:*p
	INT16U n0,n1;		
	n0=ww/100;
	p[0]=n0 % 10;			//百位
	n1=ww % 100;
	p[1]=n1/10;		//十位
	p[2]=n1%10;		//个位
	
}
INT16U bit3_to_dec(INT8U *p)
{
	//功能:将3个单位数合成一个3位数
	//入口参数:*p
	//出口参数:vv
	INT16U vv;
	vv=p[0]*100+p[1]*10+p[2];
	return vv;
}
void dec_to_2bit(INT8U *p,INT16U ww)
{
	//功能:将一个2位的十进制数按位展开
	//入口参数:WW
	//出口参数:*p	
	p[0]=ww/10;		//十位
	p[1]=ww%10;		//个位
}
INT16U bit2_to_dec(INT8U *p)
{
	//功能:将2个单位数合成一个2位数
	//入口参数:*p
	//出口参数:vv
	INT16U vv;
	vv=p[0]*10+p[1];
	return vv;
}
void write_430_mem(INT16U addr,INT16U len,INT8U *p)
{
	INT8U i;
	INT8U *pf;
  INT8U *pt;
	__disable_interrupt();    // Disable interrupts
  WDTCTL=WDTPW+WDTHOLD; 		//DISABLE WD
  FCTL2=FWKEY+FSSEL0+FN0;		//define flash input clock=ACLK NO DIVDE
  if (addr<128 )
  	pf=(INT8U *)0x1000	;			//write SEGB
  else
  {
    addr-=128;
  	pf=(INT8U *)0x1080	;			//write SEGA
  }
  if (addr+len>128)  return;
  pt=pf;
  for(i=0;i<128;i++)     //备份原FLASH内容
    rd_buf[i]=*pt++;
  for(i=addr;i<addr+len;i++)
    rd_buf[i]=*p++;
  FCTL1=FWKEY+ERASE;				//ENABLE ERASE
  FCTL3=FWKEY;							//FLASH UNLOCK
  *pf=0;										//NULL WRITE TO START ERASE
  FCTL1=FWKEY+WRT;   				//ENABLE WRITE
  for(i=0;i<128;i++)
    *pf++=rd_buf[i];	
  FCTL1=FWKEY;							
  FCTL3=FWKEY+LOCK;				 	//FLASH UNLOCK
  __enable_interrupt();    	// Enable interrupts
}
void read_430_mem(INT16U addr,INT16U len,INT8U *p)
{
  INT8U i, *ps;
	ps=(INT8U *)(0x1000+addr);	//read SEGA
	for(i=0;i<len;i++) p[i]=*ps++;
}
void com_init()
{
	INT16U i;
	for(i=0;i<COM_LEN;i++)
	{
		com_tx_buf[i]=0;
		com_rx_buf[i]=0;
	}
  com_rx_count=0;
  com_tx_count=0;
  com_tx_point=0;
  com_rx_flag=0;
  com_rx_time=0;
  com_tx_time=0;
  com_no_rx_time=0;
  U0CTL&=~SWRST ;
  U0CTL = CHAR;                  // 8-bit character
  U0TCTL=SSEL1 ;        				 //UCLK = SMCLK
  //U0BR0 = 0x41;                  // 8M/9600 =833.33
  //U0BR1 = 0x03;                  //
  U0BR0 = 0x05;                  // 8M/2400 =3333.33
  U0BR1 = 0x0d;                  //

  U0MCTL = 0x55;                 // modulation 00100101

  ME1|=URXE0 +UTXE0 ;    				 // Enable USART0 TXD/RXD
  //IE1|=URXIE0+UTXIE0;            // Enable USART0 RX TX interrupt
  P3SEL|=0x30;										//P3.4,5=USART0 TXD/RXD
  P3DIR|=0x10;										//P3.4 OUTPUT
}
void com_handle()
{
	INT8U cc;
	if ((IFG1&URXIFG0)==URXIFG0)
	{
		cc=U0RXBUF;
		com_rx_buf[com_rx_count++]=cc;
		com_rx_time=50;
	}
	if (com_tx_count>0 && ((IFG1 & UTXIFG0) == UTXIFG0))
	{

		U0TXBUF=com_tx_buf[com_tx_point++];
		com_tx_count--;
	}
}
void set_to_dis(INT8U *p)
{
#if DEVICE_TYPE==11
	set_data[0]=p[8]+(p[9]<<8);					//速断电流 PAGE0
	set_data[1]=p[10]+(p[11]<<8);				//速断时限	
	
	if (bittst(&p[2],1)) set_data[2]=1 ;	//速断功能投退 PAGE1
	else set_data[2]=0;
	if (bittst(&p[2],2)) set_data[3]=1 ;	//速断方向功能投退
	else set_data[3]=0;	
	
	set_data[4]=p[12]+(p[13]<<8);		//过流电流 PAGE2
	set_data[5]=p[14]+(p[15]<<8);		//过流时间	
	
	if (bittst(&p[2],3)) set_data[6]=1 ;	//过流功能投退 PAGE3
	else set_data[6]=0;
	if (bittst(&p[2],4)) set_data[7]=1 ;	//过流方向投退
	else set_data[7]=0;	
	
	if (bittst(&p[2],0))set_data[8]=1 ;	//低压闭锁速断投退 PAGE4
	else set_data[8]=0;
	set_data[9]=p[24]+(p[25]<<8 );		//低压闭锁速断电压	
	
	if (bittst(&p[4],4)) set_data[10]=1;	//低压闭锁过流 PAGE5
	else set_data[10]=0;
	set_data[11]=p[50]+(p[51]<<8 );		//低压闭锁过流电压		
		
	set_data[12]=0x55;								//过负荷     PAGE6
	set_data[13]=p[16]+(p[17]<<8 );		//过负荷电流	
	
	set_data[14]=0x55;								//过负荷     PAGE7
	set_data[15]=p[18]+(p[19]<<8 );		//过负荷时间	
	
	if (bittst(&p[2],5))							//过负荷功能投退 PAGE8
	{
		if (bittst(&p[3],2))	set_data[16]=2 ;	
		else  set_data[16]=1 ;
	}
	else set_data[16]=0;
	if (bittst(&p[2],6)) set_data[17]=1 ;	//过负荷方向投退
	else set_data[17]=0;	
	
	set_data[18]=p[20]+(p[21]<<8 );		//零序电流 PAGE9
	set_data[19]=p[22]+(p[23]<<8 );		//零序时间
	
	set_data[20]=p[46]+(p[47]<<8 );		// 选线电压 PAGE10
	set_data[21]=p[48]+(p[49]<<8 );		//选线时间
	
	if (bittst(&p[2],7)) 							//零序投退 PAGE11
	{
		if (bittst(&p[3],1))	set_data[22]=2 ;	
		else set_data[22]=1 ;
	}
	else set_data[22]=0;	
	if (bittst(&p[3],0))							//选线投退
	{
		if (bittst(&p[4],5)) set_data[23]=2 ;	
		else set_data[23]=1;	
	}
	else set_data[23]=0;
	set_data[24]=0x55;								//低频减载     PAGE12
	set_data[25]=p[26]+(p[27]<<8 );		//低频减载频率	
	
	set_data[26]=0x55;								//低频减载     PAGE13
	set_data[27]=p[28]+(p[29]<<8 );		//低频减载时间	
	
	if (bittst(&p[4],0)) set_data[28]=1;	//低频减载 PAGE14
	else set_data[28]=0;	
	if (bittst(&p[4],1)) set_data[29]=1;	//滑差闭锁
	else set_data[29]=0;
	
	set_data[30]=p[30]+(p[31]<<8 );		// 滑差频率 PAGE15
	set_data[31]=p[32]+(p[33]<<8 );		//滑差时间
	
	if (bittst(&p[4],2)) set_data[32]=1;	//低压闭锁低频投退 PAGE16
	else set_data[32]=0;
	set_data[33]=p[34]+(p[35]<<8 );		//低压闭锁低频电压
	
	if (bittst(&p[4],3)) set_data[34]=1;	//低流闭锁低频 PAGE17
	else set_data[34]=0;
	set_data[35]=p[36]+(p[37]<<8 );		//低流闭锁低频电流
	
	if (bittst(&p[3],3)) set_data[36]=1;	//重合闸投退 PAGE18
	else set_data[36]=0;
	set_data[37]=p[38]+(p[39]<<8 );		//重合闸时间
	
	set_data[38]=0x55;								//后加速     PAGE19
	set_data[39]=p[44]+(p[45]<<8 );		//后加速时间	
	
	if (bittst(&p[3],6)) set_data[40]=1;	//后加速 PAGE20
	else set_data[40]=0;
	if (bittst(&p[5],0)) set_data[41]=1;	// 手合后加速
	else set_data[41]=0;
	
	if (bittst(&p[3],5)) set_data[42]=1;	//重合闸检无压 PAGE21
	else set_data[42]=0;
	set_data[43]=p[40]+(p[41]<<8 );				//电压
	
	if (bittst(&p[3],4)) set_data[44]=1;	//重合闸检同期 PAGE22
	else set_data[44]=0;
	set_data[45]=p[42]+(p[43]<<8 );				//角度
	
	if (bittst(&p[4],6)) set_data[46]=1;	//PT断线 PAGE23
	else set_data[46]=0;
	if (bittst(&p[4],7)) set_data[47]=1;	//PT断线闭锁方向
	else set_data[47]=0;
	
	set_data[48]=p[6]+(p[7]<<8 );				 //突变量启动 PAGE24
	set_data[49]=p[0]+(p[1]<<8 );				 //主机地址
	
	set_data[50]=p[52]+(p[53]<<8 );				 //有功脉冲 PAGE25
	set_data[51]=p[54]+(p[55]<<8 );				 //无功脉冲
	
	set_data[52]=ct_val;									//电流变比 PAGE26
	set_data[53]=pt_val;				 					//电压变比
	
	if (bittst(&p[3],7))	set_data[54]=1;	//五防功能投退 PAGE27	
	else  set_data[54]=0 ;
	
#endif

#if DEVICE_TYPE==21
	set_data[0]=p[8]+(p[9]<<8);					//速断电流 PAGE0
	set_data[1]=p[10]+(p[11]<<8);				//速断时限	

	set_data[2]=p[12]+(p[13]<<8);				//过流电流 PAGE1
	set_data[3]=p[14]+(p[15]<<8);				//过流时限	
	
	if (bittst(&p[2],0)) set_data[4]=1;	//速断功能 PAGE2
	else set_data[4]=0;
	if (bittst(&p[2],1)) set_data[5]=1;	//过流功能
	else set_data[5]=0;
	
	set_data[6]=p[16]+(p[17]<<8);				//零序电流 PAGE3
	set_data[7]=p[18]+(p[19]<<8);				//零序时限	
	
	set_data[8]=p[20]+(p[21]<<8);				//零序电压 PAGE4
	set_data[9]=p[22]+(p[23]<<8);				//零序时限	
	
	if (bittst(&p[2],2)) set_data[10]=1;	//零序电流功能 PAGE5
	else set_data[10]=0;
	if (bittst(&p[2],5)) set_data[11]=1;	//零序电压功能
	else set_data[11]=0;
	
	set_data[12]=p[24]+(p[25]<<8);				//过电压电压 PAGE6
	set_data[13]=p[26]+(p[27]<<8);				//过电压时限	
	
	set_data[14]=p[28]+(p[29]<<8);				//欠电压电压 PAGE7
	set_data[15]=p[30]+(p[31]<<8);				//欠电压时限	
	
	if (bittst(&p[2],3)) set_data[16]=1;	//过电压功能 PAGE8
	else set_data[16]=0;
	if (bittst(&p[2],4)) set_data[17]=1;	//欠电压功能
	else set_data[17]=0;
	
	set_data[19]=p[32]+(p[33]<<8);				//有流闭锁欠电压电流  PAGE9
	
	if (bittst(&p[2],6)) set_data[21]=1;	//有流闭锁欠电压功能 PAGE10
	else set_data[21]=0;
	
	if (bittst(&p[2],7)) set_data[23]=1;	//PT断线功能 PAGE11
	else set_data[23]=0;
	
	set_data[24]=p[6]+(p[7]<<8);					//突变量   PAGE12
	set_data[25]=p[0]+(p[1]<<8);				//主机地址	
	
	set_data[26]=p[36]+(p[37]<<8);				//无功脉冲  PAGE13
	if (bittst(&p[3],0))	set_data[27]=1 ;	//五防功能投退
	else  set_data[27]=0 ;
	
	set_data[28]=ct_val;				 				//电流变比 PAGE14
	set_data[29]=pt_val;				 				//电压变比
	


#endif

#if DEVICE_TYPE==45	 || DEVICE_TYPE==46	//低后备 高后备
	set_data[1]=p[8]+(p[9]<<8);					//低电压	PAGE0

	set_data[3]=p[10]+(p[11]<<8);				//负序电压 PAGE1
	
	if (bittst(&p[2],4)) set_data[5]=1;	//闭锁一段投退PAGE2
	else set_data[5]=0;	
	
	if (bittst(&p[3],0)) set_data[7]=1;	//闭锁二段投退 PAGE3
	else set_data[7]=0;	
	
	if (bittst(&p[2],3)) set_data[8]=1;	//过流一段投退 PAGE4
	else set_data[8]=0;	
	set_data[9]=p[12]+(p[13]<<8);				//过流一段电流
	set_data[11]=p[14]+(p[15]<<8);				//过流一段一时限 PAGE5	
	set_data[13]=p[16]+(p[17]<<8);				//过流一段二时限 PAGE6	
	set_data[15]=p[18]+(p[19]<<8);				//过流一段三时限 PAGE7	
	
	if (bittst(&p[2],7)) set_data[16]=1;	//过流二段投退 PAGE8
	else set_data[16]=0;		
	set_data[17]=p[20]+(p[21]<<8);					//过流二段电流
	set_data[19]=p[22]+(p[23]<<8);				//过流二段一时限 PAGE9	
	set_data[21]=p[24]+(p[25]<<8);				//过流二段二时限 PAGE10	
	set_data[23]=p[26]+(p[27]<<8);				//过流二段三时限 PAGE11	
	
	if (bittst(&p[3],2)) set_data[24]=1;	//过流三段投退 PAGE12
	else set_data[24]=0;
	set_data[25]=p[28]+(p[29]<<8);				//过流三段电流
	set_data[27]=p[30]+(p[31]<<8);				//过流三段时限PAGE13

⌨️ 快捷键说明

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