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

📄 text1.c

📁 关于LCD12864液晶驱动的源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************
* 函数名称:LCM12864_ReadData()
* 功    能:从LCM12864读一字节数据
* 入口参数:无
* 出口参数:返回值为从LCM12864读出的一字节数据
*********************************************************************************************/
uint8 LCM12864_ReadData(void)
{
  uint8 LCM12864_data;

  LCM12864_RW = 1; LCM12864_RS = 1; 

  LCM12864_E = 1;
  
  /* 按LCM12864数据手册,先空读一次 */
  LCM12864_data = LCM12864_DB7_DB0;
  LCM12864_TestBusy();
  
  /* 按LCM12864数据手册,再读一次 */
  LCM12864_data = LCM12864_DB7_DB0;
  LCM12864_TestBusy();

  return LCM12864_data;
}

/******************************************************************************************************************
* 函数名称:LCM12864_Write1Byte_X_Y()
* 功    能:向LCM12864指定点写一字节数据。
* 入口参数:x 		        x坐标值(0-127)
*           y               y坐标值(0-63)
*           LCM12864_data	所要写的数据
* 出口参数:无
*******************************************************************************************************************/
void LCM12864_Write1Byte_X_Y(uint8 x, uint8 y, uint8 LCM12864_data) 
{ 
  /* 参数过滤 */
  x = x&0x7f;				                     
  y = y&0x3f;

  LCM12864_CS1 = 0; LCM12864_CS2 = 0;            // 不选中左半屏及右半屏
     
  /* 更新LCD12864显示 */
  if(x<64)			                             // 判断选择左、右半屏
   { 
     LCM12864_CS1 = 1;                           // 选中左半屏
   }
  else
   { 
     LCM12864_CS2 = 1;                           // 选中右半屏
     x = x-64;
   }
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+x);  // 设置当前列地址,即x坐标
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
  LCM12864_WriteData(LCM12864_data);             // 向LCM12864写数据
}

/******************************************************************************************************************
* 函数名称:LCM12864_Read1Byte_X_Y()
* 功    能:从LCM12864指定点上读取一字数据。
* 入口参数:x 		x坐标值(0-127)
*           y       y坐标值(0-63)
* 出口参数:返回该点上的字节数据。
*******************************************************************************************************************/
uint8  LCM12864_Read1Byte_X_Y(uint8 x, uint8 y)
{ 
  uint8 LCM12864_data;

  /* 参数过滤 */
  x = x&0x7f;				                     
  y = y&0x3f;

  LCM12864_CS1 = 0; LCM12864_CS2 = 0;            // 不选中左半屏及右半屏
     
  if(x<64)			                             // 判断选择左、右半屏
   { 
     LCM12864_CS1 = 1;                           // 选中左半屏
   }
  else
   { 
     LCM12864_CS2 = 1;                           // 选中右半屏
     x = x-64;
   }
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+x);  // 设置当前列地址,即x坐标
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
  LCM12864_data = LCM12864_ReadData();           // 向LCM12864写数据
  
  return LCM12864_data;
}

/********************************************************************************************
* 函数名称:LCM12864_Init()
* 功    能:LCM12864初始化
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void LCM12864_Init(void)
{
  LCM12864_RESET = 0;
  LCM12864_RESET = 1;

  LCM12864_CS1 = 1; LCM12864_CS2 = 1;

  LCM12864_WriteCMD(LCM12864_DISP_OFF);
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0);
  LCM12864_WriteCMD(LCM12864_START_ROW+0);
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  LCM12864_WriteCMD(LCM12864_DISP_ON);

}

/********************************************************************************************
* 函数名称:LCM12864_Fill_Screen()
* 功    能:向LCM12864填充数据
* 入口参数:LCM12864_FillData   要向LCM12864填充的字节数据
* 出口参数:无
* 说    明:此函数会设置显示起始行为0,且会自动选中左半屏,即CS1有效。
*********************************************************************************************/
void LCM12864_Fill_Screen(uint8 LCM12864_FillData)
{
  uint8 x,y;

  LCM12864_CS1 = 1;LCM12864_CS2 = 1;                   // 选中左半屏及右半屏

  LCM12864_WriteCMD(LCM12864_START_ROW+0);             // 设置显示起始行为0

  for(x=0;x<8;x++)
	{
	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+x);   // 设置页地址
	  LCM12864_WriteCMD(LCM12864_COL_START_ADDR);//    // 设置列地址
  	  for(y=0;y<64;y++)	LCM12864_WriteData(LCM12864_FillData);
 	}

  LCM12864_CS2 = 0;                                    // 不选中右半屏
}

