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

📄 lcddriver.#3

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #3
📖 第 1 页 / 共 2 页
字号:
#include "LZK.h"
//////////////////////////////////////////////////////////////////////////////



void LCD_Cs(void)
{
   uint8 data ucTMP;   
   SFRPAGE = 0x00;
   EMI0CF = 0x27;         
   EMI0TC = 0xff;      

   SFRPAGE = 0x0f;
   ucTMP = ucP4DATA & 0xC0 | 16;  
   P4 = ucTMP;                    
   SFRPAGE = 0x00;
}
void LCD_Reset(void)
{
  LCD_RST=0;
  DmS(20);
  LCD_RST=1;
}
void LCD_Wcommand(uint8 t)
{
  LCD_COMMAND = t;
}
void LCD_Wdata(uint8 t)
{
  LCD_DATA = t;
}
/////////////////////////////////////////////////////////////
void LCD_ClearAll()
{
  uint16 i;
  LCD_Cs();
  LCD_Wcommand(0XB0); /*SET PAGE ADDRESS*/
  LCD_Wcommand(0X10); /*SET COLUMN ADDRESS MSB(00000000)*/
  LCD_Wcommand(0X00); /*SET COLUMN ADDRESS LSB(00000000)*/
  LCD_Wcommand(0X89); /*SET RAM ADDRESS CONTROL*/
  for(i=0;i<3840;i++)
  LCD_Wdata(0x00);

  ExInSRAM_Select(0);
}
void LCD_Initialize()
{ 


   LCD_Reset();
	DmS(20);

  /****************************
   *** 240128-052W 
	****************************/
   LCD_Cs();                 /* ExSRAM Page 16.                  */

   LCD_Wcommand(0xE2);   /* System reset*/
   DmS(1);
   LCD_Wcommand(0xEB);   /* Set lcd bias ratio: 111010_10 */
   LCD_Wcommand(0x25);   /* Set mux rate and temperature compensation*/
   LCD_Wcommand(0x81);
   LCD_Wcommand(0xA5);   /* Set gain and potentiometer 1_01_00101 */
   LCD_Wcommand(0x2F);   /* Set power control 00101_1_11 */
   LCD_Wcommand(0xAF);   /* Display Enable:    1010111_1 */

   DmS(10);
                    
   LCD_Wcommand(0x40);   /* Set start line:      01_000000     */
   LCD_Wcommand(0xA4);   /* Set all pixel on:    1010010_DC[1] */
   LCD_Wcommand(0xA6);   /* Set inverse display: 1010011_DC[0] */
   LCD_Wcommand(0x89);   /* Set ram address control: 10001_001 */
   LCD_Wcommand(0xC8);   /* Set lcd mapping control: 1100_1_0__0 */

   ExInSRAM_Select(0);       //  
}
void LCD_WByte(uint8 x,uint8 y,uint8 t)
{
  LCD_Cs();
  LCD_Wcommand(176+y);
  LCD_Wcommand(16+x/16);
  LCD_Wcommand(x%16);
  LCD_Wdata(t);

  ExInSRAM_Select(0);
}
void LCD_WPoint(uint8 x,uint8 y,bit k)
{
  LCD_Cs();
  LCD_Wcommand(176+y/8);
  LCD_Wcommand(16+x/16);
  LCD_Wcommand(x%16);
  if(k)
  LCD_Wdata(0x01<<y%8);
  else
  LCD_Wdata(0x00);

  ExInSRAM_Select(0);
}
/********************************************************************************/
void LCD_Chinese(uint8 x,uint8 y,uint8 *str,bit k,bit t)
{
  uint8 *OffSet;
  uint8 i;
  uint16 AddOffSet;

  OffSet=strstr(Index, str);
  AddOffSet=(OffSet-Index)<<4;
  if(!t)
  {
     if(!k)
     {
	     for(i=0;i<16;i++)
	     LCD_WByte(x+i,y,CAlib[AddOffSet++]);
	     for(i=0;i<16;i++)
	     LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
     }
     else
     {
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
     }
  }
  else
  {
     if(!k)
     {
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y,FAlib[AddOffSet++]);
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y+1,FAlib[AddOffSet++]);
     }
	 else
	 {
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y,~FAlib[AddOffSet++]);
     for(i=0;i<16;i++)
     LCD_WByte(x+i,y+1,~FAlib[AddOffSet++]);
     }
  }			
}

