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

📄 lcd.c

📁 lcd驱动C语言程序
💻 C
字号:
#include        "Lcd.h"


const DisData DisPlay_Info[] =
{
//标识,显示数据地址,显示项目信息1,2,       显示提示信息1,2, 小数单位标识信息
  0x00,    &Second,       //时间
  0x01,    &Day,         //日期
  0x02,    YgKwhZ,       //有功电量
  0x03,    YgKwhJ,
  0x04,    YgKwhF,
  0x05,    YgKwhP,
  0x06,    YgKwhG,
  0x07,    WgKwhZ,
  0x08,    WgKwhJ,
  0x09,    WgKwhF,
  0x10,    WgKwhP,
  0x11,    WgKwhG,       //无功电量
  0x12,    ubV1Rms,       
  0x13,    ubIRms,      
  0x14,    iPowerFct, 
};

const unsigned char Digit[] =
{
  CHAR_0,  CHAR_1,  CHAR_2,  CHAR_3,  CHAR_4,  CHAR_5,
  CHAR_6,  CHAR_7,  CHAR_8,  CHAR_9,  CHAR_A,  CHAR_B,
  CHAR_C,  CHAR_D,  CHAR_E,  CHAR_F
};
/******************************************************************
*                             清LCD显存                           *
*******************************************************************/
void Clr_LCD_Display(void)
{
  unsigned char i;
  for (i=0; i<12; i++)
  {
    LCDMEM[i] = 0;
  }
}



void LcdMemL1( unsigned int nPage, unsigned char chs,unsigned char DispBit )//显示的字节数
{
  unsigned char i,dd;
  LCDMEM[0] = Digit[(DisPlay_Info[nPage].ID)>>4];
  LCDMEM[1] = Digit[(DisPlay_Info[nPage].ID)&0x0F];
  LCDMEM[2] = 0x00;
  LCDMEM[3] = 0x00;
  if(DispBit == 6)
    goto  gbitend;
  if(disbit1 <4 )
    goto  gbit1;
  if((((*(DisPlay_Info[nPage].Addr1+3))>>4)!= 0x00)||(((*(DisPlay_Info[nPage].Addr1+3))&0x0f)!= 0x00))
    goto  gbitend;
gbit1:
  if(disbit1 <3)
    goto gbit2;
  if(((*(DisPlay_Info[nPage].Addr1+2))>>4)!= 0x00)
    goto  gbitend;
  else  chs -= 1;
  if(DispBit ==5)
    goto  gbitend;
  if(((*(DisPlay_Info[nPage].Addr1+2))&0x0f)!= 0x00)
    goto  gbitend;
  else  chs -= 1;
gbit2:
  
  if(((*(DisPlay_Info[nPage].Addr1+1))>>4)!= 0x00)
   goto gbitend;
  else  chs -= 1;
  if(DispBit == 3)
    goto gbitend;
  if(((*(DisPlay_Info[nPage].Addr1+1))&0x0f)!= 0x00)
    goto gbitend;
  else  chs -= 1;
  if(((*(DisPlay_Info[nPage].Addr1))>>4)!= 0x00)
    goto  gbitend;
  else chs -=1;
   
gbitend:
  for( i=0;i<chs;i++ )
  {
    dd = i/2;
    if(i%2 == 0)
      LCDMEM[9-i] = Digit[(*(DisPlay_Info[nPage].Addr1+dd))&0x0F];
    else
      LCDMEM[9-i] = Digit[(*(DisPlay_Info[nPage].Addr1+dd))>>4];
  }
  
}

void dispro( unsigned char *Addr1, unsigned char chs,unsigned char DispBit )//显示的字节数
{
  unsigned char i,dd;
  if(DispBit == 6)
    goto  dppend;
  if(disbit1 <4 )
    goto  dpp1;
  if((((*(Addr1+3))>>4)!= 0x00)||(((*(Addr1+3))&0x0f)!= 0x00))
    goto  dppend;
dpp1:
  if(disbit1 <3)
    goto dpp2;
  if(((*(Addr1+2))>>4)!= 0x00)
    goto  dppend;
  else  chs -= 1;
  if(DispBit ==5)
    goto  dppend;
  if(((*(Addr1+2))&0x0f)!= 0x00)
    goto  dppend;
  else  chs -= 1;
dpp2:
  
  if(((*(Addr1+1))>>4)!= 0x00)
   goto dppend;
  else  chs -= 1;
  if(DispBit == 3)
    goto dppend;
  if(((*(Addr1+1))&0x0f)!= 0x00)
    goto dppend;
  else  chs -= 1;
  if(((*(Addr1))>>4)!= 0x00)
    goto  dppend;
  else chs -=1;
   
dppend:
  for( i=0;i<chs;i++ )
  {
    dd = i/2;
    if(i%2 == 0)
      LCDMEM[9-i] = Digit[(*(Addr1+dd))&0x0F];
    else
      LCDMEM[9-i] = Digit[(*(Addr1+dd))>>4];
  }
  
}
  