/********************************************************************************************
* 函数名称:LCM12864_Clear_Screen()
* 功    能:LCM12864清屏
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void LCM12864_Clear_Screen(void)
{
  LCM12864_Fill_Screen(0x00);
}

/********************************************************************************************
* 函数名称:LCM12864_Disp_Bitmap_12864()
* 功    能:显示128*64图片
* 入口参数:bitmap_12864         128*64位图数据
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Bitmap_12864(uint8 code *bitmap_12864)
{
  uint8 j,k;

  for(k=0;k<8;k++)
    {
  	  LCM12864_CS1 = 1;LCM12864_CS2 = 0;
  	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k);
  	  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  	  for(j=0;j<64;j++) LCM12864_WriteData(bitmap_12864[k*128+j]);

	  LCM12864_CS1 = 0;LCM12864_CS2 = 1;
  	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k);
  	  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  	  for(j=64;j<128;j++) LCM12864_WriteData(bitmap_12864[k*128+j]);
 	}
}

/********************************************************************************************
* 函数名称:LCM12864_Disp_Chinese_16_16()
* 功    能:在LCM12864的指定点上显示16*16点阵汉字
* 入口参数:LCM12864_page     LCM12864的页地址(0~7)
*           LCM12864_col      LCM12864的列地址(0~63)
*           Chinese_16_16     16*16点阵汉字字模(纵向取模,字节倒序)
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Chinese_16_16(uint8 LCM12864_page,uint8 LCM12864_col, uint8 code *Chinese_16_16)
{
  uint8 j=0,i=0;

  for(j=0;j<2;j++)
	{
  	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
	  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+LCM12864_col);
	  for(i=0;i<16;i++) LCM12864_WriteData(Chinese_16_16[16*j+i]);
	}
}

/********************************************************************************************
* 函数名称:LCM12864_Disp_Char_8_16()
* 功    能:在LCM12864的指定点上显示8*16字符或数字
* 入口参数:LCM12864_page     LCM12864的页地址(0~7)
*           LCM12864_col      LCM12864的列地址(0~63)
*           Char_8_16         8*16点阵字符或数字字模(纵向取模,字节倒序)
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Char_8_16(uint8 LCM12864_page,uint8 LCM12864_col, uint8 code *Char_8_16)
{
  uint8 j=0,i=0;

  for(j=0;j<2;j++)
    {
	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
	  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+LCM12864_col);
	  for(i=0;i<8;i++)	LCM12864_WriteData(Char_8_16[8*j+i]);
	}
}

/********************************************************************************************
* 函数名称:LCM12864_Frame()
* 功    能:在LCM12864上显示最大尺寸的边框
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void LCM12864_Frame(void)
{
  uint8 i;
	
  LCM12864_CS1 = 1; LCM12864_CS2 = 1;
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0);
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  for(i=0;i<64;i++) LCM12864_WriteData(0x01);
  
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+7);
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  
  for(i=0;i<64;i++) LCM12864_WriteData(0x80);

  for(i=0;i<8;i++)
	{
  	  LCM12864_CS1 = 0; LCM12864_CS2 = 1;
	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+i);
      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+63);
	  LCM12864_WriteData(0xff);

  	  LCM12864_CS1 = 1; LCM12864_CS2 = 0;
	  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+i);
      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
	  LCM12864_WriteData(0xff);
	}
}

/********************************************************************************************
* 函数名称:main()
* 功    能:LCM12864液晶模块驱动演示。
*********************************************************************************************/   	
void main (void)                
{
  while(1)
      {
        LCM12864_Init();                         // LCM12864初始化

        /* 显示开机画面,约3秒后清屏 */
		/*====================================*/
		LCM12864_Disp_Bitmap_12864(BABY_logo);
        Delay(3000);
        LCM12864_Clear_Screen();
        /*====================================*/

        LCM12864_Frame();                        // 在LCM12864上显示最大边框

		/* 逐字显示"欢迎使用" */
		/*====================================*/
		LCM12864_CS1 = 1; LCM12864_CS2 = 0;
        LCM12864_Disp_Chinese_16_16(1,32,huan1); 
		Delay(300);
        LCM12864_Disp_Chinese_16_16(1,48,ying2); 
		Delay(300);
        LCM12864_CS1 = 0; LCM12864_CS2 = 1;
        LCM12864_Disp_Chinese_16_16(1,0,shi3);   
		Delay(300);
        LCM12864_Disp_Chinese_16_16(1,16,yong4); 
		Delay(300);
        /*====================================*/

		/* 逐词显示"I Love You!" */
		/*====================================*/
		LCM12864_CS1 =1; LCM12864_CS2 =0;
        LCM12864_Disp_Char_8_16(3,8,char_I);       
		Delay(300);
		LCM12864_Disp_Char_8_16(3,24,char_L);      
		Delay(3);
        LCM12864_Disp_Char_8_16(3,32,char_o_);       
		Delay(3);
		LCM12864_Disp_Char_8_16(3,40,char_v_);      
		Delay(3);
        LCM12864_Disp_Char_8_16(3,48,char_e_);             
		Delay(300);
		LCM12864_CS1 =0; LCM12864_CS2 =1;
        LCM12864_Disp_Char_8_16(3,0,char_Y);       
		Delay(3);
		LCM12864_Disp_Char_8_16(3,8,char_o_);      
		Delay(3);
        LCM12864_Disp_Char_8_16(3,16,char_u_);       
		Delay(300);
        /*====================================*/

		/* 逐字显示"My Baby SUNQING" */
		/*====================================*/
		LCM12864_CS1 =1; LCM12864_CS2 =0;
        LCM12864_Disp_Char_8_16(5,8,char_M);       
		Delay(3);
		LCM12864_Disp_Char_8_16(5,16,char_y_);      
		Delay(300);
        LCM12864_Disp_Char_8_16(5,32,char_B);       
		Delay(3);
		LCM12864_Disp_Char_8_16(5,40,char_a_);      
		Delay(3);
        LCM12864_Disp_Char_8_16(5,48,char_b_);       
		Delay(3);
		LCM12864_Disp_Char_8_16(5,56,char_y_);      
		Delay(300);
		LCM12864_CS1 =0; LCM12864_CS2 =1;
        LCM12864_Disp_Char_8_16(5,0,char_S);       
		Delay(300);
		LCM12864_Disp_Char_8_16(5,8,char_U);      
		Delay(300);
        LCM12864_Disp_Char_8_16(5,16,char_N);       
		Delay(300);
		LCM12864_Disp_Char_8_16(5,24,char_Q);      
		Delay(300);
        LCM12864_Disp_Char_8_16(5,32,char_I);       
		Delay(300);
		LCM12864_Disp_Char_8_16(5,40,char_N);      
		Delay(300);
        LCM12864_Disp_Char_8_16(5,48,char_G);      
		Delay(3000);
        /*====================================*/
		}
}

⌨️ 快捷键说明

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