void LCD_Ascii(uint8 x,uint8 y,uint8 *str,bit k)
{
  uint8 *OffSet;
  uint8 i;
  uint16 AddOffSet;

  OffSet=strstr(Index, str);
  AddOffSet=(OffSet-Index)<<4;
  if(!k)
  {
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y,CAlib[AddOffSet++]);
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
  }
  else
  {
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
  }
}
   
void LCD_CAstr(uint8 x,uint8 y,uint8 *str,bit k,bit t)
{
  uint8 rega[2];
  uint8 regc[3];
  while( *str != 0 )
  {
    if( (uint8)*str < 0xA0 )
    {
	  strncpy(rega, str, 1);
	  rega[1]=0;
	  LCD_Ascii(x,y,rega,k);
      str=str+1;
	  x=x+8;
	}
	if( (uint8)*str >= 0xA0 )
	{
	  strncpy(regc, str, 2);
	  regc[2]=0;
	  LCD_Chinese(x,y,regc,k,t);
	  str=str+2;
	  x=x+16;
	}
  }
}

void LCD_math(uint8 x,uint8 y,char t,bit k)
{
  uint8 i;
  uint16 AddOffSet;

  AddOffSet=6048+16*t;
  if(!k)
  {
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y,CAlib[AddOffSet++]);
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y+1,CAlib[AddOffSet++]);
  }
  else
  {
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y,~CAlib[AddOffSet++]);
  for(i=0;i<8;i++)
  LCD_WByte(x+i,y+1,~CAlib[AddOffSet++]);
  }
}

void LCD_Num(uint8 x,uint8 y,uint16 t,bit k,uint8 *str)
{
   char a,b,c,d;
   
   a=(int)t/1000;
   b=(int)t/100-a*10;
   c=(int)t/10-a*100-b*10;
   d=(int)t%10;
   
   if(a!=0)
   {
   LCD_math(x,y,a,k);
   LCD_math(x+8,y,b,k);
   LCD_math(x+16,y,c,k);
   LCD_math(x+24,y,d,k);
   LCD_CAstr(x+32,y,str,0,0);
   }
   if(a==0&&b!=0)
   {
   LCD_math(x,y,b,k);
   LCD_math(x+8,y,c,k);
   LCD_math(x+16,y,d,k);
   LCD_CAstr(x+24,y,str,0,0);
   }
   if(a==0&&b==0&&c!=0)
   {
   LCD_math(x,y,c,k);
   LCD_math(x+8,y,d,k);
   LCD_CAstr(x+16,y,str,0,0);
   }
   if(a==0&&b==0&&c==0)
   {
   LCD_math(x,y,d,k);
   LCD_CAstr(x+8,y,str,0,0);
   }
}

void LCD_Sum(uint8 x,uint8 y,uint16 t,bit k,uint8 *str)
{
   uint8 a,b,c;   
   a=(int)t/100;
   b=(int)t/10-a*10;
   c=(int)t%10;

   if(t<10)
   {
   LCD_CAstr(x,y,"0.",k,0);
   LCD_math(x+16,y,c,k);
   LCD_CAstr(x+24,y,str,0,0);
   }
   else if(t>9&&t<100)
   {
   LCD_math(x,y,b,k);
   LCD_CAstr(x+8,y,".",k,0);
   LCD_math(x+16,y,c,k);
   LCD_CAstr(x+24,y,str,0,0);
   }
   else if(t>100)
   {
   LCD_math(x,y,a,k);
   LCD_math(x+8,y,b,k);
   LCD_CAstr(x+16,y,".",k,0);
   LCD_math(x+24,y,c,k);
   LCD_CAstr(x+32,y,str,0,0);
   }
}

