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

📄 lcd.c

📁 液晶选用南京国显的12864
💻 C
📖 第 1 页 / 共 2 页
字号:
	BCSCTL1 |= RSEL0+RSEL1+RSEL2;                   // 选择最高不标称频率
	DCOCTL = 0xE0;																	//DCOCLK频率最高,不利用MOD进行调整
	do
	{
		IFG1 &= ~OFIFG;						// Clear OSCFault flag
		for(i=0xFF;i>0;i--);				// Time for flag to set
	}
	while((IFG1 & OFIFG) == OFIFG);			// OSCFault flag still set?
	_NOP();		
	BCSCTL2 |= SELS+DIVS_2;                        //SMCLK  SOURCE  XT2/4=460.8KHz 
}

void LcdDelay(U32 u32Duration)
{
	U32 u32Delay;
	for (u32Delay=0; u32Delay<u32Duration; u32Delay++);
}

void LcdInstructionWrite_L (U8 u8Instruction)
{
  
        LCD_CSCTL |=LCD_CS1;                          //CS1=1	   						/* wait until LCD not busy */
   	LCD_CTL &= ~LCD_DI;				/* Instruction mode */
	LCD_CTL |=LCD_RW;				/* Write mode */
        do
        {
                LCD_DATA_DIR=0xff;
                LCD_DATA_OUT= 0xff;
                LCD_CTL |= LCD_E;			/* Strobe */	  
                LCD_DATA_DIR=0x00;
                Busy=LCD_DATA_IN;
                LCD_CTL &= ~LCD_E;                      //LCD_DATA_IN& 0x7F == LCD_BUSY
        }while(Busy&0x80==LCD_BUSY);
        
        LCD_CTL &= ~LCD_RW;				/* Write mode */
        LCD_DATA_DIR=0xff;
        LCD_DATA_OUT= u8Instruction;	                /* outbyte */
        LCD_CTL |= LCD_E;
        LcdDelay(1);
	_NOP();
        LCD_CTL &= ~LCD_E;
        LCD_CSCTL &= ~LCD_CS1;
	LCD_CSCTL &= ~ LCD_CS2;                      		
}

void LcdInstructionWrite_R (U8 u8Instruction)
{      
        LCD_CSCTL |=LCD_CS2;                          //CS1=1	   						
        LCD_CTL |=LCD_RW;				/* Write mode */
   	LCD_CTL &= ~LCD_DI;				/* Instruction mode */	
        do
        {
          LCD_DATA_DIR=0xff;
          LCD_DATA_OUT= 0xff;
          LCD_CTL |= LCD_E;				/* Strobe */	  
          LCD_DATA_DIR=0x00;
          Busy=LCD_DATA_IN;
          LCD_CTL &= ~LCD_E;
        }while(Busy&0x80==LCD_BUSY);
        LCD_CTL &= ~LCD_RW;				/* Write mode */
        LCD_DATA_DIR=0xff;
        LCD_DATA_OUT= u8Instruction;	               /* outbyte */
        LCD_CTL |= LCD_E;
        LcdDelay(1);
	_NOP();
        LCD_CTL &= ~LCD_E;
        LCD_CSCTL &= ~LCD_CS1;
	LCD_CSCTL &= ~ LCD_CS2;                      		
}

void LcdDataWrite_L (U8 u8Data)
{
	
        LCD_CSCTL |=LCD_CS1;                          //CS1=1	   						/* wait until LCD not busy */
   	LCD_CTL &= ~LCD_DI;				/* Instruction mode */
	LCD_CTL |=LCD_RW;				/* Write mode */
        do
        {
          LCD_DATA_DIR=0xff;
          LCD_DATA_OUT= 0xff;
          LCD_CTL |= LCD_E;				/* Strobe */	  
          LCD_DATA_DIR=0x00;
          Busy=LCD_DATA_IN;
          LCD_CTL &= ~LCD_E;
        }while(Busy&0x80==LCD_BUSY);
        LCD_CTL |=LCD_DI;				/* Instruction mode */
        LCD_CTL &= ~LCD_RW;				/* write mode */
        LCD_DATA_DIR=0xff;
        LCD_DATA_OUT= u8Data;			/* outbyte */
        LCD_CTL |= LCD_E;
        LcdDelay(1);
	_NOP();
        LCD_CTL &= ~LCD_E;
        LCD_CSCTL &= ~LCD_CS1;
	LCD_CSCTL &= ~ LCD_CS2;           
}

