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

📄 lcd drive.h

📁 一个用51单片机驱动12864LCD的例子
💻 H
字号:
/***** LCD驱动  *****/
//proteus仿真论坛:http://proteus.5d6d.com 
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define E 	P34
#define RW 	P33
#define DI 	P32
#define CS2 P30
#define CS1 P31
#define LCD P2

sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;

uchar data state;


/*************************** check busy ************************/
//返回值:BIT型,1代表正忙,0代表不忙

bit CheckBusy(void)
{
//	uchar state=0;
//	bit busy_bit;

	LCD=0xFF;
	RW=1;
	DI=0;
	E=1;
//	state=LCD;
	E=0;

	LCD=0xFF;
	RW=1;
	DI=0;
	E=1;
//	state=LCD;
	E=0;
//	busy_bit=(bit)(state>>7);
	
	return((bit)(LCD>>7));
	}


/******************* display on **********************/
//作用:打开显示器,无返回值
void dspon(void)
{
   	while(CheckBusy());
	CS1=1;
	CS2=1;
	LCD=0xFF;
	RW=0;
   	DI=0;
   	LCD=0x3F;
	E=1;
	E=0;
    }

/********************* display off ***********************/

/*void dspoff(void)
{
	while(CheckBusy());
	CS1=1;
	CS2=1;
	LCD=0xFF;
	RW=0;
	DI=0;
	LCD=0x3E;
	E=1;
	E=0;
	}  */

/******************** set display start line **************/
//设置起始行,这里的行数是指LCD的点阵行数

void sets(uchar line)
{
	CS1=1;
	CS2=1;
	while(CheckBusy());
	LCD=0xFF;
	RW=0;
	DI=0;
	LCD=line+0xC0; //0xC0= 1100 0000 B
	E=1;
	E=0;
	}

/************************* set display page ****************/ 
//把页(编辑区)设置在指定的位置
//传入参数:页数,从0开始
void setp(uchar page)
{
	CS2=1;
	CS1=1;
	while(CheckBusy());
	LCD=0xFF;
	RW=0;
	DI=0;
	LCD=page+0xB8;//0xB8= 1011 0000 B
	E=1;
	E=0;
	}

/************************ set display column *****************/
//设置点阵的列数,是点阵的,不是汉字的
//传入参数:作用地的点阵列数
void setc(uchar column)
{
	CS2=1;
	CS1=1;
	while(CheckBusy());
	LCD=0xFF;
	RW=0;
	DI=0;
	LCD=column+0x40;//0x40= 0100 0000 B
	E=1;
	E=0;
	}


/***************************** write data ************************/
//把指定字节写入LCD左半屏或右半屏,具体写入的字节代表什么,这里不关心
//传入参数:1.欲写入的数据,2.左半屏(=1)或者右半屏(=2)
void wrd(uchar dsp_data,uchar chip_select)
{
	CS2=1;
	CS1=1;
	while(CheckBusy());
	LCD=0xFF;
	if(chip_select==1)
	{
		CS2=0;
		CS1=1;
		}
	 else{
	 		CS2=1;
			CS1=0;
			}
	RW=0;
	DI=1;
	LCD=dsp_data;
	E=1;
	E=0;
	}


/******************** clear LCD *******************************/
//赖:貌似没用,注释掉这个函数也正常

void cls(void)
{
	uchar page,column;
	for(page=0;page<8;page++)
	{
	  setp(page);
	  for(column=0;column<64;column++)
	  {
	    setc(column);
		wrd(0x0,1);               //clear chip1
		wrd(0x0,2);               //clear chip2
		}
	   }
}











⌨️ 快捷键说明

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