/****************************************************************************************/
void LCD_ErrorItem(uint8 x,uint8 y,uint8 *error)
{
   char a,b;
   
   a=error[0]/10;
   b=error[0]%10;
   LCD_math(x,y,a,0);
   LCD_math(x+8,y,b,0);
   LCD_Ascii(x+16,y,"/",0);

   a=error[1]/10;
   b=error[1]%10;
   LCD_math(x+24,y,a,0);
   LCD_math(x+32,y,b,0);
   LCD_Ascii(x+40,y,"/",0);

   a=error[2]/10;
   b=error[2]%10;
   LCD_math(x+48,y,a,0);
   LCD_math(x+56,y,b,0);

   a=error[3]/10;
   b=error[3]%10;
   LCD_math(x+96,y,a,0);
   LCD_math(x+104,y,b,0);
   LCD_Ascii(x+112,y,":",0);

   a=error[4]/10;
   b=error[4]%10;
   LCD_math(x+120,y,a,0);
   LCD_math(x+128,y,b,0);
   LCD_Ascii(x+136,y,":",0);

   a=error[5]/10;
   b=error[5]%10;
   LCD_math(x+144,y,a,0);
   LCD_math(x+152,y,b,0);

   switch(error[6])
   {
   case 0:LCD_CAstr(128,y+2,"无        ",0,0);
          break;
   case 1:LCD_CAstr(128,y+2,"缺相A     ",0,0);
          break;
   case 2:LCD_CAstr(128,y+2,"缺相B     ",0,0);
          break;
   case 3:LCD_CAstr(128,y+2,"缺相C     ",0,0);
          break;
   case 4:LCD_CAstr(128,y+2,"投励失败  ",0,0);
          break;
   case 5:LCD_CAstr(128,y+2,"失控      ",0,0);
          break;
   case 6:LCD_CAstr(128,y+2,"失步      ",0,0);
          break;
   case 7:LCD_CAstr(128,y+2,"失步再整步",0,0);
          break;
   case 8:LCD_CAstr(128,y+2,"再整步失败",0,0);
          break;
   case 9:LCD_CAstr(128,y+2,"遥调失败  ",0,0);
          break;
   case 10:LCD_CAstr(128,y+2,"通信失败  ",0,0);
          break;
   case 11:LCD_CAstr(128,y+2,"PT断线    ",0,0);
          break;
   case 12:LCD_CAstr(128,y+2,"CT断线    ",0,0);
          break;
   case 13:LCD_CAstr(128,y+2,"切换失败  ",0,0);
          break;
   case 14:LCD_CAstr(128,y+2,"机柜很热  ",0,0);
          break;
   case 15:LCD_CAstr(128,y+2,"快熔熔断  ",0,0);
          break;
   default:break;
   }
}

void LCD_Day(uint8 x,uint8 y,uint8 z,uint8 i,uint8 j,uint8 k,uint8 m)
{
   uint8 a,b;
   bit sk;
   a=x/10;
   b=x%10;
   if(m==1)sk=1;
   else sk=0;
   LCD_math(88,4,a,sk);
   LCD_math(96,4,b,sk);

   a=y/10;
   b=y%10;
   if(m==2)sk=1;
   else sk=0;
   LCD_math(112,4,a,sk);
   LCD_math(120,4,b,sk);

   a=z/10;
   b=z%10;
   if(m==3)sk=1;
   else sk=0;
   LCD_math(136,4,a,sk);
   LCD_math(144,4,b,sk);

   a=i/10;
   b=i%10;
   if(m==4)sk=1;
   else sk=0;
   LCD_math(168,4,a,sk);
   LCD_math(176,4,b,sk);

   a=j/10;
   b=j%10;
   if(m==5)sk=1;
   else sk=0;
   LCD_math(192,4,a,sk);
   LCD_math(200,4,b,sk);

   a=k/10;
   b=k%10;
   if(m==6)sk=1;
   else sk=0;
   LCD_math(216,4,a,sk);
   LCD_math(224,4,b,sk);
} 


