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

📄 lcd_drive.c

📁 基于飞利浦LPC2000芯片系列的12864的液晶程序
💻 C
📖 第 1 页 / 共 2 页
字号:
   uint8 LCD12864_Data;
   ReadStatus();			//检测忙标志位
   IOCLR = LCD12864_EN;
   IOSET = LCD12864_RS;		//LCD12864_RS为1,选择数据寄存器
   IOSET = LCD12864_RW;		//LCD12864_RW为1,执行读操作
   IOSET = LCD12864_EN;
   Delay(2);
   IOCLR = LCD12864_EN;
   LCD12864_Data = IOPIN&0xff;
   return LCD12864_Data;
  }
  
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Write1Byte_X_Y(uint8 x,uint8 y,uint8 LCD12864_data)
 *函数功能:	向LCD12864指定点写入一字节数据
 *入口参数:	x对应列,y对应行
 *出口参数:	无
 *备	注:	x对应行,x~(0-127),y对应列,y~(0-63)
 **********************************************************************************************************************************************/
 void LCD12864_Write1Byte_X_Y(uint8 x,uint8 y,uint8 LCD12864_data)   //x对应行,x~(0-127),y对应列,y~(0-63)
 {
   x &= 0x7f;					 //参数过滤
   y &= 0x3f;
   IOCLR = LCD12864_CS1;			 //不选中左半屏及右半屏
   IOCLR = LCD12864_CS2;
   /*更新LCD12864显示*/
   if(x<64)						 //判断选择左右屏
    IOSET = LCD12864_CS1;			 //选中左半屏
   else
   {
    IOSET = LCD12864_CS2;	    	 //选中右半屏
    x = x-64;
   }
   LCD12864_Write_cmd(LCD12864_COL_START_ADDR+x);		 //设置当前列地址,即x坐标
   LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+y);		 //设置当前页地址,即y坐标
   LCD12864_Write_data(LCD12864_data); 
  }
    
/*********************************************************************************************************************************************
 *函数名称:	uint8 LCD12864_Read1Byte_X_Y(uint8 x,uint8 y)
 *函数功能:	从LCD12864指定点读取一字节数据
 *入口参数:	x,y
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/
 uint8 LCD12864_Read1Byte_X_Y(uint8 x,uint8 y)
 {
  uint8 LCD12864_Data;
  x = x&0x7f;					//参数过滤
  y = y&0x3f;
  IOCLR = LCD12864_CS1;			//不选中左半屏及右半屏
  IOCLR = LCD12864_CS2;
  if(x<64)
  {
   IOSET = LCD12864_CS1;			//选中左半屏
  }
  else
  {
   IOSET = LCD12864_CS2;			//选中右半屏
   x = x-64;
  }
  LCD12864_Write_cmd(LCD12864_COL_START_ADDR+x);	//设置当前列地址,即x地址
  LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+y);	//设置当前页地址,即y地址
  LCD12864_Data = LCD12864_Read_Data();         	//读数据  
  return LCD12864_Data;
 }
    
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Fill_Screen(uint8 t,uint8 LCD_FillData)
 *函数功能:	向12864填充数据
 *入口参数:	t为设置涮屏速度,为1不涮屏,默认为60;LCD_FillData为要写入的数据
 *说    明:	此函数会设置显示起始行为0;且会自动选中左半屏,即CS1有效
 *备	注:	无
 **********************************************************************************************************************************************/
 void LCD12864_Fill_Screen(uint8 t,uint8 LCD12864_FillData)
 {
  uint8 x,y;
  IOSET = LCD12864_CS1;								//选中左半屏及右半屏
  IOSET = LCD12864_CS2;
  LCD12864_Write_cmd(LCD12864_START_ROW+0);			//设置显示地址行为0
  for(x = 0;x<8;x++)
  {
   Delay(t);
   LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+x);	//设置页地址
   LCD12864_Write_cmd(LCD12864_COL_START_ADDR);		//设置列地址
   for(y = 0;y<64;y++)
   LCD12864_Write_data(LCD12864_FillData);
  }
  IOSET=LCD12864_CS1;								//选中左半屏
  IOCLR=LCD12864_CS2;
 } 
  
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Clear_Screen(void) 
 *函数功能:	清屏 
 *入口参数:	无
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/ 
 void LCD12864_Clear_Screen(void) 
 { 
  LCD12864_Fill_Screen(60,0x00);		//写入0到每个显示区
 }
 
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Clear_black(void)
 *函数功能:	使12864黑屏
 *入口参数:	无
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/
 void LCD12864_Clear_black(void)
 {
  LCD12864_Fill_Screen(60,0xff);		//写入1到每个显示区
 }
 
