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

📄 lcm12864.c

📁 包括ARM开发环境的使用和一些调试用的源程序
💻 C
字号:
	#include	<reg52.h>

	#define	uchar	unsigned char
	#define	uint		unsigned int

     sbit		RSPIN	=	P2^3;
	sbit		RWPIN	=	P2^4;
	sbit		EPIN	=	P2^5;
	sbit		CS1PIN	=	P2^1;
	sbit		CS2PIN	=	P2^0;
	sbit		LCMBUSY	=	P0^7;
	sfr		LCMDATA	=	0x80;		//P2


	void		LCMREST(void);

	void		WAITIDLE(bit ChipChoice);
	void		LCMWRITECONTROLWORDS(uchar ControlWords,	bit ChipChoice);
	void		LCMWRITEDISPDATA(uchar DispData,	bit  ChipChoice);

	void	MuchPageDisp(uchar *DataPoint,	uchar StartPage, uchar StartRow,uchar DispLenth,uchar Pagesum);		//多页显示函数

	    	uchar	Temp0,Temp1,Temp2,Temp3,Temp4,Temp5;
			uchar	XPosition,YPosition;		//XPosition: 列方向地址指针  YPosition: 行方向地址指针

	void		LCM12864(uchar	LcmDispData,	uchar LcmFirstPage,	uchar CharacterStartRow,		uchar CharacterRowSum,	bit IfNotRest)
	{
		bit	CsChoice;
		if(IfNotRest)
		{
			LCMREST();
		}


			Temp0=0xc0; //(LcmFirstPage*8)|0xc0;				//写起始点控制字
			LCMWRITECONTROLWORDS(Temp0,0);			//写片1
			LCMWRITECONTROLWORDS(Temp0,1);			//写片2

			for(Temp1=0;Temp1<CharacterRowSum;Temp1++)
			{

				if(CharacterStartRow<64)	CsChoice=0;
				else					CsChoice=1;
				Temp0=CharacterStartRow&0x3f|0x40;			//写列码 定位
				LCMWRITECONTROLWORDS(Temp0,CsChoice);
				Temp0=LcmFirstPage&0x07|0xb8;			//写页码 定位
				LCMWRITECONTROLWORDS(Temp0,CsChoice);
				LCMWRITEDISPDATA(LcmDispData,	CsChoice);	//写数据
				CharacterStartRow++;
			}

	}

	void		LCMREST(void)
	{
		Temp0=0x3f;						//写开LCM控制字
		LCMWRITECONTROLWORDS(Temp0,0);	   //写片1
		LCMWRITECONTROLWORDS(Temp0,1);		//写片2
	}

	void		LCMWRITECONTROLWORDS(uchar ControlWords,	bit ChipChoice)		//写LCM控制字
	{
		ET0=0;
		WAITIDLE(ChipChoice);			
		LCMDATA=ControlWords;					//RS=0 RW=0 CS1=1 E=高脉冲
		RSPIN=0;
		RWPIN=0;
		if(ChipChoice) CS2PIN=1;
		else			CS1PIN=1;
		EPIN=1;
		EPIN=1;
		CS1PIN=0;
		CS2PIN=0;
		EPIN=0;
    ET0=1;
	}

	void		LCMWRITEDISPDATA(uchar DispData,	bit  ChipChoice)				//写LCM显示数据
	{
		ET0=0;
		WAITIDLE(ChipChoice);
		
		LCMDATA=DispData;
		RSPIN=1;
		RWPIN=0;
		if(ChipChoice) CS2PIN=1;
		else			CS1PIN=1;
		EPIN=1;
		EPIN=1;
		CS1PIN=0;
		CS2PIN=0;
		EPIN=0;
        ET0=1;
	}

	void		WAITIDLE(bit ChipChoice)				//空闲检测
	{
		LCMDATA=0xff;
	    RSPIN=0;           						//RS=0 RW=1 CS1/CS2=1 E=高电平
		RWPIN=1;
		if(ChipChoice)	CS2PIN=1;
		else			CS1PIN=1;
		EPIN=1;
		EPIN=1;								//=nop;
		while(LCMBUSY);
		CS1PIN=0;
		CS2PIN=0;
		EPIN=0;
	}


	void	MuchPageDisp(uchar *DataPoint,	uchar StartPage, uchar StartRow,uchar DispLenth,uchar Pagesum)		//汉字显示函数
	{	
		uchar TTemp1,TTemp2,TTemp3;
		char i;
		for(i=Pagesum-1;i>=0;i--)
		{
			TTemp3=StartPage+i;
			TTemp2=StartRow;
			for(TTemp1=0;TTemp1<DispLenth;TTemp1+=1)
			{	
				LCM12864(*(DataPoint+DispLenth*i+TTemp1),TTemp3,TTemp2,1,0);  
				TTemp2++;
			}
   		}
	/*	TTemp3=StartPage+1;
		TTemp2=StartRow;
		for(TTemp1=1;TTemp1<DispLenth;TTemp1+=1)
		{	
			LCM12864(*(DataPoint+DispLenth+TTemp1),TTemp3,TTemp2,1,0);
			TTemp2++;
		}*/
	}	
	
			

⌨️ 快捷键说明

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