void LcdDataWrite_R (U8 u8Data)
{
	
        LCD_CSCTL |=LCD_CS2;                          //CS1=2	   						/* wait until LCD not busy */
   	LCD_CTL &= ~LCD_DI;				/* Instruction mode */
	LCD_CTL |=LCD_RW;				/* Read mode */
        do
        {
          LCD_DATA_DIR=0xff;
          LCD_DATA_OUT= 0xff;
          LCD_CTL |= LCD_E;				/* Strobe */	  
          LCD_DATA_DIR=0x00;
          Busy=LCD_DATA_IN;
          LCD_CTL &= ~LCD_E;
        }while(Busy&0x80==LCD_BUSY);
        LCD_CTL |=LCD_DI;				/* Data mode */
        LCD_CTL &= ~LCD_RW;				/* write mode */
        LCD_DATA_DIR=0xff;
        LCD_DATA_OUT= u8Data;			        /* outbyte */
        LCD_CTL |= LCD_E;
        LcdDelay(1);
	_NOP();
        LCD_CTL &= ~LCD_E;
        LCD_CSCTL &= ~LCD_CS1;
	LCD_CSCTL &= ~ LCD_CS2;           
}


void GLCD_ClearScreen (void)
{
  	U8 u8Page=0;                         //set page 
  	U8 u8Column=0;                       //set colunm
    
    	/* process the 8 pages of the LCD Left*/
  	for (u8Page = 0; u8Page < 8; u8Page++) 
    	{      		
      		LcdInstructionWrite_L(X_ADRESS | u8Page); /* Set the page number */
      		LcdInstructionWrite_L(Y_ADRESS);		/* Set column to 0 */      		
      		/* process a page on both sides */
      		for (u8Column = 0; u8Column < 64; u8Column++)   LcdDataWrite_L (0x00);		
    	}
        /* process the 8 pages of the LCD Right*/
        for (u8Page = 0; u8Page < 8; u8Page++) 
    	{      		
      		LcdInstructionWrite_R(X_ADRESS | u8Page); /* Set the page number */
      		LcdInstructionWrite_R(Y_ADRESS);		/* Set column to 0 */      		
      		/* process a page on both sides */
      		for (u8Column = 0; u8Column < 64; u8Column++)   LcdDataWrite_R (0x00);		
    	}
}



void GLCD_LcdInit(void)	
{
        //LCD_DATA_OUT= 0xff;
  
        //"片选
        LCD_CSCTL &= ~LCD_CS1;
	LCD_CSCTL &= ~ LCD_CS2;
        
        LcdDelay(1000);
        
        LcdInstructionWrite_L(DISPLAY_OFF);
        LcdInstructionWrite_R(DISPLAY_OFF);
        
       
        LcdInstructionWrite_L(START_LINE);
        LcdInstructionWrite_R(START_LINE);  
         GLCD_ClearScreen ();
        LcdInstructionWrite_L(DISPLAY_ON);
        LcdInstructionWrite_R(DISPLAY_ON); 
       
}

void GLCD_Write_Byte (U8  u8Byte)
{
   
  
   if(Column<64)
   {
     LcdInstructionWrite_L(X_ADRESS | Page);
     LcdInstructionWrite_L(Y_ADRESS | Column);
     LcdDataWrite_L (u8Byte);
   }
   else if(Column<128)
   {
     LcdInstructionWrite_R(X_ADRESS | Page);
     LcdInstructionWrite_R(Y_ADRESS | (Column-64));
     LcdDataWrite_R (u8Byte);
   }      
}

void GLCD_Write_HZ(void)
{
  U8 i,j;
 U8 ColumnBuff;
  ColumnBuff=Column;
  
  //GLCD_LcdInit();
  /*for(i=0;i<2;i++)
  {
   for(j=0;j<16;j++) 
   {
    
    //GLCD_Write_Byte (SungBold[8*i+32][j]); 
    Column++;
    //if(Column==128) Column=0;
   }
   //page++;
   
  }*/
  
  
  
  
  for(i=0;i<3;i++)
  {
   for(j=0;j<126;j++) 
   {
     GLCD_Write_Byte (Hanzi[j][i]) ;
     
     Column++;
   }
   Page++;
   Column=ColumnBuff;
  } 
  
  
}

void Wt_16_8()
{
        uchar const *p=SungBold+80;
        //"上半字
        Page=2;
        Column=0;
        for(U8 i=0;i<8;i++)
        {
                GLCD_Write_Byte(*p++);
                Column++;
        }
        //下半字
        Page=3;
        Column=0;
        for(U8 i=0;i<8;i++)
        {
                GLCD_Write_Byte(*p++);
                Column++;
        }
}

⌨️ 快捷键说明

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