📄 lcd.c
字号:
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 + -