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

📄 lcd.c

📁 我的12864驱动程序,可以显示汉字和图片.
💻 C
字号:
#include "LCD.h"
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
	unsigned int i,j;
	for(i=0;i<t;i++)
	for(j=0;j<10;j++);
}


/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
	
	RS=0;
	RW=0;

	Lcd_Bus=cmdcode;
	delay(0);
	Enable=1;//下降沿写数据,高电平读数据
	delay(0);
	Enable=0;
}



/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
	RS=1;
	RW=0;
	
	Lcd_Bus=Dispdata;
	delay(0);
	Enable=1;
	delay(0);
	Enable=0;
}


/*-------------------读LCD数据----------------------------*/
/*unsigned char read_data( void )
{
	unsigned char tmpin;
	
	Di=1;
	RW=1;
	delay(0);
	Enable=1;
	delay(0);
	Enable=0;
	
	tmpin=Lcd_Bus;
	
	return tmpin;
}
*/


/*------------------显示边框-------------------------------*/
void frame()
{
	unsigned char i;
	
	Lcs=1;
	Rcs=1;
	write_com(Page_Add+0);
	write_com(Col_Add+0);
		for(i=0;i<64;i++) 
		{
		 write_data(0x01);
		}
	
	write_com(Page_Add+7);
	write_com(Col_Add+0);
		for(i=0;i<64;i++)
		{
		write_data(0x80);
		}
	
	for(i=0;i<8;i++)
		{
		Lcs=0;
		Rcs=1;
		write_com(Page_Add+i);
		write_com(Col_Add+63);
		write_data(0xff);
	
		Lcs=1;
		Rcs=0;
		write_com(Page_Add+i);
		write_com(Col_Add+0);
		write_data(0xff);
		}
}

/*-----------------设定起始地址---------------*/
/*void setxy(unsigned char x,y)
{
		write_com(Page_Add+x);
		write_com(Col_Add+y);
}	
*/
/*------------------清除内存---------------*/
void lcd_clr(void)
{
	unsigned char j,k;
	
	Lcs=1;
	Rcs=1;
		write_com(Page_Add+0);
		write_com(Col_Add+0);
	
	 for(k=0;k<8;k++)
		{
		write_com(Page_Add+k);
	  	for(j=0;j<64;j++)
		{
		write_data(0x00);
		}
	 }
}
/*--------------------------清除指定内存段--------------------------*/
void lcd_clr_zd(unsigned char start_page,unsigned char start_col,unsigned int count)
{
	unsigned int i;
	if(start_col<64)
 	{
	  	Lcs=1;
		Rcs=0;
		write_com(Page_Add+start_page);
		write_com(Col_Add+start_col);
	    for(i=0;i<count;i++)
		{
	  	  write_data(0x00);
		}
	}
    else
	{
	 	Lcs=0;
		Rcs=1;
		write_com(Page_Add+start_page);
		write_com(Col_Add+start_col-64);
		for(i=0;i<count;i++)
		{
		  write_data(0x00);
		}
	 }
}

/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
{
	unsigned char j,k;
	
	for(k=0;k<8;k++)
		{
		Lcs=1;
		Rcs=0;
		delay(1);
		write_com(Page_Add+k);
		write_com(Col_Add+0);
			for(j=0;j<64;j++)
			{
			write_data(img[k*128+j]);
			}
		Lcs=0;
		Rcs=1;
		delay(1);
		write_com(Page_Add+k);
		write_com(Col_Add+0);
			for(j=64;j<128;j++) 
			{
			write_data(img[k*128+j]);
			}
		}
}

/***************显示任意大小,位置图片*********************/
void disp_image(unsigned char x,unsigned y,unsigned char w,unsigned char h,unsigned char code *img)
{
	unsigned char j,k;
	if(x<64) 
	{
	    for(k=0;k<h/8;k++)
		{
		delay(1);
		Lcs=1;
		Rcs=0;
		write_com(Page_Add+y+k);//图片高度必须为8的倍数,起始页地址(y)。。。
		write_com(Col_Add+x);
			for(j=0;j<w;j++)
			{
		      if((j+x)<64) write_data(img[w*k+j]);
	          else 	
			  {
				Lcs=0;	Rcs=1;
				write_com(Page_Add+y+k);//图片高度必须为8的倍数,起始页地址(y)。。。
				write_com(Col_Add+(x+j-64));
				write_data(img[w*k+j]);
			  }
			}
	     }
	}

	else
	{	
		for(k=0;k<h/8;k++)
		{
	    Lcs=0;
		Rcs=1;
		 delay(1);
		 write_com(Page_Add+y+k);
		 write_com(Col_Add+x-64);
			for(j=0;j<w;j++) 
			{
			write_data(img[w*k+j]);
			}
		}
	}
}
/*------------------显示横(坐标x)------------------------*/
void Disp_H_Line(unsigned char page)
{
	unsigned char j;
	Lcs=1;
	Rcs=0;
	write_com(Disp_On);				   //开显示
	write_com(Page_Add+page);	   	   //页地址
	write_com(Col_Add+0);
	for(j=0;j<64;j++)
		{
		 if((j+1)%5==0)
		  {
		  if((j+1)%10==0)   write_data(0x07);		
		  else              write_data(0x3f);
		  }

		 else   write_data(0x01);
		}
	Lcs=0;
	Rcs=1;
	write_com(Disp_On);				   //开显示
	write_com(Page_Add+page);	   	   //页地址
	write_com(Col_Add+0);
	for(j=0;j<64;j++)
		{
		 if((j)%5==0)
		  {
		  if((j)%10==0)   write_data(0x3f);		
		  else                 write_data(0x07);
		  }

		 else   write_data(0x01);
		}		

}


