📄 lcd12232_drive.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 + -