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

📄 st75292.c

📁 一个液晶驱动程序(型号st7529)
💻 C
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************************/
//#include "5249.h"
#include "ST7529.h"
//#include "typedefs.h"

extern unsigned char font_ASCII[],font_ASCII_8x8[],font_ASCII_16x8[],font_gb[],font_none[], font_gb_f[];//

#define LCD_CS_BASE_ADDRESS	    0x2000
#define LCD_CS_MASK		        0x00FF0021
#define LCD_CS_CTR		        0x0180	

char Line_Display_Buffer[256*16];// = 0xf0;

unsigned char *fontC();

char MBAR_CSAR1,MBAR_CSCR1,MBAR_CSMR1;

int g_nDisplayHalfFlag;

#define FONT_WIDE	16	//in pixel
#define FONT_HEIGHT	16	//in pixel
typedef struct
{
	uint8 wide;
	uint8 height;
	uint8 leftMargin;
	uint8 rightMargin;
	uint8 topMargin;
	uint8 bottonMargin;
}sCharacterInfo;

//------------------------------------------------------------------

static void ST7529_8bitsWrite(uint32 addr, uint8 data)
{
    vDisableIsrs();
	*(volatile uint8 *)addr = data;
	vEnableIsrs();
}
//------------------------------------------------------------------


void ST7529_8bitsWrite_Command(const uint8 data)
{

	ST7529_8bitsWrite(COMMAND_REG, data);
	
}

void ST7529_8bitsWrite_Data(const uint8 data)
{
	//int i;
	
	ST7529_8bitsWrite(DATA_REG, data);
	

}

//==================================================================
//-----------------------------------------------------------------
void HDT_ClearDisplay()
{
	int i,j;

	ST7529_8bitsWrite_Command( 0x30);

	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	ST7529_8bitsWrite_Data(0);		// parameter data0
	ST7529_8bitsWrite_Data(159);		// parameter data1
	
	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	ST7529_8bitsWrite_Data(31);		// parameter data0
	ST7529_8bitsWrite_Data(84);		// parameter data1

	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<162;i++)
	{
		for(j=0;j<160;j++)			//write 160 byte display data to display RAM
		{
			ST7529_8bitsWrite_Data(0x20);
		}
	}

}

//------------------------------------------------------------------
//==================================================================
//------------------------------------------------------------------
void ST7529SetDispWindow(sWindowPosInf * sWindowPos)
{
	uint16 hori,vert;

	
	hori =  sWindowPos->ColStart;
	vert =  sWindowPos->RowStart;

	ST7529_8bitsWrite_Command( 0x30);

	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	ST7529_8bitsWrite_Data(vert*16+0);		// parameter data0
	ST7529_8bitsWrite_Data(160);		// parameter data1
	
	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	ST7529_8bitsWrite_Data(32+((hori+1)/2)*5);		// parameter data0
	ST7529_8bitsWrite_Data(32+((hori+1)/2)*5+4);		// parameter data1
}

//===================================================================
void LCDFillSpecifiedBlock(sWindowPosInf * sWindowPos, const uint16 * const data_buf)
{
	int i,j,k;
	uint8 temp;
	uint16 hori,vert;
	uint16 hori_e,vert_e;
	hori =  sWindowPos->ColStart;
	vert =  sWindowPos->RowStart;
	
	hori_e = sWindowPos->ColEnd;
	vert_e = sWindowPos->RowEnd;


	ST7529_8bitsWrite_Command( 0x30);
	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	ST7529_8bitsWrite_Data(vert*16+8);	// 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(32+(hori/2)*5+4 );	// parameter data0

	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<16;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);
		}
	}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void Display_Buffer_To_LCD(uint16 row, uint16 col, uint16 num)
{
	int i,j,k;
	int m,n;
	uint8 temp;
	uint16 num1;
	
	num1 = col + num;
	
	if(num1 > 19) num1 = 20;
	
    if(num1 < 20)
    {
	ST7529_8bitsWrite_Command( 0x30);
	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	if(0 == g_nDisplayHalfFlag)
	    ST7529_8bitsWrite_Data(row*16+8);	// parameter data0
	else
	    ST7529_8bitsWrite_Data(row*16+16);	// parameter data0
	ST7529_8bitsWrite_Data(160);		// parameter data1

	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	//ST7529_8bitsWrite_Data(32+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(31+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(32+((col*8+2)/3)+((num*8+2)/3)-1 );	// parameter data1 = 159
	
	//m = ((num*8+2)/3)*3;
	m = ((num*8+2)/3)*3+3;
	
	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<16;i++)
	{
		for(j=0;j<m;j++)			//write 160 byte display data to display RAM
		{
			temp = Line_Display_Buffer[i*256+j];
			ST7529_8bitsWrite_Data(temp);
			
		}
	}
    }
	
    else if(num1 == 20)
    {
	ST7529_8bitsWrite_Command( 0x30);
	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	if(0 == g_nDisplayHalfFlag)
	    ST7529_8bitsWrite_Data(row*16+8);	// parameter data0
	else
	    ST7529_8bitsWrite_Data(row*16+16);	// parameter data0
	
	ST7529_8bitsWrite_Data(160);		// parameter data1

	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	//ST7529_8bitsWrite_Data(32+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(31+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(32+ 53 -1);	// parameter data1 = 159
	
	//m = 159 - ((col*8+2)/3)*3 ;
	m = 159 - ((col*8+2)/3)*3+3;
	
	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<16;i++)
	{
		for(j=0;j<m;j++)			//write 160 byte display data to display RAM
		{
			temp = Line_Display_Buffer[i*256+j];
			ST7529_8bitsWrite_Data(temp);
			
		}
	}
    }
}
//=============================================================
//*************************************************************
//=============================================================

