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

📄 lcd_drive.c

📁 基于飞利浦LPC2000芯片系列的12864的液晶程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************************************************************************
 *文件名称:	LCD_12864_drive.c
 *作	者:	lixin
 *版	本:	Version1.0
 *说	明:	CTM12864液晶驱动程序
 *修改记录:	2007年8月11号
 **********************************************************************************************************************************************/
 #include "config.h"
 
 //接口定义
 /*P0.0-P0.7为数据线*/
 #define	LCD12864_RS	    0x00000100	   	//P0.8对应寄存器选择,为1选择数据寄存器,为0选择指令寄存器
 #define	LCD12864_RW	    0x00000200	   	//P0.9对应读写信号线,高电平时进行读操作,低电平时进行写操作
 #define	LCD12864_EN	    0x00000400	    //P0.10对应使能端E,当E端从高电平跳变成低电平时液晶模块执行命令
 #define	LCD12864_RST    0x00000800  	//P0.11对应12864的RST端,复位端,高电平有效
 #define	LCD12864_CS1    0x00001000      //P0.12对应12864的CS1端,为1时选中左半屏
 #define    LCD12864_CS2	0x00002000		//P0.13对应12864的CS2端,为1时选中右半屏
 
 //定义CTM12864/LCM12864的命令字 
 #define 	LCD12864_DISP_ON            0x3f          //打开12864显示
 #define 	LCD12864_DISP_OFF           0x3e          //关闭12864显示
 #define 	LCD12864_START_ROW          0xc0          //显示起始行0,可以用LCM12864_START_ROW+x设置起始行(x<64)
 #define 	LCD12864_PAGE_START_ADDR    0xb8          //页起始地址,可以用LCM12864_PAGE_START_ADDR+x设置当前页(x<8)
 #define 	LCD12864_COL_START_ADDR     0x40          //列起始地址,可以用LCM12864_COL_START_ADDR+x设置当前列(x<64)

 //定义CTM12864/LCM12864的状态屏蔽码
 #define	LCD12864_STATUS_BUSY 	    0x80		  //LCD12864忙状态屏蔽位
 #define    LCD12864_STATUS_DISP_OFF    0x20          //LCD12864显示关闭状态屏蔽位
 #define    LCD12864_STATUS_RST         0x10          //LCD12864复位状态屏蔽位
 
 #define	DATA_CON_DIR	0x000000ff				  //控制数据输入输出方向
 #define	LINE_CON_DIR	0x00003f00				  //P0.8控制LCD12864_RS,P0.9控制LCD12864_RW,P0.10控制LCD1602_EN为输出,
                                           			  //P0.11对应12864的RST端,/P0.12对应12864的CS1端,P0.13对应12864的CS2端
 //函数声明	
 void  LPC2104_init(void);									//LPC2104初始化
 void  LCD12864_Write_cmd(uint8 command);					//写命令
 void  LCD12864_Write_data(uint8 data);						//写数据
 uint8 LCD12864_Read_Data(void);							//从LCD12864中读出数据
 uint8 LCD12864_Read1Byte_X_Y(uint8 x,uint8 y);				//从LCD12864指定点读取一字节数据
 void  LCD12864_Write1Byte_X_Y(uint8 x,uint8 y,uint8 LCD12864_data);	//向LCD12864指定点写入一字节数据
 void  LCD12864_Clear_Screen(void);							//清屏
 void  LCD12864_Frame(void);								//在LCD12864上显示最大尺寸的边框在LCD12864上显示最大尺寸的边框
 void  LCD12864_Disp_Bitmap(uint8 t,uint8 *bitmap);  	    //显示图像
 void  LCD12864_Disp_Char_x_16(uint8 t,uint8 b, uint8 LCD12864_page,uint8 LCD12864_col,uint8 *Char_x_16); //显示汉字
 void  LCD12864_init(void);									//LCD12864初始化
 void  Delay(uint32 count);									//延时函数
 void  ReadStatus(void);									//等待忙函数
 
