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

📄 12864yejing.c

📁 JEAN12864韩国产液晶屏c51单片机驱动程序
💻 C
字号:
#include<reg52.h>
#include<zimo.h>

sbit CS1=P1^1;
sbit CS2=P1^0;
sbit RST=P1^2;
sbit RW=P1^3;
sbit RS=P1^4;
sbit E=P1^5;
#define DB7_DB0 P0       // 定义LCM12864的数据总线
#define uchar unsigned char

/* 定义LCM12864的命令字 */
#define LCM12864_DISP_ON            0x3f          // 打开LCM12864显示
#define LCM12864_DISP_OFF           0x3e          // 关闭LCM12864显示
#define LCM12864_START_ROW          0xc0          // 显示起始行0,可以用LCM12864_START_ROW+x设置起始行。(x<64)
#define LCM12864_PAGE_START_ADDR    0xb8          // 页起始地址,可以用LCM12864_PAGE_START_ADDR+x设置当前页。(x<8)
#define LCM12864_COL_START_ADDR     0x40          // 列起始地址,可以用LCM12864_COL_START_ADDR+x设置当前列。(x<64)

/********************************************************************************************
* 函数名称:testbusy()
* 功    能:检测液晶是否是处于忙状态
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void testbusy()
{
    uchar temp;
	RS=0;
	RW=1;        
    do {	DB7_DB0=0xff;
			E=1;
			temp=DB7_DB0;
            E=0;
		} while(temp&0x80);	//读BUSY信号
}
/********************************************************************************************
* 函数名称:writebydat(unsigned char date)
* 功    能:向液晶内写一字节数据
* 入口参数:date   要写的一字节数据
* 出口参数:无
*********************************************************************************************/
void writebydat(unsigned char date)
{
   testbusy();
   RS=1;RW=0; 
   DB7_DB0=date;
   E=1;
   E=0;
}
/********************************************************************************************
* 函数名称:writebycmd(unsigned char command)
* 功    能:向液晶内写一字节命令
* 入口参数:command   要写的一字节命令
* 出口参数:无
*********************************************************************************************/
void writebycmd(unsigned char command)
{
   testbusy();
   RS=0;RW=0; 
   DB7_DB0=command;
   E=1;
   E=0;
}
/********************************************************************************************
* 函数名称:LCM12864_Disp_Chinese_16_16(uchar LCM12864_page,uchar LCM12864_col, uchar code *Chinese_16_16)
* 功    能:向液晶内指定页、指定列,写一个汉字
* 入口参数:uchar LCM12864_page,uchar LCM12864_col, uchar code *Chinese_16_16
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Chinese_16_16(uchar LCM12864_page,uchar LCM12864_col, uchar code *Chinese_16_16)
{
   uchar j=0,i=0;
   for(j=0;j<2;j++)
   {
     writebycmd(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
	 writebycmd(LCM12864_COL_START_ADDR+LCM12864_col);
	  for(i=0;i<16;i++) writebydat(Chinese_16_16[16*j+i]);
   }
}
/********************************************************************************************
* 函数名称:LCM12864_Disp_Char_8_16(uchar LCM12864_page,uchar LCM12864_col, uchar code *Char_8_16)
* 功    能:向液晶内指定页、指定列,写一个字符
* 入口参数:uchar LCM12864_page,uchar LCM12864_col, uchar code *Char_8_16
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Char_8_16(uchar LCM12864_page,uchar LCM12864_col, uchar code *Char_8_16)
{
  uchar j=0,i=0;
  for(j=0;j<2;j++)
    {
	  writebycmd(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
	  writebycmd(LCM12864_COL_START_ADDR+LCM12864_col);
	  for(i=0;i<8;i++)	writebydat(Char_8_16[8*j+i]);
	}
}
/********************************************************************************************
* 函数名称:LCM12864_Disp_Bitmap_12864()
* 功    能:显示128*64图片
* 入口参数:bitmap_12864         128*64位图数据
* 出口参数:无
*********************************************************************************************/
void LCM12864_Disp_Bitmap_12864(uchar code *bitmap_12864)
{
  uchar j,k;
  for(k=0;k<8;k++)
    {
  	  CS1 = 1;CS2 = 0;
  	  writebycmd(LCM12864_PAGE_START_ADDR+k);
  	  writebycmd(LCM12864_COL_START_ADDR+0);
  	  for(j=0;j<64;j++) writebydat(bitmap_12864[k*128+j]);

	  CS1 = 0;CS2 = 1;
  	  writebycmd(LCM12864_PAGE_START_ADDR+k);
  	  writebycmd(LCM12864_COL_START_ADDR+0);
  	  for(j=64;j<128;j++) writebydat(bitmap_12864[k*128+j]);
 	}
}
/********************************************************************************************
* 函数名称:Delay()
* 功    能:软件延时
* 入口参数:count    延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(unsigned int count)
{
  unsigned int i;                

  while(--count != 0)        
 	  {
	    for(i = 0; i < 125; i++);                // ";" 表示空语句,CPU空转。
	  }   				                         // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************
* 函数名称:init()
* 功    能:初始化液晶
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void init()
{
    
    RST=0;
    RST=1;        //软件复位

	CS1 = 1;CS2 = 0;
    writebycmd(LCM12864_DISP_OFF);
	writebycmd(LCM12864_START_ROW+0);
	writebycmd(LCM12864_DISP_ON);

	CS1 = 0;CS2 = 1;
    writebycmd(LCM12864_DISP_OFF);
	writebycmd(LCM12864_START_ROW+0);
	writebycmd(LCM12864_DISP_ON);

}
/********************************************************************************************
* 函数名称:LCM12864_banFill_Screen
* 功    能:向液晶半屏内写满数据
* 入口参数:uchar LCM12864_FillData
* 出口参数:无
*********************************************************************************************/
void LCM12864_banFill_Screen(uchar LCM12864_FillData)
{
  uchar x,y;
  writebycmd(LCM12864_START_ROW+0);             // 设置显示起始行为0
  for(x=0;x<8;x++)
	{
	  writebycmd(LCM12864_PAGE_START_ADDR+x);   // 设置页地址
	  writebycmd(LCM12864_COL_START_ADDR);//    // 设置列地址
  	  for(y=0;y<64;y++)	writebydat(LCM12864_FillData);
 	}
}
/********************************************************************************************
* 函数名称:clean_screen()
* 功    能:向液晶内写满数据0x00
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void clean_screen()
{
  CS1 = 1;CS2 = 0;                   // 选中左半屏及右半屏
  LCM12864_banFill_Screen(0x00);
  CS1 = 0;CS2 = 1;                   // 选中左半屏及右半屏
  LCM12864_banFill_Screen(0x00);
}

void main()
{
   uchar k;
   init();
   clean_screen();
    
   CS1 = 1;CS2 = 0; 
   LCM12864_Disp_Chinese_16_16(0,0,huan1);
   LCM12864_Disp_Char_8_16(3,0,char_y_);
   Delay(1000);
   LCM12864_Disp_Bitmap_12864(ARMSKY_logo);
   Delay(1000);
   while(1)
   {
     for(k=0;k<64;k++)
	 {
	   CS1 = 1;CS2 = 0; 
       writebycmd(LCM12864_START_ROW+k);
       LCM12864_Disp_Bitmap_12864(ARMSKY_logo);
	   CS1 = 0;CS2 = 1;
 	   writebycmd(LCM12864_START_ROW+k);
       LCM12864_Disp_Bitmap_12864(ARMSKY_logo);
       Delay(500);
	 }
   }
}

⌨️ 快捷键说明

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