📄 st75292.c
字号:
mm += 1;
}
else
{
volatile uint16 uwTemp;
uwTemp = (((unsigned short)(*pcDisplayString)) << 8) + (unsigned short)pcDisplayString[1];
characterWide = DisplayFont(row, mm, uwTemp, f_Colot,b_Colot);
pcDisplayString += 2;
col += 2;
mm += 2;
}
}
Display_Buffer_To_LCD(m, n, col-n);
return;
}
//===============================================================================
void fontFormatConvertASCII_8x8(const uint8 * souPtr, uint16 * const desPtr, const uint16 fontColor, const uint16 backColor )
{
int i = 0; //col
int j = 0; //row
int k = 0;
uint8 loop;
uint8 temp;
for(; k < 8; k++)
{
loop = 0x80;
temp = *(souPtr + k);
for(j = 0; j< 8; j++, i++)
{
if((temp & loop) == loop)
*(desPtr + i) = fontColor;
else
*(desPtr + i) = backColor;
loop = loop >> 1;
}
}
}
//===============================================================================
void LCDFillSpecifiedBlockASCII_8x8(sWindowPosInf * sWindowPos, const uint16 * const data_buf,const uint16 fontColor, const uint16 backColor)
{
int i,j,k;
uint8 temp;
uint16 hori,vert;
hori = sWindowPos->ColStart;
vert = sWindowPos->RowStart;
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(vert*8+0); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
ST7529_8bitsWrite_Data(32+hori*3); // parameter data0
ST7529_8bitsWrite_Data(32+hori*3+2); // parameter data1
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<8;i++)
{
for(j=0;j<8;j++) //write 160 byte display data to display RAM
{
temp = data_buf[i*8+j];
ST7529_8bitsWrite_Data(temp);
}
ST7529_8bitsWrite_Data(backColor);
}
}
//=====================================================================
/********************************************************************/
uint8 DisplayFontASCII_8x8(const uint16 posRow, const uint16 posCol, const uint16 fontIndex, const uint16 fontColor, const uint16 backColor)
{
static uint16 fontBuff[FONT_WIDE][FONT_HEIGHT];
uint8 *fontLibPtr;
uint16 * fontBuffPtr = fontBuff;
sCharacterInfo charInfo, *charInfoPtr;
uint16 hi, lo;
int i;
charInfoPtr = & charInfo;
hi=fontIndex>>8;
lo=fontIndex&0xff;
fontLibPtr = fontC_8x8(hi, lo);
fontFormatConvertASCII_8x8(fontLibPtr, fontBuffPtr, fontColor, backColor);
FillDisplayBufferASCII_8x8(fontBuffPtr, posCol);
return charInfoPtr->wide;
}
//----------------------------------------------------------------------
/************************************************************************
Function: display character 8x8
************************************************************************/
void vDisplayUnicodeText_8x8(uint16 row, uint16 col, char *pcDisplayString,const uint16 fontColor, const uint16 backColor)
{
register uint16
i = 0;
uint16 m,n,mm;
uint16 f_Colot = fontColor;
uint16 b_Colot = backColor;
uint8 characterWide;
mm = 0;
m = row;
n = col;
for(i=0; i<256*16;i++)
{
Line_Display_Buffer[i]=0x00;
}
while ((*pcDisplayString) != '\0')
{
characterWide = DisplayFontASCII_8x8(row, mm, (unsigned short) *pcDisplayString, f_Colot, b_Colot);
pcDisplayString++;
col += 1;
mm += 1;
}
Display_Buffer_To_LCD_8x8(m, n, col-n);
return;
}
//====================================================================
//********************************************************************
//====================================================================
void fontFormatConvertASCII_16x8(const uint8 * souPtr, uint16 * const desPtr, const uint16 fontColor, const uint16 backColor )
{
int i = 0; //col
int j = 0; //row
int k = 0;
uint8 loop;
uint8 temp;
for(; k < 16; k++)
{
loop = 0x80;
temp = *(souPtr + k);
for(j = 0; j< 8; j++, i++)
{
if((temp & loop) == loop)
*(desPtr + i) = fontColor;
else
*(desPtr + i) = backColor;
loop = loop >> 1;
}
}
}
//===============================================================================
void LCDFillSpecifiedBlockASCII_16x8(sWindowPosInf * sWindowPos, const uint16 * const data_buf,const uint16 fontColor, const uint16 backColor)
{
int i,j,k;
uint8 temp;
uint16 hori,vert;
hori = sWindowPos->ColStart;
vert = sWindowPos->RowStart;
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x75); // LASET 行
ST7529_8bitsWrite_Data(vert*8+0); // parameter data0
ST7529_8bitsWrite_Data(160); // parameter data1
ST7529_8bitsWrite_Command( 0x15); // CASET 列
ST7529_8bitsWrite_Data(32+(hori/2)*5 ); // parameter data0
//ST7529_8bitsWrite_Data(31+(hori/2)*5 ); // parameter data0
ST7529_8bitsWrite_Data(32+(hori/2)*5+4 ); // parameter data0
ST7529_8bitsWrite_Command( 0x5c); //Entry Memory Write Mode
for(i=0;i<8;i++)
{
for(j=0;j<15;j++) //write 160 byte display data to display RAM
{
temp = data_buf[i*16+j];
ST7529_8bitsWrite_Data(temp);
}
}
}
//=====================================================================
/********************************************************************/
uint8 DisplayFontASCII_16x8(const uint16 posRow, const uint16 posCol, const uint16 fontIndex, const uint16 fontColor, const uint16 backColor)
{
static uint16 fontBuff[FONT_WIDE][FONT_HEIGHT];
uint8 *fontLibPtr;
uint16 * fontBuffPtr = fontBuff;
sCharacterInfo charInfo, *charInfoPtr;
uint16 hi, lo;
sWindowPosInf sWinPos;
uint16 f_Colot = fontColor;
uint16 b_Colot = backColor;
int i;
charInfoPtr = & charInfo;
hi=fontIndex>>8;
lo=fontIndex&0xff;
fontLibPtr = font_ASCII_16x8+((lo-1)<<4);
fontFormatConvertASCII_16x8(fontLibPtr, fontBuffPtr, fontColor, backColor);
sWinPos.RowStart = posRow;
sWinPos.ColStart = posCol;
sWinPos.RowEnd= posRow + FONT_HEIGHT-1;
sWinPos.ColEnd= posCol + FONT_WIDE-1;
LCDFillSpecifiedBlockASCII_16x8(&sWinPos, fontBuffPtr,f_Colot, b_Colot);
return charInfoPtr->wide;
}
//----------------------------------------------------------------------
/************************************************************************
Function: display character 16x8
************************************************************************/
void vDisplayUnicodeText_16x8(uint16 row, uint16 col, char *pcDisplayString,const uint16 fontColor, const uint16 backColor)
{
register uint16 i = 0;
uint16 f_Colot = fontColor;
uint16 b_Colot = backColor;
uint8 characterWide;
while ((*pcDisplayString) != '\0')
{
characterWide = DisplayFontASCII_16x8(row, col, (unsigned short) *pcDisplayString, f_Colot, b_Colot);
pcDisplayString++;
col += 2;
}
return;
}
////////////////////////////////////////local define output function
/*
功能:设置液晶对比度
参数:液晶对比度 0~31 共32级对比度
返回:无
*/
void HDT_SetLCDContrast(unsigned char nStage)
{
ST7529_8bitsWrite_Command( 0x30);
ST7529_8bitsWrite_Command( 0x81); // VOLCTRL:EC control ????????? 2006.07.25
if(63 < nStage)nStage = 31;
ST7529_8bitsWrite_Data(nStage); // parameter data0 0x3f~0x1f
ST7529_8bitsWrite_Data( 0x04); // parameter data1
ST7529_8bitsWrite_Command( 0x30);
}
//------------------------------------------------------------------
//0 减少 1 增加
void LCD_BiasSet(int nFlag)
{
MBAR_CSAR1 = LCD_CS_BASE_ADDRESS; //chip select address register 1
MBAR_CSCR1 = LCD_CS_CTR;
MBAR_CSMR1 = LCD_CS_MASK;
if(0 == nFlag)
ST7529_8bitsWrite_Command(0xd7); // VOLCTRL:EC control ????????? 2006.07.25
else
ST7529_8bitsWrite_Command(0xd6); // VOLCTRL:EC control ????????? 2006.07.25
}
/*
功能:设置液晶开关
参数:无
返回:无
*/
void HDT_DisplayOn()
{
ST7529_8bitsWrite_Command(0xaf);
//ST7529_8bitsWrite_Command(0x94);
}
/*
功能:设置液晶开关
参数:无
返回:无
*/
void HDT_DisplayOff()
{
ST7529_8bitsWrite_Command(0xae);
//ST7529_8bitsWrite_Command(0x95);
}
/*
功能:清除一行按照 8x8的标准
参数:nLine 0~19共20行
返回:无
*/
void HDT_ClearLine8x8(int nLine)
{
vDisplayUnicodeText_8x8(nLine,0," ",0xf0,0x20);
}
/*
功能:清除一行按照 16x16的标准
参数:nLine 0~8共9行
返回:无
*/
void HDT_ClearLine16x16(int nLine)
{
vDisplayUnicodeText_8x8(2*nLine+1,0," ",0xf0,0x20);
vDisplayUnicodeText_8x8(2*nLine+2,0," ",0xf0,0x20);
}
/*
功能:显示汉字16x16和西文16x8
参数:nRow 0~8共9行,nCol 0~19 需要计算位置,pszDisplay 显示缓冲 nMode NORMAL 正常 WHITE 反白显示
返回:无
*/
void HDT_DisplayText16x16(int nRow,int nCol,char* pszDisplay,int nMode)
{
//HDT_ClearLine16x16(nRow);
g_nDisplayHalfFlag = 0;
if(NORMAL == nMode)
vDisplayUnicodeText(nRow,nCol,pszDisplay,0xf0,0x20);
else
vDisplayUnicodeText(nRow,nCol,pszDisplay,0x20,0xf0);
}
/*
功能:清除一行按照 16x16的标准
参数:nLine 0~8共9行
返回:无
备注:起始行从第一个行开始算起
*/
void HDT_ClearLine16x16EX(int nLine)
{
vDisplayUnicodeText_8x8(2*nLine+2,0," ",0xf0,0x20);
vDisplayUnicodeText_8x8(2*nLine+3,0," ",0xf0,0x20);
}
/*
功能:显示汉字16x16和西文16x8
参数:nRow 0~8共9行,nCol 0~19 需要计算位置,pszDisplay 显示缓冲 nMode NORMAL 正常 WHITE 反白显示
返回:无
备注:起始行从第一个行开始算起
*/
void HDT_DisplayText16x16EX(int nRow,int nCol,char* pszDisplay,int nMode)
{
//HDT_ClearLine16x16(nRow);
g_nDisplayHalfFlag = 1;
if(NORMAL == nMode)
vDisplayUnicodeText(nRow,nCol,pszDisplay,0xf0,0x20);
else
vDisplayUnicodeText(nRow,nCol,pszDisplay,0x20,0xf0);
}
////////////////////////////////////////local define output function
/*
功能:显示特殊字符16x8
参数:nRow 0~8共9行,nCol 0~19 需要计算位置,pszDisplay 显示缓冲 nMode NORMAL 正常 WHITE 反白显示
返回:无
备注:此函数目前主要显示电池容量
*/
void HDT_DisplayText16x8(int nRow,int nCol,char* pszDisplay,int nMode)
{
if(NORMAL == nMode)
vDisplayUnicodeText_16x8(nRow,nCol,pszDisplay,0xf0,0x20);
else
vDisplayUnicodeText_16x8(nRow,nCol,pszDisplay,0x20,0xf0);
}
/*
功能:显示西文8x8
参数:nRow 0~19共20行,nCol 0~19 需要计算位置,pszDisplay 显示缓冲 nMode NORMAL 正常 WHITE 反白显示
返回:无
*/
void HDT_DisplayText8x8(int nRow,int nCol,char* pszDisplay,int nMode)
{
//HDT_ClearLine8x8(nRow);
if(NORMAL == nMode)
vDisplayUnicodeText_8x8(nRow,nCol,pszDisplay,0xf0,0x20);
else
vDisplayUnicodeText_8x8(nRow,nCol,pszDisplay,0x20,0xf0);
}
/* End of file */
void main()
{
HDT_Initialize ();
HDT_InterruptOn();
HDT_ClearDisplay();
LCDInit(0xf8);
LCDInitialize();
HDT_DisplayOn();
while(1)
{
HDT_DisplayPoint(0x00);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -