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

📄 st75292.c

📁 一个液晶驱动程序(型号st7529)
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -