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

📄 st7920driver.c

📁 st7920,串口,lcd st7920,串口,lcd
💻 C
📖 第 1 页 / 共 3 页
字号:
//***********************************************************************
//						液晶控制芯片ST7920驱动源文件
//作者:RYUDO
//时间:2007.3.10
//说明:
//		1.配合头文件使用;
//		2.不明之处请查阅资料.
//硬件举例说明: 
//
//				RS(CS)    -----------------------------  P3^2
//				R/W(STD)  -----------------------------  P3^1
//				E(SCLK)   -----------------------------  P3^0
//				PSB       -----------------------------  P0^1
//				RST       -----------------------------  P0^0
//				DB0       -----------------------------  P1^0
//				DB1       -----------------------------  P1^1
//				DB2       -----------------------------  P1^2
//				DB3       -----------------------------  P1^3
//				DB4       -----------------------------  P1^4
//				DB5       -----------------------------  P1^5
//				DB6       -----------------------------  P1^6
//				DB7(BUSY) -----------------------------  P1^7
//
//				具体配置请根据硬件进行更改
//***********************************************************************
#include<reg51.h>
#include<string.h>
#include"ST7920DRIVER.h"

uchar code table[]=			//测试用字符
{
"杨"
};

uchar code table1[]=		//测试用字符
{
/*--  文字:  他  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x40,0x18,0x40,0x12,0x40,0x12,0x44,0x22,0x5E,0x72,0xE4,0xAF,0x44,0x22,0x44,
0x22,0x44,0x22,0x54,0x22,0x48,0x22,0x42,0x22,0x42,0x22,0x02,0x23,0xFE,0x00,0x00,
};

uchar code table2[]=		//测试用字符
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFB, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x3F, 0x9C, 0x1F, 0xFF, 0xEF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xBC, 0x33, 0xDF, 0xFF, 0xEF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xF9, 0xF7, 0xFF, 0xFD, 0xF5, 0xDF, 0xFF, 0x80, 0x3C, 0x1F, 0xF9, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFC, 0x7B, 0xF7, 0xFF, 0xFD, 0xFD, 0xCF, 0xFC, 0x6F, 0xA1, 0xDF, 0xFC, 0x7F, 0xFF, 0xFF, 
0xFF, 0xE1, 0x7B, 0xF7, 0xFF, 0xFD, 0xFD, 0xEF, 0xF9, 0xEF, 0xB7, 0xDF, 0xFE, 0x7F, 0xFF, 0xFF, 
0xFF, 0xC7, 0x73, 0xB7, 0xFC, 0x3D, 0xFD, 0xDF, 0xFF, 0xEF, 0xB7, 0xDF, 0xFE, 0x3F, 0xFF, 0xFF, 
0xFF, 0xF2, 0x77, 0xB7, 0xFF, 0x3D, 0xFD, 0x5F, 0xFF, 0xDF, 0xB7, 0xDF, 0xFC, 0x9F, 0xFF, 0xFF, 
0xFF, 0xF8, 0xFF, 0xBF, 0xFF, 0x7D, 0x7D, 0x1F, 0xFF, 0xDF, 0xB3, 0xDF, 0xFD, 0xC7, 0xFF, 0xFF, 
0xFF, 0xFC, 0x7F, 0x3F, 0xFF, 0x1C, 0x7D, 0xFF, 0xFF, 0x9F, 0x3B, 0xDF, 0xF3, 0xF3, 0xFF, 0xFF, 
0xFF, 0xF1, 0x3F, 0x7F, 0xFF, 0xDC, 0xFD, 0xFF, 0xFF, 0xBF, 0x7B, 0xDF, 0xCF, 0xFC, 0xFF, 0xFF, 
0xFF, 0xE7, 0xDE, 0x3F, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xBE, 0x7B, 0xDF, 0x3F, 0xFE, 0x7F, 0xFF, 
0xFF, 0xFF, 0xFE, 0xDF, 0xFF, 0xBF, 0xFD, 0xFF, 0xFF, 0x7E, 0xFA, 0x1F, 0xFF, 0xFF, 0x9F, 0xFF, 
0xFF, 0xFF, 0xFD, 0xC7, 0xFF, 0xBF, 0xFC, 0xFF, 0xFE, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 
0xFF, 0xFF, 0xF1, 0xF1, 0xFF, 0x3F, 0xFE, 0xFF, 0xFD, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 
0xFF, 0xFF, 0xC7, 0xFC, 0x3E, 0x00, 0x0E, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xDF, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0xDF, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFE, 0xDF, 0xFF, 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0x5F, 0xFF, 0x7C, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF7, 0xDF, 0xFF, 0x7F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFB, 0xDF, 0xFF, 0x77, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0xDF, 0xFF, 0x87, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFE, 0xDF, 0xFC, 0x3F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xDF, 0xF9, 0xBD, 0x9F, 0x47, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x70, 0x00, 0x7F, 0xBD, 0xBF, 0x73, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE5, 0x3F, 0xDF, 0xFF, 0xBB, 0xBF, 0x7B, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0x9F, 0xDF, 0xFF, 0xBB, 0xBF, 0x7B, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xDF, 0xDF, 0xFF, 0xB3, 0xBF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xCF, 0xCF, 0xFF, 0xB7, 0xBF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0xFF, 0xCF, 0xFF, 0xBF, 0xBF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0xFF, 0xDF, 0xFF, 0xBF, 0xBF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xBF, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xB0, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xB3, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
};

//*******************************************
//函数名称:void Serial_Write_LCD( bit b_Data_Command , unsigned char uc_Content)   
//函数功能:以串行模式向LCD发送 数据 或 指令
//形式参数:bit b_Data_Command , unsigned char uc_Content
//行参说明:数据或命令的标志位,数据或指令的内容
//返回参数:无
//使用说明:无
//*******************************************
void Serial_Write_LCD( bit b_Data_Command , unsigned char uc_Content)   
{
	uchar uc_i,uc_j;
    CS  = 1;
	SCLK= 0;
	STD = 1;
	for( uc_i=5 ; uc_i ; --uc_i)
	 {
		SCLK = 1;							
		SCLK = 0;								
	 }
	STD  = 0;					//RW = 0;
	SCLK = 1;
	SCLK = 0;
	if( b_Data_Command )	
		STD = 1;				//RS = 1,写数据 									
	else
		STD = 0;				//RS = 0,写指令													
	SCLK = 1;
	SCLK = 0;
	STD  = 0;
	SCLK = 1;
	SCLK = 0;															
	for( uc_i=0 ; uc_i<2 ; uc_i++ )
	 {
		for( uc_j=0 ; uc_j<4 ; uc_j++ )
		 {
			uc_Content<<=1;
			STD = CY;			//这句很精彩,不过减弱了程序的移植性		
			SCLK= 1;
			SCLK= 0;
		 }	
		STD = 0;
		for( uc_j=0 ; uc_j<4 ; uc_j++ )
		 {		
			SCLK= 1;
			SCLK= 0;
		 }		
	 }
}

//*******************************************
//函数名称:void Serial_Clear_Ram(void)								
//函数功能:串行清屏函数
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:DDRAM填满20H,并设定DDRAM AC到00H
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	0	0	0	0	0	1
//*******************************************
void Serial_Clear_Ram(void)								
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,CLEAR_SCREEN);				//清屏
}

//*******************************************
//函数名称:void Serial_DDRAM_Address_Reset(void)
//函数功能:DDRAM地址回到00H
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:设定DDRAM AC到00H,并将游标移动到开头原点位置,这个指令不改变DDRAM内容
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	0	0	0	0	1	X
//*******************************************
void Serial_DDRAM_Address_Reset(void)
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,ADDRESS_RESET);			//DDRAM地址归位								
}

//*******************************************
//函数名称:void Serial_EnterPoint_Set(uchar ucEnPoSet)
//函数功能:设定在资料的读取与写入时,游标移动方式及指定显示的移位
//形式参数:uchar ucEnPoSet
//行参说明:具体的控制指令
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	0	0	0	1	I/D	S
//		I/D:0,游标左移,DDRAM AC减1
//		I/D:1,游标右移,DDRAM AC加1
//		S---显示画面整体位移
//		S:0,或者DDRAM为读状态,整体显示不位移	
//		S:1,且DDRAM为写状态,I/D=0,整体显示右移	
//		S:1,且DDRAM为写状态,I/D=1,整体显示左移		
//返回参数:无
//使用说明:无
//*******************************************
void Serial_EnterPoint_Set(uchar ucEnPoSet)
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,ucEnPoSet);				//设定在资料的读取与写入时,游标移动方式及指定显示的移位	
}

//*******************************************
//函数名称:void Serial_DisplayState_Set(uchar ucDisStaSet)
//函数功能:显示状态设定
//形式参数:uchar ucDisStaSet
//行参说明:具体的控制指令
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	0	0	1	D	C	B
//		D:0,整体显示OFF,但这个指令不改变DDRAM内容
//		D:1,整体显示ON
//		C:0,游标显示OFF
//		C:1,游标显示ON
//		B:0,游标位置反白显示OFF
//		B:1,游标位置反白显示ON,将游标位置的资料反白显示
//返回参数:无
//使用说明:无
//*******************************************
void Serial_DisplayState_Set(uchar ucDisStaSet)
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,ucDisStaSet);				//设定显示状态
}

//*******************************************
//函数名称:void Serial_Cursor_Display_Transpose_Control_Set(uchar ucCurDisTraConSet)
//函数功能:设定游标的移动与显示的移位
//形式参数:uchar ucCurDisTraConSet
//行参说明:具体的控制指令
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	0	1	S/C	R/L	 X	 X
//		S/C,R/L:00,游标向左移动,AC减1
//		S/C,R/L:01,游标向右移动,AC加1
//		S/C,R/L:10,显示向左移动,游标跟着,但AC不变
//		S/C,R/L:11,显示向右移动,游标跟着,但AC不变
//返回参数:无
//使用说明:这个指令不改变DDRAM内容
//*******************************************
void Serial_Cursor_Display_Transpose_Control_Set(uchar ucCurDisTraConSet)
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,ucCurDisTraConSet);		//设定游标的移动与显示的移位
}

//*******************************************
//函数名称:void Serial_Function_Set(uchar ucFunSet)
//函数功能:显示功能设定
//形式参数:uchar ucFunSet
//行参说明:具体的指令
//格式说明:
//		RS	RW	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
//		0	0	0	0	1	DL	X	RE	 X	 X
//		DL:0,4bitMPU控制界面
//		DL:1,8bitMPU控制界面
//		RE:0,基本指令集
//		RE:1,扩充指令集
//返回参数:无
//使用说明:同一指令不可同时更改DL和RE,需要先改变DL,再改变RE,才可保证正确标志
//*******************************************
void Serial_Function_Set(uchar ucFunSet)
{
	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Serial_Write_LCD(COMMAND,ucFunSet);					//显示功能设定
}

//*******************************************
//函数名称:void Serial_CGRAM_Address_Set(uchar ucCGramAdd)
//函数功能:设定CGRAM(自定义字库区)地址到地址计数器AC
//形式参数:uchar ucCGramAdd
//行参说明:具体地址
//格式说明:

⌨️ 快捷键说明

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