void  UpdataDisplay(void)
{
    Clr_LCD_Display();
    switch(Pages)
    {
      case 0:
        {
          disbit1 = 3;
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[0];
          diswork[2] = Second;
          diswork[3] = Minute;
          diswork[4] = Hour;
          dispro(&diswork[2],6,6);
          LCDMEM[5] |= D_P1;
          LCDMEM[7] |= D_P1;
          LCDMEM[11] = D_TIME+D_Curr; 
        } break;
      case 1:
        {
          disbit1 = 3;
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[1];
          diswork[2] = Day;
          diswork[3] = Month;
          diswork[4] = Year[0];
          dispro(&diswork[2],6,6);
          LCDMEM[5] |= D_P1;
          LCDMEM[7] |= D_P1;
          LCDMEM[11] = D_DATE+D_Curr; 
        } break;
      case 2: //有功电能总
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[2];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = YgKwhZXS;
          diswork[2] = YgKwhZ[0];
          diswork[3] = YgKwhZ[1];
          diswork[4] = YgKwhZ[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[9] |= D_h;
          LCDMEM[10] = D_X + 0x80 + 0x02;
          LCDMEM[11] = D_KW + D_Curr;
        } break;
      case 3://有功电能尖
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[3];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = YgKwhJXS;
          diswork[2] = YgKwhJ[0];
          diswork[3] = YgKwhJ[1];
          diswork[4] = YgKwhJ[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[9] |= D_h;
          LCDMEM[10] = D_X + 0x80 + 0x01;
          LCDMEM[11] = D_KW + D_Curr;
        } break;
      case 4://有功电能峰
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[4];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = YgKwhFXS;
          diswork[2] = YgKwhF[0];
          diswork[3] = YgKwhF[1];
          diswork[4] = YgKwhF[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[9] |= D_h;
          LCDMEM[10] = D_X + 0x80 + 0x10;
          LCDMEM[11] = D_KW + D_Curr;
        } break;
      case 5://有功电能平
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[5];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = YgKwhPXS;
          diswork[2] = YgKwhP[0];
          diswork[3] = YgKwhP[1];
          diswork[4] = YgKwhP[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[9] |= D_h;
          LCDMEM[10] = D_X + 0x80 + 0x20;
          LCDMEM[11] = D_KW + D_Curr;
        } break;
      case 6://有功电能谷
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[6];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = YgKwhGXS;
          diswork[2] = YgKwhG[0];
          diswork[3] = YgKwhG[1];
          diswork[4] = YgKwhG[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[9] |= D_h;
          LCDMEM[10] = D_X + 0x80 + 0x40;
          LCDMEM[11] = D_KW + D_Curr;
        } break;
      case 7://无功电能总
        {
          LCDMEM[0] = Digit[0];
          LCDMEM[1] = Digit[7];
          disbit1 = 4;
          diswork[0] = 0x00;
          diswork[1] = WgKwhZXS;
          diswork[2] = WgKwhZ[0];
          diswork[3] = WgKwhZ[1];
          diswork[4] = WgKwhZ[2];
          dispro(&diswork[1],6,3);
          LCDMEM[6] |= D_E_Z;
          LCDMEM[7] |= D_P1;
          LCDMEM[10] = D_X + 0x80 + 0x10;
          LCDMEM[11] = D_Curr;
        } break;
        
      case 8://电压
        {
          
        } break;
      case 9://电流
        {
        } break;
      case 10://功率因数
        {
          
        } break;
      case 11://频率
        {
        } break;
      case 8://电压
        {
          
        } break;
      case 9://电流
        {
        } break;


  }
  
}


⌨️ 快捷键说明

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