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

📄 st7920.c

📁 ST7920汉字液晶驱动程序
💻 C
字号:
/*
	File:ST7920.c
	Autor:rgh111
	E-mail:rgh111@163.com  Provide 8x2 & 7.5x2 Chinese character LCD
module,operate either into serial mode or parallel mode.
	Date:2003.12.23
	Vesion:1.0
	Function:
	Write data or command into the ST7920 in serial mode.
	ST7920 serial clock max frequency 2.5Mhz.
*/


/*
	Include files.
*/
//#include <intrans.h>


/*
	I/O port.
*/
//sbit ST7920_Cs=P1.0;
//sbit ST7920_Clk=P1.1;
//sbit ST7920_Sda=P1.2;
//sbit ST7920_Rst=P1.3;


/*
	Definition.
*/
//#ifndef *
//#define * ^
//#endif


//Command Deifne.
//#define C_Clear 0x01
//#define C_ResetAddress 0x02
//#define C_ResetAddress 0x03
//#define C_Location 0x0?
//#define C_DisplayOnOff 0x0?
//#define C_PromptMove 0x0?
//#define C_FunctionSet 0x0?
//#define C_SetCgramAddress 0x0?
//#define C_SetDdramAddress 0x?
//#define C_ReadStatus 0x?
//#define C_WriteDataToRam 0x?
//#define C_ReadDataFromRam 0x?

//#define C_Idle 0x01
//#define C_ReceiveRollAddress 0x0?
//#define C_NagetiveDisplay 0x0?
//#define C_SleepWakeUp 0x0?
//#define C_ExpandFunctionSet 0x0?
//#define C_SetIramAddress 0x0?
//#define C_SetGramAddress 0x0?


/*
	void RestSt7920(void)
	Function:
*/
void ResetSt7920(void)
{
	ST7920_Rst=0;
	Delay1ms(10);
	ST7920_Rst=1;
	Delay1ms(100);
}


/*
	void WriteSt7920Instruction(unsigned char x)
	Function:
*/
void WriteSt7920Instruction(unsigned char x)
{
	unsigned char i=0;
	
	
	ST7920_Cs=1;
	
	ST7920_Sda=1;
	for(i=0;i<5;i++)
	{
		ST7920_Clk=0;
		ST7920_Clk=1;
	}	
	ST7920_Clk=0;
	
	ST7920_Sda=0;
	for(i=0;i<3;i++)
	{
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	for(i=0;i<4;i++)
	{
		x<<=1;		
		ST7920_Sda=CY;
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	ST7920_Sda=0;
	for(i=0;i<4;i++)
	{
		ST7920_Clk=1;
		ST7920_Clk=0;		
	}	
	
	for(i=0;i<4;i++)
	{
		x<<=1;		
		ST7920_Sda=CY;
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	ST7920_Sda=0;
	for(i=0;i<4;i++)
	{
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	ST7920_Cs=0;
	Delay100us();
}


/*
	void WriteSt7920Data(unsigned char x)
	Function:
*/
void WriteSt7920Data(unsigned char x)
{
	unsigned char i=0;
	
	
	ST7920_Cs=1;
	
	ST7920_Sda=1;
	for(i=0;i<5;i++)
	{
		ST7920_Clk=0;
		ST7920_Clk=1;
	}
	
	ST7920_Clk=0;	
	ST7920_Sda=0;	
	ST7920_Clk=1;
	
	ST7920_Clk=0;
	ST7920_Sda=1;	
	ST7920_Clk=1;
	
	ST7920_Clk=0;
	ST7920_Sda=0;
	ST7920_Clk=1;
	
	ST7920_Clk=0;
	for(i=0;i<4;i++)
	{
		x<<=1;		
		ST7920_Sda=CY;
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	ST7920_Sda=0;
	for(i=0;i<4;i++)
	{
		ST7920_Clk=0;
		ST7920_Clk=1;
	}
	ST7920_Clk=0;
	
	for(i=0;i<4;i++)
	{
		x<<=1;		
		ST7920_Sda=CY;
		ST7920_Clk=1;
		ST7920_Clk=0;
	}	
	
	ST7920_Sda=0;
	for(i=0;i<4;i++)
	{
		ST7920_Clk=1;
		ST7920_Clk=0;
	}

	ST7920_Cs=0;
	Delay100us();
}


/*
	void ExpandFucntionEnable(void)
	Function:
*/
void ExpandFunctionEnable(void)
{
	WriteSt7920Instruction(0x24);
}


/*
	void ExpandFunctionDisable(void)
	Function:
*/
void ExpandFunctionDisable(void)
{
	WriteSt7920Instruction(0x20);
}


/*
	void ClearScreen(void)
	Function:
*/
void ClearScreen(void)
{
	WriteSt7920Instruction(0x01);
	Delay1ms(10);
}


/*
	void CursorGoHome(void)
	Funtion:
	Cursor go home,DDRAM's address counter 'AC=0x00'.
*/
void CursorGoHome(void)
{
	WriteSt7920Instruction(0x02);
	//WriteSt7920Instruction(0x03);
}


/*
	void DisplayOn(void)
	Function:
*/
void DisplayOn(void)
{
	WriteSt7920Instruction(0x0d);
}


/*
	void DisplayOff(void)
	Function:
*/
void DisplayOff(void)
{
	WriteSt7920Instruction(0x09);
}


/*
	void IdleMode(void)
	Function:
	Expand instruction.
*/
void IdleMode(void)
{
	WriteSt7920Instruction(0x01);
}


/*
	void RollInstructionEnable(void)
	Function:
	Expand instruction.
*/
void RollInstructionEnable(void)
{
	WriteSt7920Instruction(0x03);
}


/*
	void RollInstructionDisable(void)
	Function:
	Expand instruction.
*/
void RollInstructionDisable(void)
{
	WriteSt7920Instruction(0x02);
}


/*
	void SetRollAddress(unsigned char WhichLine)
	Function:
	Expand instruction.
*/
void SetRollAddress(unsigned char WhichLine)
{
	ExpandFunctionEnable();
	RollInstructionEnable();
	WriteSt7920Instruction(WhichLine|0x40);
	ExpandFunctionDisable();
}


/*
	void NegativeDisplay(unsigned char WhichLine)
	Function:
	Expand instruction.
	WhichLine=1,2,3,4.
*/
void NegativeDisplay(unsigned char WhichLine)
{
	if(WhichLine>4) return;
	if(WhichLine==0) return;
	WriteSt7920Instruction((WhichLine-1)|0x04);
}


/*
	void Sleep(void)
	Function:
	Expand instruction.
*/
void Sleep(void)
{
	WriteSt7920Instruction(0x08);
}


/*
	void WakeUp(void)
	Function:
	Expand instruction.
*/
void WakeUp(void)
{
	WriteSt7920Instruction(0x0c);
}

⌨️ 快捷键说明

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