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

📄 lcm128645zk0.c

📁 此文件是LCM12864在LPC2131上的驱动代码
💻 C
字号:
#include "config.h"
#include "LCM128645ZK.h" 
Tcolor  gui_disp_buf[GUI_LCM_XMAX][GUI_LCM_YMAX/8];  //[128][8]

 uint8 a[]="换个数据" ;
const uint8 PIC1[64][16]={
/*--  调入了一幅图像:C:\Documents and Settings\Administrator\桌面\atmel.bmp  --*/
/*--  宽度x高度=128x64  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,
0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x00,0x3F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x00,0x7F,0xE7,0xFC,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xEF,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x00,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x01,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x03,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00,
0x00,0x07,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x1F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x3F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xF8,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFC,0x00,0x0F,0xF8,0x00,0x00,0x00,
0x01,0xFF,0xBF,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFE,0x00,0x0F,0xF8,0x00,0x00,0x00,
0x01,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00,
0x03,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF8,0x00,0x00,
0x03,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00,
0x07,0xFE,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xF0,0x00,0x00,
0x07,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00,
0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xE0,0x00,0x00,
0x0F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00,
0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0xBF,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0xC0,0x00,0x00,
0x1F,0xFF,0x3F,0xE7,0xFC,0xFF,0x1F,0xE7,0xFC,0xFF,0xFF,0xCF,0xFF,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x63,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xB6,0x80,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xBE,0x80,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xB6,0x80,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF7,0x00,0x00,
0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x63,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; 






/********************************************************************************************************* 
函数名:LCM128645ZK_ShortDelay(uint32 n)
参数: j----代表延时的长短
功能:延时 
说明:j=7时,此延时函数大约延时1us
*********************************************************************************************************/ 
void LCM128645ZK_Shortdelay(uint32 i)
{for(;i>0;i--);}
/********************************************************************************************************* 
函数名: LCM128645ZK_INIT(void)
参数: 
功能:初始化
说明:
**************************************************************/
void  LCM128645ZK_INIT(void)
{
 uint8 cmd;
 PINSEL0=0x00000000;
 PINSEL1=0x00000000;
 IO0DIR=0xfffff;
 IO0PIN=(IO0PIN&0xfffff00f)|(0x00<<4);
 
 cmd=0x30;			//功能设置 8位数据,基本指令
 LCM128645ZK_cmd(cmd);		//写指令
 cmd=0x0C;
 			//显示状态 ON,游标OFF,反白OFF
 LCM128645ZK_cmd(cmd);		//写指令
 cmd=0x01;			//清除显示
 LCM128645ZK_cmd(cmd);
 
 	//写指令
 cmd=0x06;
 LCM128645ZK_cmd(cmd);
 cmd=0x02;			//地址归位
 LCM128645ZK_cmd(cmd);		//写指令
 cmd=0x80;			//设置DDRAM地址
 LCM128645ZK_cmd(cmd);		//写指令
 
}
/********************************************************************************************************* 
函数名: void LCM128645ZK_Test(void)
参数: 
功能:测试
说明:显示测试成功字样及arm图片
**************************************************************/

void LCM128645ZK_Test(void)
{   Char_Set_XY(0,0,a);
  
    LCM128645ZK_Shortdelay(5000000);
    
    Set_Draw();
  Draw_Pic(0,0,*PIC1);
 
}
/********************************************************************************************************* 
函数名:uint8 CheckBusy(void)
参数: 
功能:测试是否忙的状态
说明:忙返回1,不忙返回0
**************************************************************/
uint32 CheckBusy(void)
{
	uint32 temp;
	Clr_LCM128645ZK_RS();  		   
	Set_LCM128645ZK_RW();
	Set_LCM128645ZK_EN();
	Set_LCM128645ZK_input();
	temp = IO0PIN;
	Clr_LCM128645ZK_EN();
	Set_LCM128645ZK_output();
	temp &= 0x00000800;
	return(temp);
}
/********************************************************************************************************* 
函数名:void LCM128645ZK_cmd(uint8 CMD)
参数: 8位的指令
功能:写指令函数
说明:
**************************************************************/
void LCM128645ZK_cmd(uint8 CMD)		
{
	while(CheckBusy());			//检测液晶内部是否忙
	Clr_LCM128645ZK_RS();
	Clr_LCM128645ZK_RW();
	Set_LCM128645ZK_EN();
	IO0PIN =(IO0PIN&0xfffff00f)|( CMD<<4);
	if(CMD==0x01)
	LCM128645ZK_Shortdelay(5000);
	
	Clr_LCM128645ZK_EN();
}
/********************************************************************************************************* 
函数名:void LCM128645ZK_data(uint8 DAT)
参数: 8位的数据
功能://写数据函数
说明
**************************************************************/
void LCM128645ZK_data(uint8 DAT)		
{
	while(CheckBusy());			//检测液晶内部是否忙
	Set_LCM128645ZK_RS();
	Clr_LCM128645ZK_RW();
	Set_LCM128645ZK_EN();
	IO0PIN =(IO0PIN&0xfffff00f)|( DAT<<4);
	
	Clr_LCM128645ZK_EN();
}
/********************************************************************************************************* 
函数名:void Char_Set_XY(uint8 x, uint8 y, uint8 *p)
参数: x为横坐标,y是纵坐标,p是显示的字的地址
功能://显示数据的函数
说明
**************************************************************/
void Char_Set_XY(uint8 x, uint8 y, uint8 *p)
{
  	if(y == 0)
	{
	 	LCM128645ZK_cmd((0x80+x));	
	}
	if(y == 1)
	{
		LCM128645ZK_cmd((0x90+x));
	}
	if(y == 2)
	{
		LCM128645ZK_cmd((0x88+x));
	}
	if(y == 3)
	{
		LCM128645ZK_cmd((0x98+x));
	}
	while(*p != 0)
	{
		LCM128645ZK_data(*p++);
	}
}
/********************************************************************************************************* 
函数名:void Set_Draw(void)
参数:
功能:设置为绘图功能的函数
说明
**************************************************************/
void Set_Draw(void)
{
	LCM128645ZK_cmd(0x01);		  	//清屏
	
 	  LCM128645ZK_cmd(0x06);
		//地址归位
   LCM128645ZK_cmd(0x02);		//写指令			
	LCM128645ZK_cmd(0x36);			//8BIT控制界面,扩充指令集,,绘图显示ON
				
}
/********************************************************************************************************* 
函数名:void Draw_Pic(uint8_t x, uint8_t y, const uint8_t *Draw)
参数:x,y为起始点,图像文件的地址(如二维数组)
功能:绘图函数
说明
**************************************************************/
void Draw_Pic(uint8 x, uint8 y, const uint8 *Draw)
{   
	uint8 i, j, temp_x, temp_y;
	LCM128645ZK_cmd(0x01);
	temp_x = x;
	temp_y = y;
	temp_x |= 0x80;
	temp_y |= 0x80;
	for(i=0;i<32;i++ )
	{
		LCM128645ZK_cmd(temp_y++);			//设置绘图区的Y地址坐标
		LCM128645ZK_cmd(temp_x);			//设置绘图区的X地址坐标
		for(j=0;j<16;j++)
		{
			LCM128645ZK_data(*Draw);
			 Draw++;
		}
	}
	temp_x = 0x88;
	temp_y = 0x80;
	j = 0;
	for(;i<64;i++ )
	{
		LCM128645ZK_cmd(temp_y++);			//设置绘图区的Y地址坐标
		LCM128645ZK_cmd(temp_x);			//设置绘图区的X地址坐标	 
		for(j=0;j<16;j++)
		{
			 LCM128645ZK_data(*Draw);
			 Draw++;
		}
	}
 
}

/********************************************************************************************************* 
函数名:void LCM128645ZK_Draw_clear(void)
参数
功能:绘图清屏函数
说明
**************************************************************/
void LCM128645ZK_Draw_clear(void)
{
uint8 x,y;
LCM128645ZK_cmd(0x36); //设置扩展指令集,按手册说明,仅设置了绘图位,
LCM128645ZK_cmd(0x36); //需要两次,本次设置扩展指令集。
//以下程序会将屏幕清空。如果更改高位和低位的数据,就可以改变显示的内容。
for (y=0;y<64;y++)
  {
 LCM128645ZK_cmd(0x80+y); //设置y=0000+000x,y+1则往下一行
 LCM128645ZK_cmd(0x80); //设置x=0000 0000
 for (x=0;x<16;x++)
 	{
 //此处连续写数据,由于y为行号,在本循环内不变,
 //而连续写16个数据时,x位址自动增加,
 //因此实际上可以写入16个汉字的位置。
   LCM128645ZK_data(0x00); //高字节数据
   LCM128645ZK_data(0x00); //低字节数据
 	}
  }
}
//uint8 const  DEC_HEX_TAB[8] = {0x80,0x40,0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
uint8 const  DEC_HEX_TAB[8] = {0x01,0x02,0x40, 0x80, 0x10, 0x20, 0x40, 0x80};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x       指定点所在列的位置
*           y       指定点所在行的位置
*           color   显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
uint8  GUI_Point(uint8 x, uint8 y, Tcolor color)
{  uint8   bak;
   
   // 参数过滤 
   if(x>=GUI_LCM_XMAX) return(0);
   if(y>=GUI_LCM_YMAX) return(0);
   
   // 设置相应的点为1或0 
   bak = LCM_ReadByte(x,y);
   if(0==color)
   {  bak &= (~DEC_HEX_TAB[y&0x07]);
   }
   else
   {  bak |= DEC_HEX_TAB[y&0x07];
   }
  
   // 刷新显示 
   LCM_WriteByte(x, y, bak);
   return(1);
}



/***********************************************************************
* 名称:LCM_ReadByte()
* 功能:读取指定点上的数据。
* 入口参数:x     x坐标值(0-127)
*           y     y坐标值(0-63)
* 出口参数:返回该点上的字节数据。
***********************************************************************/
uint8  LCM_ReadByte(uint8 x, uint8 y)
{ x = x&0x7f;               // 参数过滤
  y = y&0x3f;

  y = y>>3;
  return(gui_disp_buf[x][y]);
}


/***********************************************************************
* 名称:LCM_WriteByte()
* 功能:向指定点写数据(一字节)。
* 入口参数:x       x坐标值(0-127)
*           y       y坐标值(0-63)
*           wrdata  所要写的数据
* 说明:会重新设置CS1/CS2,及其内部指针
***********************************************************************/
void LCM_WriteByte(uint8 x, uint8 y, uint8 wrdata) 
{ x = x&0x7f;               // 参数过滤
  y = y&0x3f;

//  CCS1();
//  CCS2();
  
  //更新显示缓冲区
  y = y>>3;
  gui_disp_buf[x][y] = wrdata;
   
  // 更新LCD显示
/*  if(x<64)                  // 选择液晶控制芯片(即CS1--控制前64个点,CS2--控制后64个点)
  { SCS1();  
  }
  else
  { SCS2();
    x = x-64;
  }
*/  
  LCM128645ZK_cmd(0x80+x);    // 设置当前列地址,即x坐标
   LCM128645ZK_cmd(0x80+y);    // 设置当前页地址,即y坐标

  LCM128645ZK_data(wrdata);
}

⌨️ 快捷键说明

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