/*********************************************************************************************************************************************
 *函数名称:	void LCD12864_Disp_Bitmap(uint8 t,uint8 *bitmap)
 *函数功能:	显示128*64图片
 *入口参数:	t,设置涮屏速度(为1不涮屏,默认为60),bitmap为128*64点阵图像所在的数组表
 *出口参数:	无
 *备	注:	无
 **********************************************************************************************************************************************/  
  void LCD12864_Disp_Bitmap(uint8 t,uint8 *bitmap_12864)
  {
   uint8 j,k;
   for(k = 0;k<8;k++)			//设置8页的显示
   {
    Delay(t);
    IOSET = LCD12864_CS1;		//左半屏
    IOCLR = LCD12864_CS2;
    LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+k);			//选中页
    LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0);			//选中列
    for(j = 0;j<64;j++)
    {
     LCD12864_Write_data(bitmap_12864[k*128+j]);			//开始写入数据
    }
    IOCLR = LCD12864_CS1;		//右半屏
    IOSET = LCD12864_CS2;
    LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+k);
    LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0);
    for(j = 64;j<128;j++)
    {
	 LCD12864_Write_data(bitmap_12864[k*128+j]);
    }
   }
  }
  
 /*********************************************************************************************************************************************
  *函数名称: void LCD12864_Disp_Char_x_16(uint8 t,uint8 b, uint8 LCD12864_page,LCD12864_col,uint8 *Char_x_16)
  *函数功能: 写入一个汉字
  *入口参数: t设置书写速度,(为1直接显示,默认为12),b为8时输入8*16字符,b为16时输入16*16字符
             LCD12864_page为LCD12864的页地址(0~7),LCD12864_col为LCD12864的列地址(0~64)
             Char_x_16为16*16点阵汉字字模(纵向取模,字节倒序)
  *出口参数: 无
  *备	注:	 无
  **********************************************************************************************************************************************/
  void LCD12864_Disp_Char_x_16(uint8 t,uint8 b, uint8 LCD12864_page,uint8 LCD12864_col,uint8 *char_16)
  {
   uint8 i = 0,j = 0;
   for(j = 0;j<2;j++)
   {	
	LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+LCD12864_page+j);
	LCD12864_Write_cmd(LCD12864_COL_START_ADDR+LCD12864_col);
	for(i = 0;i<b;i++)
	{
	 LCD12864_Write_data(char_16[b*j+i]);
	 Delay(t);  
	}
   } 
  }

/*********************************************************************************************************************************************
 *函数名称: void LCD12864_Frame(void)
 *函数功能: 在LCD12864上显示最大尺寸的边框
 *入口参数: 无
 *出口参数: 无
 *备	注: 无
 **********************************************************************************************************************************************/
 void LCD12864_Frame(void)
 {
  uint8 i;
  IOSET = LCD12864_CS1;
  IOSET = LCD12864_CS2;
  LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+0); 
  LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0); 
  for(i = 0;i<64;i++) 
   LCD12864_Write_data(0x01);		//最上面一行全写1
   
  LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+7); 
  LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0); 
  for(i = 0;i<64;i++) 
   LCD12864_Write_data(0x80);		//最下面一行全写1
  for(i = 0;i<8;i++) 
  {
   IOCLR = LCD12864_CS1;
   IOSET = LCD12864_CS2;
   LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+i);
   LCD12864_Write_cmd(LCD12864_COL_START_ADDR+63); 
   LCD12864_Write_data(0xff);		//最右面一列全写1
   
   IOSET = LCD12864_CS1;
   IOCLR = LCD12864_CS2;
   LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+i);
   LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0);
   LCD12864_Write_data(0xff); 		//最左面一列全写1 
  } 
 
 }  
/*********************************************************************************************************************************************
 *函数名称: void LCD12864_init(void)
 *函数功能: LCD12864初始化
 *入口参数: 无
 *出口参数: 无
 *备	注: 无
 **********************************************************************************************************************************************/
 void LCD12864_init(void)
 {
  IODIR = DATA_CON_DIR|LINE_CON_DIR;					//P0.0~P0.7输出,_RS,_RW,_EN,PSB,RST都为输出
  IOCLR = LCD12864_RST;									//复位
  Delay(1);
  IOSET = LCD12864_RST;
  Delay(1);
  LCD12864_Clear_Screen();								//清屏
  IOSET	= LCD12864_CS1;									//选中左半屏及右半屏
  IOSET	= LCD12864_CS2;
  LCD12864_Write_cmd(LCD12864_DISP_OFF);				//关显示
  LCD12864_Write_cmd(LCD12864_PAGE_START_ADDR+0);	    //第0页位置
  LCD12864_Write_cmd(LCD12864_START_ROW+0);				//第0行	
  LCD12864_Write_cmd(LCD12864_COL_START_ADDR+0);		//第0列
  LCD12864_Write_cmd(LCD12864_DISP_ON);					//开显示
 }  
  
/*********************************************************************************************************************************************
 *函数名称: void LPC2104_init(void)
 *函数功能: LPC2104初始化
 *入口参数: 无
 *出口参数: 无
 *备	注: 无
 **********************************************************************************************************************************************/
  void LPC2104_init(void)
  {
   PINSEL0 = 0x00000000;		//所以管脚接GPIO
   PINSEL1 = 0x00000000;
  }
  
/*********************************************************************************************************************************************
 *函数名称: int main(void)
 *函数功能: 控制在液晶上显示字符 
 *入口参数: 无
 *出口参数: 无
 *备	注: 无
 **********************************************************************************************************************************************/
 int main(void)
 {
  uint8 lx = 0,i;
  LPC2104_init();							//LPC2104初始化
  LCD12864_init();							//LCD12864初始化
  while(1)
  {
   LCD12864_Disp_Bitmap(60,doyleee);		//显示LOGO图像
   Delay(50000);							//延时1秒
   LCD12864_Clear_Screen();
   for(i = 0;i<7;i++)          				//显示字符串"Dy12864"
   {							
    LCD12864_Disp_Char_x_16(8,8,1,lx+8*i,nAsciiDot+16*i);		//显示"Dy12864"从第1页第0列 
   }
   Delay(50000);
   LCD12864_Disp_Char_x_16(12,16,4,20,huan1);		            //显示"欢",在第4页第20列
   Delay(50000); 
   LCD12864_Disp_Char_x_16(12,16,4,40,ying2);		            //显示"迎",在第4页第40列
   Delay(50000);
  }
  return 0;
 }
 
/*********************************************************************************************************************************************
 //文件到此结束
 *********************************************************************************************************************************************/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 

⌨️ 快捷键说明

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