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

📄 lcd12864.c

📁 点阵LCD显示应用,LCD12864驱动程序的演示程序
💻 C
字号:
//*************************************************************************************************
//*																								  *
//*			 ******************************LCD12864驱动程序**************************			  *
//*																								  *
//*************************************************************************************************

//*************************************************************************************************
//*																								  *
//*			 ******************************头文件及宏定义**************************				  *
//*																								  *
//*************************************************************************************************
#include <at89x51.h>

#define	RST P2_0
#define	E P2_1
#define	RW P2_2
#define	DI P2_3
#define	CS1 P2_5
#define	CS2	P2_4
#define	LCDPORT P0


#define BUSYSTATUS P0_7				  //忙状态位。
//#define DISONSTATUS P0_5			  //显示开关状态位。
//#define RSTSTATUS P0_4			  //复位状态位。


#define LCDSTARTROW 0xC0			  //设置起始行指令。
#define LCDPAGE 0xB8				  //设置页指令。
#define LCDLINE 0x40				  //设置列指令。



//*************************************************************************************************
//*																								  *
//*			 ********************************读忙标志位*********************************		  *
//*																								  *
//*************************************************************************************************
bit bCheckBusy()
{
	LCDPORT=0xFF;
	RW=1;
	DI=0;
	E=1;
	E=0;
	return BUSYSTATUS; 
}

//*************************************************************************************************
//*																								  *
//*			 ********************************控制器选择*********************************		  *
//*																								  *
//*************************************************************************************************
void vChipSelect(unsigned char ucCS1,unsigned char ucCS2)
{
	CS1=ucCS1;
	CS2=ucCS2;
}

//*************************************************************************************************
//*																								  *
//*			 ********************************写数据*********************************			  *
//*																								  *
//*************************************************************************************************
void vWriteData(unsigned char ucData)
{
	while(bCheckBusy());
	LCDPORT=0xFF;

	RW=0;
	DI=1;
	LCDPORT=ucData;
	E=1;
	E=0;
}

//*************************************************************************************************
//*																								  *
//*			 ********************************写指令*********************************			  *
//*																								  *
//*************************************************************************************************
void vWriteCMD(unsigned char ucCMD)
{
	while(bCheckBusy());
	LCDPORT=0xFF;

	RW=0;
	DI=0;
	LCDPORT=ucCMD;
	E=1;
	E=0;
}

//*************************************************************************************************
//*																								  *
//*			 ********************************指令辅助函数*********************************		  *
//*																								  *
//*************************************************************************************************

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD初始化函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vLCDInitialize()
{
	CS1=1;
	CS2=1;
	vWriteCMD(0x38);		//8位形式,两行字符。
	vWriteCMD(0x0F);		//开显示。
	vWriteCMD(0x01);		//清屏。
	vWriteCMD(0x06);		//画面不动,光标右移。
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置起始行>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vSetStartRow(unsigned char ucStartRow)
{
	vWriteCMD(LCDSTARTROW+ucStartRow);
}

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置页>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vSetPage(unsigned char ucPage)
{
	vWriteCMD(LCDPAGE+ucPage);
}

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置列>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vSetLine(unsigned char ucLine)
{
	vWriteCMD(LCDLINE+ucLine);
}


//*************************************************************************************************
//*																								  *
//*			 ********************************高级函数***********************************		  *
//*																								  *
//*************************************************************************************************

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置位置>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vSetPosition(unsigned char ucChipSelect,unsigned char ucPage,unsigned char ucLine)
{														 //取值范围:
	switch(ucChipSelect)								 //ucChipSelect:0~255;
		{												 //ucPage:0~7;
		case 1:CS1=1;CS2=0;break;						 //ucLine:0~63。
		case 2:CS1=0;CS2=1;break;
		default:CS1=1;CS2=1;
		}
	vSetPage(ucPage);
	vSetLine(ucLine);
}


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<在指定位置显示一个汉字>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vShowOneChin(unsigned char ucRow,unsigned char ucOrder,unsigned char *ucaChinMap)
{														  //取值范围:
	unsigned char ucCount;								  //ucRow:0~3;
														  //ucOrder:0~7。
	vSetPosition(ucOrder/4+1,ucRow*2,ucOrder%4*16);
	for(ucCount=0;ucCount<16;ucCount++)
		vWriteData(*(ucaChinMap+ucCount));
	
	vSetPosition(ucOrder/4+1,ucRow*2+1,ucOrder%4*16);
	for(ucCount=16;ucCount<32;ucCount++)
		vWriteData(*(ucaChinMap+ucCount));
}

⌨️ 快捷键说明

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