void Display_Buffer_To_LCD_8x8(uint16 row, uint16 col, uint16 num)
{
	int i,j,k;
	int m,n;
	uint8 temp;
	uint16 num1;
	
	num1 = col + num;
	
	if(num1 > 19) num1 = 20;
	
    if(num1 < 20)
    {
	ST7529_8bitsWrite_Command( 0x30);
	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	ST7529_8bitsWrite_Data(row*8);	// parameter data0
	ST7529_8bitsWrite_Data(160);		// parameter data1

	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	//ST7529_8bitsWrite_Data(32+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(31+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(32+((col*8+2)/3)+((num*8+2)/3)-1 );	// parameter data1 = 159
	
	//m = ((num*8+2)/3)*3;
	m = ((num*8+2)/3)*3+3;
	
	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<8;i++)
	{
		for(j=0;j<m;j++)			//write 160 byte display data to display RAM
		{
			temp = Line_Display_Buffer[i*256+j];
			ST7529_8bitsWrite_Data(temp);
			
		}
	}
    }
	
    else if(num1 == 20)
    {
	ST7529_8bitsWrite_Command( 0x30);
	ST7529_8bitsWrite_Command( 0x75);	// LASET		行
	ST7529_8bitsWrite_Data(row*8);	// parameter data0
	ST7529_8bitsWrite_Data(160);		// parameter data1

	ST7529_8bitsWrite_Command( 0x15);	// CASET		列
	//ST7529_8bitsWrite_Data(32+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(31+((col*8+2)/3));			// parameter data0
	ST7529_8bitsWrite_Data(32+ 53 -1);	// parameter data1 = 159
	
	//m = 159 - ((col*8+2)/3)*3 ;
	m = 159 - ((col*8+2)/3)*3+3;
	
	ST7529_8bitsWrite_Command( 0x5c);	//Entry Memory Write Mode
	for(i=0;i<8;i++)
	{
		for(j=0;j<m;j++)			//write 160 byte display data to display RAM
		{
			temp = Line_Display_Buffer[i*256+j];
			ST7529_8bitsWrite_Data(temp);
			
		}
	}
    }
}

//==================================================================
//******************************************************************
//==================================================================


void FillDisplayBufferASCII( uint16 * const data_buf, const uint16 char_num)
{
	int i,j,k;
	uint8 temp;
	for(i=0;i<16;i++)
	{
		for(j=0;j<8;j++)
		{
			//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*8+j];
			Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*8+j];
		}
	}
}

void FillDisplayBufferASCII_8x8( uint16 * const data_buf,  const uint16 char_num)
{
	int i,j,k;
	uint8 temp;
	for(i=0;i<8;i++)
	{
		for(j=0;j<8;j++)
		{
			//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*8+j];
			Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*8+j];
		}
	}
}

void FillDisplayBuffer(const uint16 * const data_buf, const uint16 char_num)
{
	int i,j,k;
	uint8 temp;
	for(i=0;i<16;i++)
	{
		for(j=0;j<16;j++)			//write 160 byte display data to display RAM
		{
			//Line_Display_Buffer[i*256 + char_num*8 + j] = data_buf[i*16+j];
			Line_Display_Buffer[i*256+2 + char_num*8 + j] = data_buf[i*16+j];
		}
	}
}

//------------------------------------------------------------------

