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

📄 12864.h

📁 本资料为基于单片机89C55+LCD12864的万年历
💻 H
字号:
#ifndef _12864_H__
#define _12864_H__


/****检查液晶是否忙碌***/
void chekbusy12864(void)
 {
  uchar dat;
  RS=0;       //指令模式 
  RW=1;       //读数据
 do{
   P0=0x00;
   E=1;
   dat=P0&0x80;
   E=0;
  }while(dat!=0x00);
 }
 /****选屏****/
void choose12864(uchar i)//i是要写的屏.0是左屏,1是右屏,2是双屏
{
  switch (i)
  {
    case 0: CS1=0;CS2=1;break;
    case 1: CS1=1;CS2=0;break;
	case 2: CS1=0;CS2=0;break;
	default: break;
  }
}
/******写命令*****/
void cmd_w12864(uchar cmd)		//写命令
{
  chekbusy12864();
  RS=0;	            //指令模式
  RW=0;             //写模式
  E=1;
  P0=cmd;
  E=0;
}
/****写数据******/
void  dat_w12864(uchar dat)
{
  chekbusy12864();
  RS=1;
  RW=0;
  E=1;
  P0=dat;
  E=0;
}

/*****清屏*****/
void clear12864()
{
  uchar page,row,i;
  for(i=0;i<2;i++)
  {
  	choose12864(i);
  	for(page=0xb8;page<0xc0;page++)
  	{
    	cmd_w12864(page); //x地址设置,x地址需指令加1
		cmd_w12864(0x40); //y地址设置,y地址在写入数据后会加1
		for(row=0;row<64;row++)
		 {
		   dat_w12864(0x00); 
		 }
	  }
     }
}
/*******选择性清屏或填充(一次清除/填充一列的8点)*******/
void chsfill(uchar ch,uchar row,uchar page,uchar ads) //row=0~64、page=0~7
{
  	choose12864(ch);					   
  	cmd_w12864(row+0x40);
  	cmd_w12864(page+0xb8);
   	dat_w12864(ads);
}
/***初始化****/
void init12864(void)
{
  chekbusy12864();
  cmd_w12864(0xc0); //设置起始行,此为0行开始。
  cmd_w12864(0x3f);  //显示器开,0x3e为关
}

/**8X8字符的显示*/
/******************
其中:	ch:要写的屏.0是左屏,1是右屏,2是双屏
		row:从哪一列开始显示,每一屏有0~7列
		page:从哪一行开始显示,0~7
		*adr:数据地址
*******************/
void play88(uchar ch,uchar row,uchar page,uchar *adr)
{
	uchar i;
	choose12864(ch);
	row=row*8;//每个屏分成8个8位的列,每个字母数字占一列,每个汉字占两列
	cmd_w12864(row+0x40);
	cmd_w12864(page+0xb8);
	for(i=0;i<8;i++)
	{	
	 	dat_w12864(*(adr+i));
	}
}

/**8X16字符的显示*/
/******************
其中:	ch:要写的屏.0是左屏,1是右屏,2是双屏
		row:从哪一列开始显示,每一屏有0~7列
		page:从哪一行开始显示,0~3
		*adr:数据地址
*******************/
void play816(uchar ch,uchar row,uchar page,uchar *adr,bit stype)
{
	uchar i;
	choose12864(ch);
	page=page*2; //行地址(x地址)范围为0~7,每一个为8位,而字的竖向都占16位,所以page为0,2,4,6。
	row=row*8;//每个屏分成8个8位的列,每个字母数字占一列,每个汉字占两列
	if(stype==0)
	{
		cmd_w12864(row+0x40);
		cmd_w12864(page+0xb8);
		for(i=0;i<8;i++)
		{	
		 	dat_w12864(*(adr+i));
		}
  		cmd_w12864(row+0x40);
  		cmd_w12864(page+0xb9);
  		for(i=8;i<16;i++)
 		 {
			dat_w12864(*(adr+i));
  		}
	}
	else
	{
		cmd_w12864(row+0x40);
		cmd_w12864(page+0xb8);
		for(i=0;i<8;i++)
		{	
		 	dat_w12864(~(*(adr+i)));
		}
  		cmd_w12864(row+0x40);
  		cmd_w12864(page+0xb9);
  		for(i=8;i<16;i++)
 		 {
			dat_w12864(~(*(adr+i)));
  		}
	}
}

/*************************
全屏显示图形(128*64)
*************************/
void disppc12864(uchar *adr)
{
	uchar i,j;
	for(j=0;j<8;j++)
	{
		choose12864(0);
		cmd_w12864(0x40);
		cmd_w12864(j+0xb8);
		for(i=0;i<64;i++)
		{
			dat_w12864(*(adr+i+128*j));
		}
		choose12864(1);
		cmd_w12864(0x40);
		cmd_w12864(j+0xb8);
		for(i=64;i<128;i++)
		{
			dat_w12864(*(adr+i+128*j));
		}
	}

}

/**16X16显示**/
/******************
其中:	ch:要写的屏.0是左屏,1是右屏,2是双屏
		row:从哪一列开始显示,每一屏有0~7列
		page:从哪一行开始显示,0~3
		*adr:数据地址,字模软件里设置:CADB,右旋90度 
数据输入方式:先上8行从左到右一列列输入,后下8行从左到右一列列输入
*******************/
void play1616(uchar ch,uchar row,uchar page,uchar *adr)
{
  uchar i;
  choose12864(ch);
  page=page*2;					   
  row=row*8;
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xb8);
  for(i=0;i<16;i++)
  {
    dat_w12864(*(adr+i));
  }
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xb9);
  for(i=16;i<32;i++)
  {
    dat_w12864(*(adr+i));
  }
}

/**16X32显示**/
/******************
其中:	ch:要写的屏.0是左屏,1是右屏,2是双屏
		row:从哪一列开始显示,每一屏有0~7列
		page:从哪一行开始显示,0~3
		*adr:数据地址,字模软件里设置:CADB,右旋90度 
数据输入方式:先上8行从左到右一列列输入,后下8行从左到右一列列输入
*******************/

void play1632(uchar ch,uchar row,uchar page,uchar *adr)
{
  uchar i;
  choose12864(ch);
  page=page*2;					   
  row=row*8;
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xb8);
  for(i=0;i<16;i++)
  {
    dat_w12864(*(adr+i));
  }
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xb9);
  for(i=16;i<32;i++)
  {
    dat_w12864(*(adr+i));
  }
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xba);
  for(i=32;i<48;i++)
  {
    dat_w12864(*(adr+i));
  }
  cmd_w12864(row+0x40);
  cmd_w12864(page+0xbb);
  for(i=48;i<64;i++)
  {
    dat_w12864(*(adr+i));
  }
   
}  	
#endif

⌨️ 快捷键说明

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