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

📄 dis_key.c

📁 显示面板程序!用于电力系统的人机显示,可显示三相电流,电压.有功无功等
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
}  

unsigned char comtx(unsigned char nData)
{/*函数返回:1:成功 ; 0:不成功*/
	unsigned int i=0;
	TI = 0;
	SBUF = nData;
	while ((TI==0)&&(i++<2000));
	return TI;
}

void spidout ( unsigned char ch )
{
   unsigned char xi ,yi ;
   for ( xi=0; xi<8; xi++)
   {
      if ((ch & 0x80) == 0)
	     MOSI = 0;
	  else
	     MOSI = 1;
	  SCK = 1;
      for ( yi = 0x00 ; yi < 200 ; yi ++ ) ;
	  ch = ch << 1;
	  SCK = 0;
      for ( yi = 0x00 ; yi < 200 ; yi ++ ) ;
   }
}
unsigned char spidin()
{
   unsigned char xi , yi;
   unsigned char ch = 0 ;
   for ( xi=0; xi<7; xi++)
   {
      //MISO = 1;
      if (MISO == 1)
         ch ++;
	  SCK = 1;
	  ch = ch << 1;
      for ( yi = 0x00 ; yi < 200 ; yi ++ ) ;
	  SCK = 0;
      for ( yi = 0x00 ; yi < 200 ; yi ++ ) ;
   }
      MISO = 1;
      if (MISO == 1)
         ch ++;
   return ch;
}
void spiwcmd ( unsigned char cmd )
{
   unsigned char xi ;
   //SPIEN = 1 ;                     //允许SPI总线
   CSPI = 0 ;                    // nss = 0
   SCK = 0;
   for ( xi = 0x00 ; xi < 200 ; xi ++ ) ;
   spidout(cmd);
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   CSPI = 1 ;
   //SPIEN = 0 ;
}
void spiwsts ( void )
{
   unsigned char xi ;
   //SPIEN = 1 ;                     //允许SPI总线
   CSPI = 0 ;                    // nss = 0
   SCK = 0;
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   spidout(SPI_WRSR);
   spidout(0x08);
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   CSPI = 1 ;
   //SPIEN = 0 ;
}
/*unsigned char spirsts ( void ) 
{
   unsigned char xi ;
   unsigned char ch;
   //SPIEN = 1 ;
   CSPI = 0 ;                    // nss = 0
   SCK = 0;
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   spidout(SPI_RDSR);
   ch = spidin();
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   CSPI = 1 ;
   return ch ;
}*/
void wrbytespi ( unsigned int address , unsigned char dat ) 
{
   unsigned char xi ;
   spiwcmd ( SPI_WREN ) ;
   //SPIEN = 1 ;                     // 允许SPI总线
   CSPI = 0 ;                    // nss = 0
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   //SPIF = 0;
   spidout(SPI_WRITE) ;
   spidout(address / 0x100) ;
   spidout(address % 0x100) ;
   spidout(dat) ;
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   CSPI = 1 ;
   //SPIEN = 0 ;
   //SPIF = 0 ;
}

unsigned char rdbytespi ( unsigned int address )
{
   unsigned char xi,dat ;
   //SPIEN = 1 ;                     // 允许SPI总线
   CSPI = 0 ;                    // nss = 0
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   //SPIF = 0;
   spidout(SPI_READ) ;
   spidout(address / 0x100) ;
   spidout(address % 0x100) ;
   dat = spidin();
   for ( xi = 0x00 ; xi < 200 ; xi ++ )  ;
   CSPI = 1 ;
   //SPIEN = 0 ;
   //SPIF = 0 ;
   return dat ;
}


void send(unsigned char l)
  { 
    int i,check0;
    
    data_tx[0]=0xeb; data_tx[1]=0x90;
    
    check0=0xeb;
     for(i=1;i<l-1;i++)  check0=check0^data_tx[i]; 
     data_tx[l-1]=check0;     
    
    for(i=0;i<l;i++)   comtx(data_tx[i]);
	    
   } 
  


void rx_run()
{ 
	unsigned char i; 
	switch(data_rx[3]) 
	{  
	  case 0x03:  data_rx[3]=0;
		  for(i=0;i<8;i++)  { dataN[i]=data_rx[2*i+9]+data_rx[2*i+10]*256; }
		  for(i=0;i<2;i++) 
		  {   bhzt[i]=data_rx[i+5]; 
			  kgzt[i]=data_rx[i+7];
		  } 
		  break;  
	  case 0xc0:  data_rx[3]=0;  
		  for(i=0;i<20;i++) { dz[i]=data_rx[2*i+5]+data_rx[2*i+6]*256; } 
		  for(i=0;i<4;i++)  { kzz[i]=data_rx[i+40]; }
		  break;  
	  case 0xd0:  data_rx[3]=0; 
		  if(data_rx[5]==0x12)
		  {  page=36; page_change=1; }		    
		  break;           
   }  
}
 
