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

📄 有无功表液晶显示.c

📁 矩力公司电能计量芯片实际应用电路代码资料,放心下载!
💻 C
📖 第 1 页 / 共 2 页
字号:
//此程序的目的是显示将有无功液晶上的所有数据显示出来,并且是一个单元一个单元的显示,最后全部显示后停留一段时间
//在开始重新显示
//存储器2404内空间分配:10H-13H为有功电能,14H-17H为无功电能,20H-23H为有功电能初始值,24H-27H为
//无功电能初始值,18H-1DH为表地址,28H-2BH为掉电保护存储数据
//#include<STARTUP.A51>
#include  "c8051.h"

bit chuankou_bz=0;
bit jieshu_bz=0;
//bit error_bz=0;
bit RESET_bz;
bit SIG_bz;
bit error_bz=0;
bit txcs_bz=0;

/*有关全局变量*/
uchar  receive[COUNT1];            //用于存放串口接受数据
uchar pointer=0;
uchar Data[10]={0xfa,0x60,0xd6,0xf4,0x6c,0xbc,0xbe,0xe0,0xfe,0xfc};  //0   1   2   3   4   5   6   7   8   9
uchar Number[4]={0x02,0x99,0x99,0x09};                //缓冲区用于存放液晶要显示                                                      //fa  60  d6  f4  6c  bc  be  e0  fe  fc
//uchar Number[4];

 uchar b[10];
 uchar runall_counter;
 uchar SPI_CM;                  //用于存放SPI读或写的命令字
 uchar SPI_Data[3];              //用于存放SPI读或写的数据

 uchar YOUGONG_CS;
 uchar WUGONG_CS;

 
/////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////
void main()
 {   
    PCA0MD    &= ~0x40;
    PCA0MD    = 0x00;  // 关闭看门狗
	P0MDIN = 0xF3        ;//p0.2,p0.3置为模拟输入端口引脚
                  
    OSCXCN = 0x67     ;//使能外部振荡器
    mDelay(1)    ;//延时1毫秒  ;在使能晶体振荡器和检查 XTLVLD 位之间引入 1ms 的延时可以防止提前将系统时钟切换到外部振荡器
while (!(OSCXCN & 0x80)) ; 
   
      
	SYSCLK_Init ( );  
	PORT_Init ( );
	Timer2_Init (SYSCLK / 12/10 );       
	 UART0_Init ( ); 
	 EX0=1;                             //SETB EX0;开INT0中断
	 ES0=1;
	 EA=1;   
   mDelay(100);
   WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/   
    TXC=0;       
  while(1)
  { 
   
   
     
    if(RESET_bz==0) 
	{  
	    RESET7022( );
	   }
	if(SIG_bz!=0)
	 {     
	       SPImtWrite( );                     //往7022里写校表参数
           SIG_bz=0;
	   }
	
		                                                            //
    INT1621();//1621初始化,将一些设置写入驱动芯片中
    RUNALL();//全显示输出  调试用
    
     electric_stor();            //电能储存


//	 P2^3 = ~P2^3;//喂狗信号
 //    for(k=254;k>0;k--);
//	 LED = ~LED;
 //    for(i=200;i>0;i--)
//	 {
//	 for(j=200;j>0;j--)
//	    {
//	  for(k=200;k>0;k--);
//        }	  
//	 }
while(shezhi_bz==0)	         //	duanjie
{
 RS485(); 
 } 
while(txcs_bz)	             //
 { uchar j;
	   error_bz=0;
	   pointer=0;
	   txcs_bz=0;
	   chuankou_bz=0;
	   for(j=0;j<COUNT1;j++)
	    {
		receive[j]=0;
		 }
  } 
while(jieshu_bz)
    {
	jieshu_bz=0;
	pointer=0;
	chuankou_bz=0;
	
     RS485();	         //通讯
	}
	 
	  
      //WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/
     //mDelay(20);
     //Number[0]=0;
     //Number[1]=0;
     //Number[2]=0;
    // Number[3]=0; /*将数组中的值清掉,以验证读出的数是否正确*/
    // RdFromROM(Number,10,4);


	//SPI_Data[0]=0x01;
    //SPI_Data[1]=0x02;
    //SPI_Data[2]=0x03;
	//SPI_CM=0x0D;
    //SPIRead();       

      
    SPI_CM=0x0D;
    SPIRead(); 	 
   }
 }

