📄 lcd drive.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 + -