/*********************************************************************************************************************************************
 //	字符/图像定义库
 //	文字:  欢 
 //	宋体12;  此字体对应的点阵为:宽x高=16x16   
 //	纵向取模,字节倒序 
 **********************************************************************************************************************************************/
 uint8 huan1[]={
 0x0C,0x6C,0xEC,0x8C,0xFC,0x3C,0x40,0x70,0x3F,0xCF,0xCC,0x0C,0x3C,0x3C,0x00,0x00,
 0x10,0x38,0x1C,0x07,0x07,0x4C,0x60,0x30,0x18,0x0F,0x07,0x0C,0x18,0x30,0x20,0x00,
 };

 //	文字:  迎  
 // 宋体12;  此字体对应的点阵为:宽x高=16x16  
 //	纵向取模,字节倒序
 uint8 ying2[]={
 0x60,0x66,0xEE,0xE8,0x00,0xFE,0xFE,0x07,0x03,0xFE,0xFE,0x06,0xFE,0xFE,0x00,0x00,
 0x40,0x60,0x3F,0x1F,0x30,0x67,0x67,0x62,0x60,0x6F,0x6F,0x62,0x67,0x67,0x60,0x00
 };
/*********************************************************************************************************************************************
 // ASCII字模的数据表                       
 // 码表从0x20~0x7e                                               
 // 字库:Asc8X16E.dat 纵向取模下高位                            
 **********************************************************************************************************************************************/
 uint8 nAsciiDot[] =              // ASCII
 {
	0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,  // -D-
	0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,

	0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00,  // -y-
	0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00,

	0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,  // -1-
	0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

	0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,  // -2-
	0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,

	0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -8-
	0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

	0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,  // -6-
	0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

	0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,  // -4-
	0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,

 };
/*********************************************************************************************************************************************
// Bitmap点阵数据表                                                  
// 图片: C:\..?doyleee.bmp,纵向取模下高位 ,数据排列:从左到右从上到下   
// 图片尺寸: 128 * 64                                                
**********************************************************************************************************************************************/
uint8 doyleee[] =                  // ???
{
      0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x81,0xF1,0xF1,0xF1,0x71,0x31,
      0x31,0x71,0xF1,0xF1,0xE1,0xC1,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x81,0xF1,0xF1,0xF1,0x71,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
      0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,
      0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x7F,0x00,
      0x00,0xF0,0xFC,0xFE,0xFE,0x0F,0x03,0x03,
      0x07,0xFF,0xFE,0xFE,0xF8,0x00,0xE0,0xE0,
      0xE0,0xE0,0x00,0x03,0x3F,0xFF,0xFF,0xFC,
      0xC0,0xF0,0xFE,0x3F,0x0F,0x03,0x00,0xF0,
      0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xF0,0xFC,
      0xFE,0xFE,0x3F,0x33,0x33,0x33,0x3F,0x3F,
      0x3E,0x38,0x00,0x00,0xF0,0xFC,0xFE,0xFE,
      0x3F,0x33,0x33,0x33,0x3F,0x3F,0x3E,0x38,
      0x00,0x00,0xF0,0xFC,0xFE,0xFE,0x3F,0x33,
      0x33,0x33,0x3F,0x3F,0x3E,0x38,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
      0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
      0x8E,0x8F,0x8F,0x8F,0x8C,0x8C,0x8C,0x8C,
      0x8E,0x8F,0x87,0x87,0x83,0x81,0x80,0x80,
      0x80,0x81,0x87,0x87,0x8F,0x8E,0x8C,0x8C,
      0x8F,0x87,0x87,0x83,0x80,0x80,0x80,0xC0,
      0xC0,0xC0,0xC0,0xC0,0xC0,0xF3,0x7F,0x3F,
      0x0F,0x03,0x00,0x00,0x00,0x00,0x0E,0x0F,
      0x0F,0x0F,0x00,0x00,0x00,0x00,0x01,0x07,
      0x07,0x0F,0x0E,0x0C,0x0C,0x0F,0x07,0x03,
      0x01,0x00,0x00,0x00,0x01,0x07,0x07,0x0F,
      0x0E,0x0C,0x0C,0x0F,0x07,0x03,0x01,0x00,
      0x00,0x00,0x01,0x07,0x07,0x0F,0x0E,0x0C,
      0x0C,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
      0xFF,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,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,0xFF,
      0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
      0x40,0x40,0x40,0x40,0x40,0x00,0x00,0xFC,
      0xFC,0x04,0x0C,0xF8,0xF0,0x00,0x00,0xF0,
      0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x40,
      0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x10,
      0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x18,
      0x1C,0x84,0xC4,0x7C,0x38,0x00,0x00,0xB8,
      0xFC,0x64,0xC4,0xFC,0xB8,0x00,0x00,0xE0,
      0xF0,0x3C,0x2C,0xE4,0xC0,0x00,0x00,0x80,
      0xFC,0x7C,0x00,0xF0,0xF0,0x00,0x00,0xFC,
      0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,
      0xFC,0x04,0x04,0x1C,0x18,0x00,0x00,0x40,
      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,
      0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
      0x07,0x04,0x06,0x03,0x01,0x00,0x20,0x23,
      0x27,0x34,0x1C,0x0F,0x03,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x07,0x07,0x04,0x00,0x00,0x06,
      0x07,0x05,0x04,0x04,0x04,0x00,0x00,0x03,
      0x07,0x04,0x04,0x07,0x03,0x00,0x00,0x03,
      0x07,0x04,0x04,0x07,0x03,0x00,0x00,0x01,
      0x01,0x01,0x01,0x07,0x07,0x01,0x00,0x07,
      0x07,0x04,0x04,0x04,0x04,0x00,0x00,0x03,
      0x07,0x04,0x04,0x07,0x03,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,0xFF,
      0xFF,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,0xF0,0xF0,
      0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,
      0x00,0x20,0x20,0xF0,0xF0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,
      0x10,0x10,0x90,0x50,0xF0,0xE0,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,0xFF,
      0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x83,
      0x86,0x8C,0x8C,0x86,0x83,0x81,0x80,0x80,
      0x88,0x88,0x88,0x8F,0x8F,0x88,0x88,0x88,
      0x80,0x80,0x8C,0x8C,0x80,0x80,0x87,0x8F,
      0x8A,0x89,0x88,0x88,0x8F,0x87,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF
};

