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

📄 lcd12864.c

📁 基于ST7920控制器的LCD12864液晶显示屏的并行驱动程序。
💻 C
字号:
#include <at89x52.h>
#include "LCD12864.h"


uchar ReadByte_LCD(bit command)
{
	uchar dat;
	DataPort=0xff;	
	RS=command;
	RW=1;
	EN=1;
	dat=DataPort;
	EN=0;

	return(dat);
}


void CheckBusy()
{
	uchar i=100;
	LCD_Busy=1;
   	RS=0;
   	RW=1;
   	EN=1;
   	while((i--)&&(LCD_Busy==1));
   	EN=0;
}

void WriteByte_LCD(uchar Data,bit command)
{
	CheckBusy();
	DataPort=Data;
	RS=command;
	RW=0;
	EN=1;
	EN=0;
}

void WriteString_LCD(uchar *Data)
{
	while(*Data!='\0')
	{
		WriteByte_LCD(*Data,1);
		Data++;
	}
	
}

//行反白显示
void Highlight(uchar line,bit Switch)
{
	uchar x,y,i,j,dat;
	EA=0;
	switch(line)
	{
		case 0:
			x=0x80;y=0x80;break;
		case 1:
			x=0x80;y=0x90;break;
		case 2:
			x=0x88;y=0x80;break;
		case 3:
			x=0x88;y=0x90;break;
		default:
			break;
	}

	dat=(Switch==Highlight_On)?0xff:0x00;

	for(i=0;i<16;i++)
	{
		for(j=0;j<8;j++)
		{
			WriteByte_LCD(0x34,0);
			WriteByte_LCD(y+i,0);
			WriteByte_LCD(x+j,0);
			WriteByte_LCD(0x30,0);

			WriteByte_LCD(dat,1);
			WriteByte_LCD(dat,1);
		}
	} 
	WriteByte_LCD(0x36,0); 
	WriteByte_LCD(0x32,0); 
	EA=1;                       
}

void DisplayImage(uchar code *Pdata)
{
	uchar i,j,k,l;
	uchar x=0x80;
	uchar y=0x80;
	EA=0;
	for(i=0;i<2;i++)
	{
		for(j=0;j<32;j++)
		{
			for(k=0;k<8;k++)
			{
				WriteByte_LCD(0x34,0);
				WriteByte_LCD(y+j,0);
				WriteByte_LCD(x+k,0);
				WriteByte_LCD(0x30,0);
			 	for(l=0;l<2;l++)
				{
					WriteByte_LCD((*Pdata),1);
					Pdata++;
				}
			}			
		}
		x=0x88;
	}
	WriteByte_LCD(0x36,0);
	WriteByte_LCD(0x32,0);
	EA=1;
}

void ClearImage()
{
	uchar i,j,k;
	uchar x=0x80;
	uchar y=0x80;
	EA=0;
	for(i=0;i<2;i++)
	{
		for(j=0;j<32;j++)
		{
			for(k=0;k<8;k++)
			{
				WriteByte_LCD(0x34,0);
				WriteByte_LCD(y+j,0);
				WriteByte_LCD(x+k,0);
				WriteByte_LCD(0x30,0);

				WriteByte_LCD(0x00,1);
				WriteByte_LCD(0x00,1);
			}
			
		}
		x=0x88;
	} 
	WriteByte_LCD(0x36,0);
	WriteByte_LCD(0x32,0);
	EA=1;
}

void SetLocation(uchar x,uchar y)
{
	switch(x)
	{
		case 0:	
			x=0x80;break;
		case 1:	
			x=0x90;break;
		case 2:	
			x=0x88;break;
		case 3:	
			x=0x98;break;
		default:
			x=0x80;break;
	}
	y=y&0x07;
	WriteByte_LCD((x+y),0);
}



void LCD_Init()
{
	Delay(100);
	WriteByte_LCD(0x30,0);
	Delay(1);
	WriteByte_LCD(0x30,0);
	Delay(1);
	WriteByte_LCD(0x0c,0);
	Delay(1);
	WriteByte_LCD(0x01,0);
	Delay(30);
	WriteByte_LCD(0x06,0);
}

⌨️ 快捷键说明

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