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

📄 lcd1.c

📁 LPC2134的bootloader , 请用ADS查看地址设定。
💻 C
字号:
typedef unsigned char uchar;
typedef unsigned int uint;

#include "PIN.h"
#include "config.h"

extern delay(unsigned int cDelay);

/*————————————————————
〖说明〗12232点阵信利液晶基本驱动程序,国内很多122×32的液晶与之完全兼容,
该液晶左右分MASTER和SLAVE,上下共分4页,左边列地址从0-61,
右边列地址从0-61,由于芯片内部线路的落后,所以使用较麻烦。 
〖文件〗12232lcd.c ﹫2001/03/23
〖作者〗龙啸九天 c51@yeah.net http://mcs51.yeah.net
〖修改〗修改建议请到论坛公布 http://c51bbs.yeah.net
〖版本〗V1.00A Build 0323
—————————————————————*/

//#define DATA LCD_RW 
void OutCMD(uchar i)
{
	uint32   dat;
	dat    = (uint32)(i);
	
	IO0CLR = LCD_E1 | LCD_E2; 
	IO0CLR = LCD_A0 | LCD_RW;
	IO1SET = (dat << 16) & 0xff0000;
	IO1CLR = (~(dat << 16)) & 0xff0000;
	IO1SET = (dat << 16) & 0xff0000;
	IO0SET = LCD_E1 | LCD_E2;
	delay(2);
	IO0CLR = LCD_E1 | LCD_E2; 
	delay(2);
	IO1SET = 0xff0000;
	IO0SET = LCD_E1 | LCD_E2;
}
/*----------------------------------------------------------------------------
调用方式:void OutMI(uchar i)
函数说明:发指令i到主窗口。(内函数,私有,用户不直接调用)
------------------------------------------------------------------------------*/
void OutMI(uchar i)
{
	uint32   dat;
	dat    = (uint32)(i);
  	IO0SET = LCD_E1 | LCD_E2;
	IO0SET = LCD_A0;
	IO0CLR = LCD_RW;
	dat    = (uint32)(i);      //SEND DATA
	IO1SET = (dat << 16) & 0xff0000;
	IO1CLR = (~(dat << 16)) & 0xff0000;
	IO1SET = (dat << 16) & 0xff0000;
	IO0SET = LCD_E2;
	delay(2);
	IO0CLR = LCD_E2;
	delay(2);
}
/*--------------------------------------------------------------------------------
调用方式:void OutMD(uchar i)
函数说明:发数据i到主窗口。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void OutMD(uchar i)
{
	uint32   dat;
	dat    = (uint32)(i);
	
	IO1SET = (dat << 16) & 0xff0000;
	IO1CLR = (~(dat << 16)) & 0xff0000;
	IO1SET = (dat << 16) & 0xff0000;
	IO0SET = LCD_E1;
	delay(2);
	IO0CLR = LCD_E1;
	delay(2);
}
/*--------------------------------------------------------------------------------
调用方式:void OutSI(uchar i)
函数说明:发指令i到从窗口。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void OutSI(uchar i)
{
	uint32   dat;
	dat    = (uint32)(i);
  	IO0SET = LCD_E1 | LCD_E2;
	IO0SET = LCD_A0;
	IO0CLR = LCD_RW;
	dat    = (uint32)(i);      //SEND DATA
	IO1SET = (dat << 16) & 0xff0000;
	IO1CLR = (~(dat << 16)) & 0xff0000;
	IO1SET = (dat << 16) & 0xff0000;
	IO0SET = LCD_E2;
	delay(2);
	IO0CLR = LCD_E2;
	delay(2);
}
/*--------------------------------------------------------------------------------
调用方式:void OutSD(uchar i)
函数说明:发数据i到从窗口。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void OutSD(uchar i)
{
	uint32   dat;
	dat    = (uint32)(i);
	
	IO1SET = (dat << 16) & 0xff0000;
	IO1CLR = (~(dat << 16)) & 0xff0000;
	IO1SET = (dat << 16) & 0xff0000;
	IO0SET = LCD_E2;
	delay(2);
	IO0CLR = LCD_E2;
	delay(2);
}
/*--------------------------------------------------------------------------------
调用方式:void LcdIni(void)
函数说明:12232点阵液晶初始化,开机后仅调用一次。
---------------------------------------------------------------------------------*/
void LcdIni(void)
{ 
 	unsigned char  x,y;
	IO0CLR = LCD_E1 | LCD_E2;
	IO0CLR = LCD_A0 | LCD_RW;
	OutCMD(0xae);		//关闭显示
	OutCMD(0xc0);		//开始显示的行数是第一行
	OutCMD(0xa4);		//动态驱动
	OutCMD(0x00);		//开始显示的列数是第一列
	OutCMD(0xbb);		//设定显示的页为第3页
	OutCMD(0xa9);		//设置刷新频率为1/32
	OutCMD(0xa0);		//正向读取显示的RAM
	OutCMD(0xee);		//结束

	for (y=0;y<4;y++)
	{
		for(x = 0; x<61; x++)
		{
			OutMI(0xb8|y);
			OutMI(0x00|x);
			OutMD(0);
		}
		for(x = 61; x<122; x++)
		{
			OutSI(0xb8|y);
			OutSI(0x00|(x-61));
			OutSD(0);
		}
/*		for (x=0;x<122;x++)
		{
			
			LCDPutByte(x,y,0);
		}
*/
	}
	OutCMD(0xaf);		//允许显示
}
/*--------------------------------------------------------------------------------
调用方式:void SetPage(uchar page0,uchar page1)
函数说明:同时设置主从显示页为0-3页。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void SetPage(uchar page0,uchar page1)
{
  OutMI(0xB8|page1);OutSI(0xB8|page0);
}
/*--------------------------------------------------------------------------------
调用方式:void SetAddress(uchar address0,uchar address1)
函数说明:同时设置主从列地址为0-121。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void SetAddress(uchar address0,uchar address1)
{
  OutMI(address1&0x7F);OutSI(address0&0x7F);
}
/*--------------------------------------------------------------------------------
调用方式:void PutChar0(uchar ch)
函数说明:在左页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void PutChar0(uchar ch)
{
  OutSD(ch);
}
/*--------------------------------------------------------------------------------
调用方式:void PutChar1(uchar ch)
函数说明:在右页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
---------------------------------------------------------------------------------*/
void PutChar1(uchar ch)
{
  OutMD(ch);
}
/*--------------------------------------------------------------------------------
调用方式:void DrawBmp(uchar x,bit layer,uchar width,uchar *bmp)
函数说明:画一个图,横坐标是x,layer表示上下层,width是图形的宽,高都是16,bmp是
图形指针
使用zimo21软件,采用纵向取模得到bmp数据。
---------------------------------------------------------------------------------*/
void DrawBmp(uchar x0,uchar layer,uchar width,uchar *bmp)
{
  uchar x,address,i=0; //address表示显存的物理地址
  uchar page=0;
  uchar window=0; //page表示上下两页,window表示左右两页
  if (layer) page=2;
  for (x=x0;x<x0+width;x++)
  {
    if (x>60) {window=1;address=x%61;}
    else address=x;
    SetPage(page,page);
    SetAddress(address,address);
    if (window) PutChar1(bmp[i]);
    else PutChar0(bmp[i]);//画上层
    SetPage(page+1,page+1);
    SetAddress(address,address);
    if (window) PutChar1(bmp[i+width]);
    else PutChar0(bmp[i+width]);//画下层
    i++;
  }
}
/*--------------------------------------------------------------------------------
调用方式:void clrscr(void)
函数说明:清屏
---------------------------------------------------------------------------------*/
void clrscr(void)
{
	unsigned char  x,y;
	for (y=0;y<4;y++)
	{
		for(x = 0; x<61; x++)
		{
			OutMI(0xb8|y);
			OutMI(0x00|x);
			OutMD(0);
		}
		for(x = 61; x<122; x++)
		{
			OutSI(0xb8|y);
			OutSI(0x00|(x-61));
			OutSD(0);
		}
	}

}

⌨️ 快捷键说明

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