/*********************************************************************************************************************************************
 *函数名称:	void Delay(uint32 count)  
 *函数功能:	延时
 *入口参数:	i,i越大,延时越久
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/
 void Delay(uint32 count)     
 {
  uint32 i,j;
  for(i = 0 ; i < count; i++)
   for(j = 0; j < 125; j++); 
 }
        
/*********************************************************************************************************************************************
 *函数名称:	uint8 ReadStatus(void)
 *函数功能:	判断液晶是否忙的子程序
 *入口参数:	i,i越大,延时越久
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/
 void ReadStatus(void)
 {
  IOSET = 0x000000ff;
  IODIR = LINE_CON_DIR;
  IOCLR = LCD12864_EN;
  IOCLR = LCD12864_RS;  		//LCD12864_RS为0,选择指令寄存器
  IOSET = LCD12864_RW;  		//LCD12864_RW为1,执行读操作
  IOSET = LCD12864_EN;			//LCD12864_EN高电平有效
  Delay(2);
  IOCLR = LCD12864_EN;
  while(IOPIN&LCD12864_STATUS_BUSY);	//检测忙标志位
  IODIR = DATA_CON_DIR|LINE_CON_DIR;   
 } 
  
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Write_cmd(uint8 command)
 *函数功能:	写命令
 *入口参数:	command,指令码
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/
 void LCD12864_Write_cmd(uint8 command)
 {
   ReadStatus();				//检测忙标志位
   IOSET = command;
   IOCLR = command^0xff;
   IOCLR = LCD12864_EN;
   IOCLR = LCD12864_RS;			//LCD12864_RS为0,选择指令寄存器
   IOCLR = LCD12864_RW;			//LCD12864_RW为0,执行写操作
   IOSET = LCD12864_EN;			//LCD12864_EN下降沿有效
   Delay(2);
   IOCLR = LCD12864_EN;
 }
   
/*********************************************************************************************************************************************
 *函数名称: void LCD12864_Write_data(uint8 data)
 *函数功能: 写数据
 *入口参数: dat,数据
 *出口参数: 无
 *备    注: 无
 **********************************************************************************************************************************************/
  void LCD12864_Write_data(uint8 data)
  {
   ReadStatus();		    //检测忙标志位
   IOSET = data;
   IOCLR = data^0xff;
   IOCLR = LCD12864_EN;
   IOSET = LCD12864_RS;		//LCD12864_RS为1,选择数据寄存器
   IOCLR = LCD12864_RW;		//LCD12864_RW为0,执行写操作
   IOSET = LCD12864_EN;		//LCD12864_EN下降沿有效
   Delay(2);
   IOCLR = LCD12864_EN;
  }
  
 /*********************************************************************************************************************************************
  *函数名称: uint8 LCD12864_Read_Data(void)
  *函数功能: 从12864中读出数据
  *入口参数: 无
  *出口参数: 读出的数据
  *备	 注: 无
  **********************************************************************************************************************************************/ 
  uint8 LCD12864_Read_Data(void)
  {

⌨️ 快捷键说明

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