lcd.c

来自「51单片机驱动128*64液晶屏例程」· C语言 代码 · 共 82 行

C
82
字号
#include <AT89X52.H>
#include <lcd.h>
#include <intrins.h>

void delay(unsigned char ms)
{
	unsigned char i,j;
	for(i=ms;i>0;i--)
		for(j=100;j>0;j--);
}

void WriteCommandLCM(unsigned char comm,unsigned char bank)
{  
	while (checkbusy(bank));
	RW = 0;
	RS = 0;
	if(1==bank)	{CS1=0;	CS2=1;}
	if(2==bank) {CS1=1;	CS2=0;}
	if(3==bank) {CS1=0;	CS2=0;}		
	P0 = comm;
	EN = 1;
	EN = 0;	
}
void WriteDataLCM(unsigned char Data,unsigned char bank)
{	
	while (checkbusy(bank));
	RS=1;
	RW=0;	
	if(1==bank)	{CS1=0;	CS2=1;}
	if(2==bank) {CS1=1;	CS2=0;}
	if(3==bank) {CS1=0;	CS2=0;}
	P0=Data;
	EN=1;
	EN=0;
}
void LCMInit(void)
{
	RST = 0;
	EN =0;
	delay(10);
	RST = 1;
	delay(10);
	CS1=0;
	CS2=0;
	WriteCommandLCM(0x3f,3);//打开显示功能;
	WriteCommandLCM(0x40,3);//设置Y地址为0;
	WriteCommandLCM(0xb8,3);//设置行地址为0;
	WriteCommandLCM(0xc0,3);//设置显示起始行为0;

}
unsigned char ReadStatusLCM(unsigned char bank)
{
	unsigned char sta;
	RS=0;
	RW=1;
	if(1==bank)	{CS1=0;	CS2=1;}
	if(2==bank)	{CS1=1;	CS2=0;}
	if(3==bank)	{CS1=0;	CS2=0;}
	P0=0xff;
	EN=1;
	EN=0;
	sta=P0;
	return sta;
}

unsigned char checkbusy(unsigned char bank)
{
	return (ReadStatusLCM(bank)&0x80);
}

void writelcd(unsigned char x,unsigned char y,unsigned char *p)
{
	unsigned char bank=1,row,i;
	row=y;
	if(y>4) {bank=2;row=y-4;}
	WriteCommandLCM(0xb6+x*2,bank);//设置行地址为X;
	WriteCommandLCM(0x30+row*16,bank);//设置列地址为y;
	for(i=0;i<16;i++) WriteDataLCM(p[i],bank);
	WriteCommandLCM(0xb7+x*2,bank);
	WriteCommandLCM(0x30+row*16,bank);
	for(i=0;i<16;i++) WriteDataLCM(p[i+16],bank);
}	

⌨️ 快捷键说明

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