/*  
void tx(unsigned char cmd)
  {
     
     switch(cmd)
      { 
        case 1: data_tx[3]=1; send(7); break;
      }  
                
  }  
*/

void int_com() interrupt 4
{ 
    unsigned char i,check1;  
    //unsigned int run_int;  
	
    if(RI==1)  
    {   
      rx1=rx0;  
      rx0=SBUF;  
      if((rx1==0xeb)&(rx0==0x90)) flag_rx=1;  
      if(flag_rx==1) { p_rx++; data_rx[p_rx]=rx0;}   
      if(p_rx>(data_rx[4]+4))   
      {  	/* LED8=1;CLED = 0;CLED = 1;  */ 
		  data_led=data_led^1;
		  check1=0xeb;
          for(i=1;i<p_rx;i++)  check1=check1^data_rx[i];
          if(check1!=rx0)  data_rx[3]=0;
          flag_rx=0; p_rx=0;  
	  }
      RI=0;   
    }  
	TI=0; 
} 

void LCD_CLR()
{ 
	unsigned int i,j; 

	for(i=0;i<6000;i++); 
	for(i=0;i<4;i++) for(j=0;j<16;j++)  disp816(j*8,i*2,' ');
} 

void page_mm()
{
	if(page_change==1) 
    { 
		LCD_CLR();  
		disp_chn(8,0,110); disp_chn(8,2,111); disp_chn(8,4,112); disp_chn(8,6,113);   //图元
	    disp816(32,0,'I'); disp816(40,0,'A'); disp816(56,0,'='); disp816(80,0,'.');  disp816(104,0,'A');	    
        disp816(40,2,'P'); disp816(56,2,'='); disp816(80,2,'.'); disp816(104,2,'K'); disp816(112,2,'w');		
        page_change=0;  
	}

	disp816(64,0,'0'+dataN[0]/1000);    disp816(72,0,'0'+dataN[0]%1000/100); //
    disp816(88,0,'0'+dataN[0]%100/10);  disp816(96,0,'0'+dataN[0]%10); 
	disp816(64,2,'0'+dataN[2]/1000);    disp816(72,2,'0'+dataN[2]%1000/100); //
    disp816(88,2,'0'+dataN[2]%100/10);  disp816(96,2,'0'+dataN[2]%10);

	if(kgzt[1] & b1_msk)        { disp_chn(8,2,115); }//开关合
	else if(kgzt[1] & b2_msk)   { disp_chn(8,2,111); }//开关分
	else { disp_chn(8,2,111); }
	if(kgzt[0] & b0_msk)      { disp_chn(8,0,114); }
    else { disp_chn(8,0,110); } 
    if(kgzt[0] & b1_msk)      { disp_chn(8,4,116); }
    else { disp_chn(8,4,112); }

    KEY8=0xff;  KEY9=1; 
    if((KEY8 !=0xff)||(KEY9 == 0)) 
	{ page = 1;  page_change = 1; }
} 
void page1()
{  
	
     if(page_change==1)
     {
       LCD_CLR(); 	   
	   disp_chn(16,0,13); disp_chn(32,0,14);//数据
	   disp_chn(16,2,15); disp_chn(32,2,16);//状态
       disp_chn(16,4,17); disp_chn(32,4,18);//定值
	   disp_chn(16,6,7);  disp_chn(32,6,8); //控制
       disp_chn(80,0,83); disp_chn(96,0,84);//事件
       disp_chn(80,2,85); disp_chn(96,2,106);//复归
	   disp_chn(80,4,94); disp_chn(96,4,95);//版本
       page_change=0; p_x=8; p_y=0;	  
     } 
 
     KEY8=0xff;  KEY9=1;
     if((KEY8==~8)&&(p_y>=2))                  { disp816(p_x,p_y,' '); p_y=p_y-2; }
     else if((KEY8==~32)&&(p_x==8)&&(p_y<=4))  { disp816(p_x,p_y,' '); p_y=p_y+2; }
	 else if((KEY8==~32)&&(p_x==72)&&(p_y<=2)) { disp816(p_x,p_y,' '); p_y=p_y+2; }
	 else if((KEY8==~32)&&(p_x==8)&&(p_y==6))  { disp816(p_x,p_y,' '); p_x=72;p_y=0; }

⌨️ 快捷键说明

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