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

📄 lcdparse.c

📁 个人学习参考!禁止使用到产品上! 任何人不得公开发布!
💻 C
字号:
/*========================================*/
/*系统名称:DDSF-CECG-JiangSu             */
/*函数名称:液晶显示  		              */
/*程序编写:步爱军			              */
/*开始日期:2005-01-01			          */
/*完成日期:				              */
/*修改记录:  				              */
/*软件版本:DDSF-CECG-002                 */
/*版本说明:用户数据保存在外部            */
/*外部器件:LM75、AT24C02、HT1621、LPC932 */
/*          R8025、ADE7755                */
/*========================================*/
//液晶显示方式选择
//利用到的重要数据
//显示停顿时间---LcdShowTime=IicByteRead(0xa0,0x62);
//历史电量显示标志---LcdShowBit[1]=IicByteRead(0xa0,0x63);
//当前电量显示标志---LcdShowBit[0]=IicByteRead(0xa0,0x64)&0x80;
#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>

void LcdFull(unsigned char DataOne,unsigned char DataTwo,unsigned char DataThree,unsigned char DataFour)
{
    unsigned char data i,j,k;
 	unsigned char idata DataBufA[4],DataBufB[4];
	unsigned char code	Digit[12]={	
                					0xBE,	//0
                					0x06,	//1
                					0x7C,	//2
                					0x5E,	//3
                					0xC6,	//4
                					0xDA,	//5
                					0xFA,	//6
                					0x0E,	//7
                					0xFE,	//8
                					0xDE,	//9
                					0xf8,   //a--E
                					0x40,   //b--_
                				  };   
   DataBufA[0]=DataOne;
   DataBufA[1]=DataTwo;
   DataBufA[2]=DataThree;
   DataBufA[3]=DataFour;
   
   if(BataMoveFg)
   {
     for(i=0;i<4;i++)//
     {
       k=DataBufA[i];			
       j=DataBufA[i+1];			
       k=k&0x0f;						
       k=k<<4;							
       j=j>>4;					
       j=j&0x0f;	
       DataBufB[i]=k|j;
     }
   }
   for(i=0;i<3;i++)
   {
      k=DataBufB[i] & 0xf0;
      k=k>>4;
      LcdShowBuf[i+i]=Digit[k];
      k=DataBufB[i] & 0x0f;
      LcdShowBuf[i+i+1]=Digit[k];
   }

}
void LcdDisplayData(unsigned char DataOne,unsigned char DataTwo,unsigned char DataThree,unsigned char DataFour,unsigned char DataFive,unsigned char DataSix,unsigned char DataSeven)
{
   	unsigned char data i;

	LcdShowBuf[6]=DataFive;
    LcdShowBuf[7]=DataSix;

    switch(DataSeven)
    {
       case 0x00 : //没有小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);                  
       break;
       case 0x21 : //第2位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[1]=LcdShowBuf[1]|0x01;
       break;
       case 0x41 : //第4位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[1]=LcdShowBuf[1]|0x01;
                   LcdShowBuf[3]=LcdShowBuf[3]|0x01;
       break;
       case 0x51 : //第5位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[4]=LcdShowBuf[4]|0x01;
       break;
   }
   if(ComFg)
   {
		LcdShowBuf[7]=LcdShowBuf[7]|0x10;
   }
   else
   {
        LcdShowBuf[7]=LcdShowBuf[7]&0xef;
   }
   if(ReverseFgToLcd)
   {
        LcdShowBuf[7]=LcdShowBuf[7]|0x40;
   }
   else
   {
        LcdShowBuf[7]=LcdShowBuf[7]&0xbf;
   } 	
   LcdStart();
   LcdSendId(0xa0);               //写数据操作
   LcdSendAddress(0x00);
   for(i=0;i<8;i++)
   {
    	LcdSendByte(LcdShowBuf[i]);
		Delay(LcdDelay);
   }
   LcdStop();
}
void LcdParse(void)
{
    unsigned char data i,j,k,l,m;
	unsigned char data databuf[4];
	if(LcdTimeFg)
    {
        //LcdTimeFg=0;
        m=LcdShowBit[0]&0x80;
        switch(LcdRunData)
        {
            case 0x01 ://第01种显示方式数据提取到显示缓冲区---当前日期/                   
                       if(LcdShowBit[0]&0x01)
                       {
                          i=IicByteRead(0x64,0x40) & 0x3f;
                          j=IicByteRead(0x64,0x50) & 0x1f;
                          k=IicByteRead(0x64,0x60);
                          l=0;
                          BataMoveFg=0;//不执行移位操作 
                          LcdDisplayData(i,j,k,l,0x80,0x00,0x41);
                       }
                       else
                       {
                          LcdRunData=0x02;
                       }
              break;       
              case 0x02 ://第02种显示方式数据提取到显示缓冲区---当前时间/
                         if(LcdShowBit[0]&0x02)
                         {
                             k=IicByteRead(0x64,0x00) & 0x7f;
                             j=IicByteRead(0x64,0x10) & 0x7f;
                             i=IicByteRead(0x64,0x20) & 0x3f;
                             l=0; 
                             BataMoveFg=0;//不执行移位操作
                             LcdDisplayData(i,j,k,l,0x40,0x0c,0x00);
                         }
                         else
                         {
                             LcdRunData=0x03;
                         }
              break;         			           
              case 0x03 ://第03种显示方式数据提取到显示缓冲区---当前总电量(整数加小数|整数)
            
               		     //电表先显示整数---6位整数
               		     if(m)
                         {        
                             BataMoveFg=0;//不执行移位操作 
       					     for(i=0;i<4;i++)	
       						 {
       							databuf[i]=HexToBcd(SumPulseData[i]);
       						 }
                             LcdDisplayData(databuf[2],databuf[1],databuf[0],0x00,0x08,0x82,0x00);
                         }
                         //电表显示整数加小数---5位整数加一位小数
                         else
                         {
                             BataMoveFg=1;//执行移位操

⌨️ 快捷键说明

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