void LCDInit(unsigned char nContrastStage)
{
	int i,j;
	ST7529_8bitsWrite_Command( 0x30);	// Ext=0   Ext In
	ST7529_8bitsWrite_Command( 0xa7);	// Inverse Display

	//DISCTRL: This command must be selected before using SLPOUT.
	//DISCTRL: Do not change this command while the display is turned on.
	ST7529_8bitsWrite_Command( 0xca);	// DISCTRL:Display Control	/// ???????????????????? 2006.07.22
	ST7529_8bitsWrite_Data( 0x04);		//0xe4 parameter data0
	ST7529_8bitsWrite_Data( 0x27);		//0xe7 parameter data1	//112 display lines
	ST7529_8bitsWrite_Data( 0x1a);		//0xf0 parameter data2	/0 line cycles // ?????????????????
//==================================================================================	
	ST7529_8bitsWrite_Command( 0xbc);	// DATSDR:Data Scan Direction // ????????????
	//ST7529_8bitsWrite_Data( 0x00);		// parameter data0
	ST7529_8bitsWrite_Data( 0x02);		//0xf8  parameter data0
	ST7529_8bitsWrite_Data( 0x01);		//0xfe  parameter data1
	ST7529_8bitsWrite_Data( 0x02);		//0xfa  parameter data2

	ST7529_8bitsWrite_Command( 0xbb);	// COM Scan Direction
	ST7529_8bitsWrite_Data( 0x01);		// 0→79 159→80
//==================================================================================	
	ST7529_8bitsWrite_Command( 0xee);	//RMW end
	ST7529_8bitsWrite_Command( 0xa9);	//Partial display out
	ST7529_8bitsWrite_Command( 0xd1);	//Internal OSC on

	ST7529_8bitsWrite_Command( 0x20);	// PWRCTRL:Power Control
	ST7529_8bitsWrite_Data( 0x08);		// parameter data0
	for(i=0;i< 0x100000; i++);		// 
	//for(i=0;i< 0x1000; i++);		    //2006.11.3 by zhangjiong 
	ST7529_8bitsWrite_Command( 0x20);	// PWRCTRL:Power Control
	ST7529_8bitsWrite_Data( 0x0b);		// parameter data0

	ST7529_8bitsWrite_Command( 0x81);	// VOLCTRL:EC control ????????? 2006.07.25
	ST7529_8bitsWrite_Data(0x1f+nContrastStage);		// parameter data0 0x38~0x1f
	ST7529_8bitsWrite_Data( 0x04);		// parameter data1

	ST7529_8bitsWrite_Command( 0x94);	// Sleep Out
	ST7529_8bitsWrite_Command( 0xaf);	// Display On

	ST7529_8bitsWrite_Command( 0x30);
    
    g_nDisplayHalfFlag = 0;
}
/*
//------------------------------------------------------------------
void LCDInitialize () 
{
	int i,j;
	
	MBAR_CSAR1 = LCD_CS_BASE_ADDRESS;	//chip select address register 1
	MBAR_CSCR1 = LCD_CS_CTR;
	MBAR_CSMR1 = LCD_CS_MASK;
		
	ST7529_8bitsWrite_Command(0x30);	// Ext=0   Ext In
	ST7529_8bitsWrite_Command(0x94);	// Sleep Out
	ST7529_8bitsWrite_Command(0xd1);	//Internal OSC on
	HDT_Sleep(5);
	ST7529_8bitsWrite_Command(0x20);	// PWRCTRL:Power Control
	ST7529_8bitsWrite_Data(0x0b);		// parameter data0,TURN ON BOOSTER AND REFERENCE VOLTAGE GENERATION CIRCUIT ;0bh
	HDT_Sleep(10);
	//DISCTRL: This command must be selected before using SLPOUT.
	//DISCTRL: Do not change this command while the display is turned on.
	ST7529_8bitsWrite_Command(0xca);	// DISCTRL:Display Control	/// ???????????????????? 2006.07.22
	ST7529_8bitsWrite_Data(0x04);		//0xe4 parameter data0
	ST7529_8bitsWrite_Data(0x27);		//0xe7 parameter data1	//112 display lines
	ST7529_8bitsWrite_Data(0x00);		//0xf0 parameter data2	/0 line cycles // ?????????????????
	
	ST7529_8bitsWrite_Command(0xbb);	// COM Scan Direction
	ST7529_8bitsWrite_Data(0x01);		// 0→79 159→80
	
	ST7529_8bitsWrite_Command(0x81);	// VOLCTRL:EC control ????????? 2006.07.25
	ST7529_8bitsWrite_Data(0x1e);		// parameter data0 0x38~0x1f
	HDT_Sleep(5);
	ST7529_8bitsWrite_Data(0x04);		// parameter data1
	HDT_Sleep(5);
	
	ST7529_8bitsWrite_Command(0xa7);	// Display Normal

	ST7529_8bitsWrite_Command(0x31); // EXT=1
	
	ST7529_8bitsWrite_Command(0x32); //ANALOG CIRCUIT SET 
	ST7529_8bitsWrite_Data(0x03);		//OSC FREQUENCEY ADJUSTMENT
	ST7529_8bitsWrite_Data(0x01);		//BOOSTER EFFICIENCY SET
	ST7529_8bitsWrite_Data(0x00);		//BIAS SETTING 
	HDT_Sleep(10);
	
	ST7529_8bitsWrite_Command(0x22); //WEIGHTING
	ST7529_8bitsWrite_Data(0x03);   // WEIGHTING VALUE
	ST7529_8bitsWrite_Data(0x02);   // EDGE VALUE
	ST7529_8bitsWrite_Data(0x00);   // ENABLE FLAG

	ST7529_8bitsWrite_Command(0x34);   //DITHERER OFF
	HDT_Sleep(10);

	ST7529_8bitsWrite_Command(0x30);  // EXT=0

	ST7529_8bitsWrite_Command(0xbc); // FORTH COMMAND SET DATA SCAN DRECTION 
	ST7529_8bitsWrite_Data(0x02);  // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION 
	ST7529_8bitsWrite_Data(0x01);  // RGB ARRANGEMENT  
	ST7529_8bitsWrite_Data(0x02);  // 32 GRAY-SCALE 65K

⌨️ 快捷键说明

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