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

📄 lcd12232_drive.c

📁 基于arm—LPC2103的LCD12232的驱动程序
💻 C
字号:

#include "Lpc21xx.h"
//#define	LcdVO	0x1<<2
#define	LcdA0	0x1<<6
#define	LcdE1	0x1<<3
#define	LcdE2	0x1<<4
#define	LcdRW	0x1<<5
#define	LcdRST	0x1<<2
#define	LcdBL1	0x1<<15
#define	LcdBL2	0x1<<16
#define	LcdDATA	0x0000ff<<Lcd_D0
#define	Lcd_D0	7

typedef unsigned char uchar;
void LcdIni(void);
void SetPage(int M_page,int S_page);
void SetAddress(int M_address,int S_address);
void ClrScr(void);
void OutSD(int i);
void delay(int i);
void OutMD(int i);
void OutMI(int i);
void GPIOInit(void);
void DrawBmp(const uchar *BmpPt,uchar BmpWide,uchar BmpHight,uchar xPos,uchar yPos); 

 /*----------------------------------------------------------------------------
调用方式:画位图函数,
			*BmpPt为位图指针,
			BmpWide为位图的宽度(1-122),
			BmpHight为位图的高度,以行数算(1-4),
			xPos,yPos位图左上角的坐标
函数说明:
------------------------------------------------------------------------------*/

void DrawBmp(const uchar *BmpPt,uchar BmpWide,uchar BmpHight,uchar xPos,uchar yPos)
{
	uchar line,i,j;
	if(xPos>121) return;
	yPos&=0x03;
	i=61-xPos;
	j=xPos-60;
	for(;BmpHight!=0;BmpHight--)
	{
		SetPage(yPos,yPos);
		if(xPos>60)
			{	SetAddress(j,j);	
				for(line=0;line<BmpWide && line<=60;line++)	 OutSD(*BmpPt++);
				BmpPt+=(BmpWide-line);
			}
		else 
			{	
				SetAddress(xPos,0);
				for(line=0;line<BmpWide && line<=121;line++)
				{
					if(line>=i) 	OutSD(*BmpPt++);
					else 			OutMD(*BmpPt++);
				}
				BmpPt+=(BmpWide-line);
			}	
		yPos++;	
	}
}


/*----------------------------------------------------------------------------
调用方式:void OutMI(int i)
函数说明:发指令i到主窗口。
------------------------------------------------------------------------------*/
void OutMI(int i)
{	IO0CLR=LcdA0|LcdDATA;
	IO0SET=LcdE1;
	IO0SET=(i<<Lcd_D0)&LcdDATA;
	IO0CLR=LcdE1;
}
/*------------------------------------------------------------------------------
--
调用方式:void OutMD(int i)
函数说明:发数据i到主窗口。(内函数,私有,用户不直接调用)
--------------------------------------------------------------------------------
-*/
void OutMD(int i)
{	IO0SET=LcdA0|LcdE1;
	IO0CLR=LcdDATA;
	IO0SET=(i<<Lcd_D0)&LcdDATA;
	IO0CLR=LcdE1;
}
/*------------------------------------------------------------------------------
--
调用方式:void OutSI(int i)
函数说明:发指令i到从窗口。(内函数,私有,用户不直接调用)
--------------------------------------------------------------------------------
-*/
void OutSI(int i)
{	IO0CLR=LcdA0|LcdDATA;
	IO0SET=LcdE2;
	IO0SET=(i<<Lcd_D0)&LcdDATA;
	IO0CLR=LcdE2;
}

/*------------------------------------------------------------------------------
--
调用方式:void OutSD(int i)
函数说明:发数据i到从窗口。
--------------------------------------------------------------------------------
-*/
void OutSD(int i)
{	IO0SET=LcdA0|LcdE2;
	IO0CLR=LcdDATA;
	IO0SET=(i<<Lcd_D0)&LcdDATA;
	IO0CLR=LcdE2;
}

/*------------------------------------------------------------------------------
--
调用方式:void LcdIni(void)
函数说明:12232点阵液晶初始化,开机后仅调用一次。
--------------------------------------------------------------------------------
-*/
void LcdIni(void)
{
	OutMI(0XE2);OutSI(0XE2);//复位
	OutMI(0XAE);OutSI(0XAE);//POWER SAVE
	OutMI(0XA4);OutSI(0XA4);//静态驱动
	OutMI(0XA9);OutSI(0XA9);//1/32占空比
	OutMI(0XA0);OutSI(0XA0);//时钟线输出
	OutMI(0XEE);OutSI(0XEE);//写模式
	OutMI(0X03);OutSI(0X03);
	OutMI(0XC0);OutSI(0XC0);
	OutMI(0XAF);OutSI(0XAF);
}

 /*------------------------------------------------------------------------------

调用方式:void SetPage(int page0,int page1)
函数说明:同时设置主从显示页为0-3页。
--------------------------------------------------------------------------------
-*/
void SetPage(int M_page,int S_page)
{
	OutMI(0xB8|M_page);OutSI(0xB8|S_page);
}

/*------------------------------------------------------------------------------

调用方式:void SetAddress(int address0,int address1)
函数说明:同时设置主从列地址为0-121。
-------------------------------------------------------------------------------*/
void SetAddress(int M_address,int S_address)
{
	OutMI(M_address & 0x7f);
	OutSI(S_address & 0x7f);
}

/*------------------------------------------------------------------------------

调用方式:void ClrScr(void)
函数说明:清屏
--------------------------------------------------------------------------------
-*/
void ClrScr(void)
{
	int i;
	int page;
	for (page=0;page<4;page++)
	{
		SetPage(page,page);
		SetAddress(0,0);
			for (i=0;i<61;i++)	
		{OutSD(0);OutMD(0);}
	}
} 

/*------------------------------------------------------------------------------

调用方式:void GPIOInit(void)
函数说明:设置GPIO 
-------------------------------------------------------------------------------*/
void GPIOInit(void)
{
	PINSEL0=0;			 //
	IO0DIR=0;
	IO0DIR=LcdA0|LcdE1|LcdE2|LcdDATA|LcdRST|LcdBL1|LcdBL2;
	IO0CLR=(LcdRW|LcdBL2);
	IO0SET=LcdRST|LcdBL1;
}

⌨️ 快捷键说明

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