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

📄 lcd12864.h

📁 不带字库LCD12864设计,在田老师的MINI51上测试
💻 H
字号:
#ifndef _LCD12864_H_
#define _LCD12864_H_
//写汉字液晶,液晶屏为128*64,4行*8列汉字
/*
 D7 D6 D5 D4 D3 D2 D1 D0   
 0  0  0  1  1  1  1  D  	*D=1时显示开,D=0时显示关
 1  1  A  A  A  A  A  A 	*设定显示开始行寄存器位置
 1  0  1  1  1  A  A  A 	*设定页地址
 0  1  A  A  A  A  A  A 	*设定列地址
 D7 0  D5 D4 0  0  0  0 	*D7=1表示LCD忙,D7=0可以读写操作,D5=1显示关状态,
 							*D5=0显示开状态,D4=1表示正在初始化,D4=0初始化完毕
*/

/************常用操作命令和参数定义********/
#define DISPON 0x3f      //display on
#define DISPOFF 0x3e     //display off
#define DISPFIRST 0xc0   //define the first row
#define SETY 0xb8        //define page address
#define SETX 0x40        //define column address
#define SIZE 0x500

//定义行起始间距
#define Line0 9
#define Line1 6
#define Line2 1
#define Line3 1


/*以下定义与硬件电路设计有关*/
//RS-----------P2.0
//R/W----------P2.1
//CS1----------P2.2
//CS2----------P2.3
uchar xdata LLCD_CMD_WR  _at_ 0xf4ea;
uchar xdata LLCD_CMD_RD  _at_ 0xf6ea;
uchar xdata LLCD_DATA_WR _at_ 0xf5ea;
uchar xdata LLCD_DATA_RD _at_ 0xf7ea;
uchar xdata RLCD_CMD_WR  _at_ 0xf8ea;
uchar xdata RLCD_CMD_RD  _at_ 0xfaea;
uchar xdata RLCD_DATA_WR _at_ 0xf9ea;
uchar xdata RLCD_DATA_RD _at_ 0xfbea;

/************sub function******************/
void lcd_init(void);          
void Delay(uchar);
void lcd_cmd_wr(uchar,uchar);
void lcd_data_wr(uchar,uchar);
void lcd_busy(uchar);
void chk_busy(uchar);
void lcd_hanzi_wr(uchar,uchar,uchar *);
void lcd_str_wr(uchar,uchar,uchar,uchar *);
void lcd_bmp_wr(uchar,uchar,uchar,uchar,uchar *);
void lcd_clr(void);
void lcd_rol();
void lcd_dzheng_wr(uchar,uchar,uchar,uchar *);
void lcd_hanzi_wr(uchar,uchar,uchar *);
void lcd_asci_wr(uchar,uchar,uchar);


void lcd_cmd_wr(uchar cmdcode,uchar right)
{
  chk_busy(right);
  if(right) RLCD_CMD_WR = cmdcode;
  else LLCD_CMD_WR = cmdcode;
}

void lcd_data_wr(uchar ldata,uchar right)
{
  chk_busy(right);
  if(right) RLCD_DATA_WR = ldata;
  else LLCD_DATA_WR = ldata;
}

void chk_busy(uchar right)
{
  uchar tmp;
  do
  {
  	if(right) tmp=RLCD_CMD_RD;
  	else tmp=LLCD_CMD_RD;  		
//	tmp = 0x10;	 //只在仿真时使用
  } 
  while ((tmp|0x7f)==0xff);	    
 }

void Delay(uchar ms)
{
  uchar us,usn;
  while(ms!=0)
  {
     usn = 100;
	 while(usn!=0)
	 {
	   us = 0xf0;
	   while(us!=0) us--;
	   usn--;
	 }
     ms--;
  }
}

void lcd_init(void)
{
  lcd_cmd_wr(DISPON,0);
  lcd_cmd_wr(DISPFIRST,0);
  lcd_cmd_wr(SETY,0);
  lcd_cmd_wr(SETX,0);

  lcd_cmd_wr(DISPON,1);
  lcd_cmd_wr(DISPFIRST,1);
  lcd_cmd_wr(SETY,1);
  lcd_cmd_wr(SETX,1);
}

/*清屏函数*/
void lcd_clr(void)
{
	uchar i,j;
	for(i=0;i<8;i++)
	{
		lcd_cmd_wr(SETY+i,0);
		lcd_cmd_wr(SETX,0);
		lcd_cmd_wr(SETY+i,1);
		lcd_cmd_wr(SETX,1);	

		for(j=0;j<64;j++)
		{
			lcd_data_wr(0,0);
			lcd_data_wr(0,1);
		}
	}
}

/*/图片写入函数
void lcd_bmp_wr(uchar posx,uchar posy,uchar width,uchar high,uchar *bmp)
{
  	uchar i,j;
  	high = high/8;

  	for(i=0;i<high;i++)
  	{
	   		lcd_cmd_wr(SETY+posy+i,0);
		   	lcd_cmd_wr(SETX+posx,0);
		   	for(j=0;j<width-64;j++)
		   	{
		     	lcd_data_wr(bmp[128*i+j],0);
		   	}

	   		lcd_cmd_wr(SETY+posy+i,1);
		   	lcd_cmd_wr(SETX+posx,1);
		   	for(j=64;j<width;j++)
		   	{
		     	lcd_data_wr(bmp[128*i+j],1);
		   	}
	  }
}
*/

/*滚屏函数 
void lcd_rol()
{
  uchar i;
  for(i=0;i<64;i++)
  {
    lcd_cmd_wr(DISPFIRST+i,0);
 	lcd_cmd_wr(DISPFIRST+i,1);
 	Delay(300);
  }
}
*/


//在指定位置写入点阵数据,要求指定点阵数
void lcd_dzheng_wr(uchar posx,uchar dx,uchar posy,uchar *pRam)
{
	uchar i;
    lcd_cmd_wr(SETY+posy,0);
	lcd_cmd_wr(SETY+posy,1);	 	
	for(i=0;i<dx;i++)
	{
		if (posx+i<64)
		{
			lcd_cmd_wr(SETX+posx+i,0);
	 	 	lcd_data_wr(pRam[i],0);	 
		}
		else
		{
			lcd_cmd_wr(SETX+posx+i-64,1);
	 	 	lcd_data_wr(pRam[i],1);	 
		}
	}

}
//16x16点阵汉字写入
void lcd_hanzi_wr(uchar posx,uchar posy,uchar *hanzi)
{
	lcd_dzheng_wr(posx,16,posy,hanzi);
	lcd_dzheng_wr(posx,16,posy+1,hanzi+16);
}
//16x8ASCI字符写入
void lcd_asci_wr(uchar posx,uchar posy,uchar number)
{
	lcd_dzheng_wr(posx,8,posy,Num+number*16); 
	lcd_dzheng_wr(posx,8,posy+1,Num+8+number*16); 
}								 

#endif

⌨️ 快捷键说明

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