/*------------------显示列(坐标y)--------------------------*/
void Disp_L_Line( unsigned char col )
{
	unsigned char j;
	if(col<64)
	{
	Lcs=1;
	Rcs=0;
	write_com(Disp_On);				//开显示
//	write_com(Page_Add+0);			//页地址
//	write_com(Start_Line+0);			//lie--
	for(j=0;j<8;j++)
		{
		write_com(Page_Add+j);
		write_com(Col_Add+col);
		write_data(0xff);			
		}
	}
	else 
	{
	Lcs=0;
	Rcs=1;
	write_com(Disp_On);				//开显示
	write_com(Page_Add);			//页地址
	write_com(Start_Line);			//lie--
	for(j=0;j<8;j++)
		{
		write_com(Page_Add+j);
			write_com(Col_Add+col+64);	
		}
	}
}

/*---------------------指定位置显示汉字16*16-----------------------*/
void hz_disp1616(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
	unsigned char j=0,i=0;
    if(!lcd_cs)
	{
		Lcs=1;
		Rcs=0;	
	}
	else
	{
		Lcs=0;
		Rcs=1;
	}
	if(zc_fx==0)
	{
		for(j=0;j<2;j++)
			{
			write_com(Page_Add+pag+j);
			write_com(Col_Add+col);
			for(i=0;i<16;i++) 
				{
				write_data(hzk[16*j+i]);
				}
			}
	 }
	 else 
	 {
		for(j=0;j<2;j++)
			{
			write_com(Page_Add+pag+j);
			write_com(Col_Add+col);
			for(i=0;i<16;i++) 
				{
				write_data(~hzk[16*j+i]);
				}
			}
	  }		
}

/*-------------------------指定位置显示字符--------------------------*/
void zf_disp168(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
	unsigned char i,j;
	if(!lcd_cs)
	{
		Lcs=1;
		Rcs=0;
	}
	else
	{
		Lcs=0;
		Rcs=1;
	}	   
	if(zc_fx==0)
	{
		for(j=0;j<2;j++)
			{
			write_com(Page_Add+pag+j);
			write_com(Col_Add+col);
			for(i=0;i<8;i++) 
				{
				write_data(hzk[8*j+i]);
				}
			}
	 }
	 else
	 {
		for(j=0;j<2;j++)
			{
			write_com(Page_Add+pag+j);
			write_com(Col_Add+col);
			for(i=0;i<8;i++) 
				{
				write_data(~hzk[8*j+i]);
				}
			}
	 }		
}

void zf_disp88(unsigned char pag,unsigned char col, unsigned char code *hzk,bit lcd_cs,bit zc_fx)
{
	unsigned char i;
	if(!lcd_cs)
	{
		Lcs=1;
		Rcs=0;
	}
	else
	{
		Lcs=0;
		Rcs=1;
	}
	if(zc_fx==0)
	{	   
		write_com(Page_Add+pag);
		write_com(Col_Add+col);
		for(i=0;i<8;i++) 
			{
			write_data(hzk[i]);
			}
	 }
	else
	{
		write_com(Page_Add+pag);
		write_com(Col_Add+col);
		for(i=0;i<8;i++) 
			{
			write_data(~hzk[i]);
			}
	 }	
}

/*------------------初始化LCD屏--------------------------*/
void init_lcd( void )
{
	Lcd_Rst=0;				//复位LCD
	delay(100);
	Lcd_Rst=1;
	delay(100);
	
	Lcs=1;
	Rcs=1;
	
	delay(100);
	write_com(Disp_Off);
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(Col_Add+0);
	write_com(Disp_On);
}

⌨️ 快捷键说明

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