////////////////////////////////////////////////////////////////////////////
//Brushlcd   向LCD内写入数据
 void  Brushlcd(uchar *p)
{ uchar j;
  uchar DATA1621; 
   INTI(); 
  SendBit_1621(0x80,1);//发送写入命令101中的第一个1
  SendBit_1621(0x40,4);//发送101中的01和A5,A4,A3,A2,A1,A0,从最开始的往里写,即0100 000
    for(j=0;j<10;j++)
        {
           DATA1621=p[j];
	      SendBit_1621(DATA1621,8);
		} 
 }
 /////////////////////////////////////////////////////////////////////////////
//RUNALL调试用,全显示数据
 void RUNALL()
{
 switch (runall_counter)
  {                     // convesn(b);    
                          //0   1   2   3   4   5   6   7   8   9
                          //fa  60  d6  f4  6c  bc  be  e0  fe  fc
        case 0:
		          {//uchar b[10]={0x00,0x80,0x6f,0xf4,0x6d,0xbc,0xbe,0xe0,0xfe,0xfd};
				  uchar length_data=5;
				  uchar b[10];
				  WrToROM(Number,10,4); /*将初始化后的数值写入EEPROM*/
				 RdFromROM(Number,10,4);             //
                   b[0]=0x00;
				   b[1]=0x80;
				   b[2]=0x6f;
				   convesn(b,length_data);
                   b[4]=b[4]+1;
				   b[9]=b[9]+1;
				   Brushlcd(b);                                                  //向LCD内写入数据
				   }break;                                                        //总有功
		  case 1:{//uchar b[10]={0x00,0x80,0xdb,0xd6,0xf5,0x6c,0xbc,0xbe,0xe1,0xfe};      
		           uchar length_data=5;
				   uchar b[10];
				   WrToROM(Number,14,4); /*将初始化后的数值写入EEPROM*/
				 RdFromROM(Number,14,4);             //
                   b[0]=0x00;
				   b[1]=0x80;
				   b[2]=0xdb;
				   convesn(b,length_data); 
                   b[4]=b[4]+1;
				   b[8]=b[8]+1;
				   Brushlcd(b);                                                 //向LCD内写入数据
				   }break;                                                        //总无功
		  case 2:{//uchar b[10]={0x00,0x80,0x0f,0x60,0xd6,0xf4,0x6c,0xbd,0xbe,0xe1};
		            uchar length_data=5;
					uchar b[10];
                   b[0]=0x00;
				   b[1]=0x80;
				   b[2]=0x0f;
				   convesn(b,length_data); 
                   b[4]=b[4]+1;
                   b[7]=b[7]+1;
				   b[9]=b[9]+1;
				  Brushlcd(b);                                                 //向LCD内写入数据      
		           }break;                                                        //瞬时有功功率XX.XX 
		  case 3:{//uchar b[10]={0x00,0x08,0x0f,0xfa,0x60,0xd6,0xf4,0x6d,0xbc,0xbf};
		            uchar length_data=5;
					uchar b[10];
                   b[0]=0x00;
				   b[1]=0x08;
				   b[2]=0x0f;
				   convesn(b,length_data); 
                   b[4]=b[4]+1;
                   b[7]=b[7]+1;
				   b[9]=b[9]+1;
				  Brushlcd(b);                                                 //向LCD内写入数据    
		           }break;                                                        //A相有功功率XX.XX
		  case 4:{//uchar b[10]={0x00,0x04,0x0f,0xfc,0xfa,0x60,0xd6,0xf5,0x6c,0xbd}; 
		            uchar length_data=5;
					uchar b[10];
                   b[0]=0x00;
				   b[1]=0x04;
				   b[2]=0x0f;
				   convesn(b,length_data); 
                   b[4]=b[4]+1;
                   b[7]=b[7]+1;
				   b[9]=b[9]+1;
				  Brushlcd(b);                                                  //向LCD内写入数据    
		           }break;                                                         //B相有功功率XX.XX
		  case 5:{//uchar b[10]={0x00,0x02,0x0f,0xfe,0xfc,0xfa,0x60,0xd7,0xf4,0x6d}; 
		           uchar length_data=5;
				   uchar b[10];
                   b[0]=0x00;
				   b[1]=0x02;
				   b[2]=0x0f;
				   convesn(b,length_data); 
                   b[4]=b[4]+1;
                   b[7]=b[7]+1;
				   b[9]=b[9]+1;
				  Brushlcd(b);                                                 //向LCD内写入数据    
		           }break;                                                        //C相有功功率XX.XX
		  case 6:{//uchar b[10]={0x00,0x80,0xcb,0xe0,0xfe,0xfc,0xfa,0x61,0xd7,0xf4};

⌨️ 快捷键说明

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