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

📄 lcd.c

📁 MSP430单片机的液晶与键盘的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
          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_DIR=LCD_CS1+LCD_CS2;
        LCD_CTL_DIR=LCD_DI+LCD_RW+LCD_E;  
  
        //"片选
        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 ColumnBuff;
        ColumnBuff=Column; 
        
        for(U8 i=0;i<3;i++)
        {
        for(U8 j=0;j<126;j++) 
        {
                GLCD_Write_Byte (Hanzi[j][i]) ;
     
                Column++;
        }
        Page++;
        Column=ColumnBuff;
        }     
}

  
 
 void GLCD_Write_Number(void)
 {
  U8 ColumnBuff;
  ColumnBuff=Column;     
  for(U8 i=0;i<2;i++)
  {
    for(U8 a=0;a<8;a++) 
    for(U8 j=0;j<8;j++)                   
    {
      GLCD_Write_Byte(Hanzi1[a][j+8*i]) ;     
      Column++;
    } 

   Page++;
   Column=ColumnBuff;
  }     
 }
 

//液晶输出字符
void LcdPutchar (U8 u8Char)
{
        U8 ColumnBuff=Column;
        U8 PageBuff=Page;
         
        //显示一个字符
        for(U8 i=0;i<2;i++)
        {                 
                 for(U8 j=0;j<8;j++)                   
                {
                  GLCD_Write_Byte(SungBold[u8Char-32][j+8*i]) ;     
                 Column++;
                 } 

        Page++;
         Column=ColumnBuff;
        }  
        
        Page=PageBuff;                  //下一显示字符的Page
        Column+=8;                      //一显示字符Column                 
}  
//液晶输出字符串
void GLCD_Printf (U8 *au8Text) 
{
	while(*au8Text != 0)
	{
		LcdPutchar (*au8Text);
		au8Text++;
	}
}

//显示坐标定位
void GLCD_Locate (U8 u8Column, U8 u8Line)
{
	Page = u8Line;
	Column = u8Column;
}


/*-------------------------------------------------------------------------------
Convert a digital value into an ASCII string
	GLCD_DisplayValue (U32 u32Value, U8 u8NumberOfIntegerDigits, U8 u8NumberOfDecimalDigits)
		u32Value = 32 bits Value to display
		u8NumberOfIntegerDigits = Number of interger digits.
					  If this number is higher than the number of integer
					  digits, it will display the non significant '0'
		u8NumberOfDecimalDigits = Number of decimal digits			
-------------------------------------------------------------------------------*/
void GLCD_DisplayValue (U32 u32Value, U8 u8NumberOfIntegerDigits, U8 u8NumberOfDecimalDigits) 
{
	U8 u8Size=0; 			/* Size of the table */
	U8 au8ValueToDisplay[10];	/* String where is converted the value */
	S8 s8CharNumber=0;		/* Character number in the string */
	
	/* Check if the dot has to be displayed and change the Size value */	
	if (u8NumberOfDecimalDigits == 0)
		{
		u8Size = u8NumberOfIntegerDigits + u8NumberOfDecimalDigits;
		}
	else
		{
		u8Size = u8NumberOfIntegerDigits + u8NumberOfDecimalDigits + 1;
		}
	/* Last value of the table = 0 */	
	au8ValueToDisplay[u8Size] = 0;

	/* Convert the value to an ASCII string */			
	for(s8CharNumber=u8Size - 1;s8CharNumber>=0;s8CharNumber--)
	{
		if ((s8CharNumber == u8Size - 1 - u8NumberOfDecimalDigits) && u8NumberOfDecimalDigits !=0)
			{
			au8ValueToDisplay[s8CharNumber] = '.';
			}
		else
			{
			au8ValueToDisplay[s8CharNumber] = u32Value % 10 + '0';
			u32Value /= 10;
			}
	}
	
	/* Display the string */
	GLCD_Printf(au8ValueToDisplay);
}	

//显示整型数据
void GLCD_DisplayINT (U32 u32Value) 
{
	U8 u8Size=0; 			        /* Size of the table */
        U8 au8ValueToDisplay[11]={0,0,0,0,0,0,0,0,0,0,0};	/* String where is converted the value */
			        
        
        //检查整型数据的位数
        if(u32Value>=1000000000)        u8Size=10;
        else if(u32Value>=100000000)    u8Size=9;
        else if(u32Value>=10000000)     u8Size=8;
        else if(u32Value>=1000000)      u8Size=7;
        else if(u32Value>=100000)       u8Size=6;
        else if(u32Value>=10000)        u8Size=5;
        else if(u32Value>=1000)         u8Size=4;
        else if(u32Value>=100)          u8Size=3;
        else if(u32Value>=10)           u8Size=2;
        else                            u8Size=1;
	
	

	/* Convert the value to an ASCII string */			
	for(U8 i=0;i<u8Size;i++)
	{					
	        au8ValueToDisplay[u8Size-1-i] = u32Value % 10 + '0';
	        u32Value /= 10;
			
	}
	
	/* Display the string */
	GLCD_Printf(au8ValueToDisplay);
}	
//科学记数法显示整型数据
void GLCD_DisplayINTSe (U32 u32Value)
{
        U8 u8Size=0;
        U8 au8ValueToDisplay[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
        
        //检测u32Value的位数
        if(u32Value>=1000000000)        u8Size=10;
        else if(u32Value>=100000000)    u8Size=9;
        else if(u32Value>=10000000)     u8Size=8;
        else if(u32Value>=1000000)      u8Size=7;
        else if(u32Value>=100000)       u8Size=6;
        else if(u32Value>=10000)        u8Size=5;
        else if(u32Value>=1000)         u8Size=4;
        else if(u32Value>=100)          u8Size=3;
        else if(u32Value>=10)           u8Size=2;
        else                            u8Size=1;
                                        
        for(U8 i=0;i<u8Size+1;i++)
	{
		if (i==u8Size-1)          au8ValueToDisplay[1] = '.';							
		else
		{
			au8ValueToDisplay[u8Size-i] = u32Value % 10 + '0';
			u32Value /= 10;
		}
	}
        au8ValueToDisplay[u8Size+3]=u8Size-1+'0';
        au8ValueToDisplay[u8Size+2]='+';
        au8ValueToDisplay[u8Size+1]='E';
        
        
        
        /* Display the string */
	GLCD_Printf(au8ValueToDisplay);
                                                    
}









⌨️ 快捷键说明

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