void LCD_Clock(void)
{
   uint8 a,b;

	RTC8563_Read();
   
   a=RTCData[2]/10;
   b=RTCData[2]%10;
	LCD_math(192,13,a,0);
   LCD_math(200,13,b,0);

   a=RTCData[1]/10;
   b=RTCData[1]%10;
   LCD_math(216,13,a,0);
   LCD_math(224,13,b,0);

			if(AcctimeTemp != RTCData[2])
			{
					AcctimeTemp = RTCData[2];
					AccHour++;
					if(AccHour>23)
					{
						AccDay++;
						AccHour = 0;
					}
					Dyn_to_Flash();
					Flash_128_Write(0,Flash,128,0);
			}
   
}

void LCD_Key(uint8 HK0,uint8 HK1,uint8 HK2,uint8 HK3,uint8 HK4,uint8 HK5)
{
   LCD_math(176,12,HK0,0);
   LCD_math(184,12,HK1,0);
   LCD_math(192,12,HK2,0);
   LCD_math(200,12,HK3,0);
   LCD_math(208,12,HK4,0);
   LCD_math(216,12,HK5,0);   
   switch(hunt)
   {
   case 60:break;
   case 61:LCD_math(176,12,HK0,1);
           break;
   case 62:LCD_math(184,12,HK1,1);
           break;
   case 63:LCD_math(192,12,HK2,1);
           break;
   case 64:LCD_math(200,12,HK3,1);
           break;
   case 65:LCD_math(208,12,HK4,1);
           break;
   case 66:LCD_math(216,12,HK5,1);
           break;
   default:break;
   }
}
void LCD_PassWord(uint8 key)
{
   switch(key)
   {
   case 1:if(hunt==60)
          {
             if(seek==11)
		     {
             CH2[0]=S1_Key1;
		     CH2[1]=S1_Key2;
		     CH2[2]=S1_Key3;
		     CH2[3]=S1_Key4;
		     CH2[4]=S1_Key5;
		     CH2[5]=S1_Key6;
             }
             else if(seek==12)
             {
             CH2[0]=S2_Key1;
		     CH2[1]=S2_Key2;
		     CH2[2]=S2_Key3;
		     CH2[3]=S2_Key4;
		     CH2[4]=S2_Key5;
		     CH2[5]=S2_Key6;
             }
		     hunt=61;
		     LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
		  }
		  else
		  {
		     hunt=60;
             if(seek==11)
             {
             S1_Key1=CH2[0];
		     S1_Key2=CH2[1];
		     S1_Key3=CH2[2];
		     S1_Key4=CH2[3];
		     S1_Key5=CH2[4];
		     S1_Key6=CH2[5];
		     LCD_Key(S1_Key1,S1_Key2,S1_Key3,S1_Key4,S1_Key5,S1_Key6);
             }
             if(seek==12)
             {
             S2_Key1=CH2[0];
		     S2_Key2=CH2[1];
		     S2_Key3=CH2[2];
		     S2_Key4=CH2[3];
		     S2_Key5=CH2[4];
		     S2_Key6=CH2[5];
		     LCD_Key(S2_Key1,S2_Key2,S2_Key3,S2_Key4,S2_Key5,S2_Key6);
             }
          }
		  break;
   case 2:hunt=60;
          if(seek==11)
          LCD_Key(S1_Key1,S1_Key2,S1_Key3,S1_Key4,S1_Key5,S1_Key6);
          else if(seek==12)
          LCD_Key(S2_Key1,S2_Key2,S2_Key3,S2_Key4,S2_Key5,S2_Key6);
		  break;
   case 3:CH2[hunt-61]=CH2[hunt-61]+1;
		  if(CH2[hunt-61]>9)
		  CH2[hunt-61]=0;
		  LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
		  break;
   case 4:CH2[hunt-61]=CH2[hunt-61]-1;
		  if(CH2[hunt-61]>9)
		  CH2[hunt-61]=9;
		  LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
		  break;
   case 5:hunt=hunt-1;
          if(hunt<61)
		  hunt=66;
          LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
		  break;
   case 6:hunt=hunt+1;
          if(hunt>66)
		  hunt=61;
          LCD_Key(CH2[0],CH2[1],CH2[2],CH2[3],CH2[4],CH2[5]);
          break;
   default:break;
   }
}

⌨️ 快捷键说明

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