📄 splc501_lcd.h
字号:
/******************************************************************
文件名:SPLC501_LCD.H
功能:完成液晶驱动有初始化
设计者:ZHOUHONG
时间:05/8/25
*******************************************************************/
#ifndef SPLC501_LCD_H
#define SPLC501_LCD_H
#include <AT89X52.H>
#include <Delay.h>
/*************************定义SPLC501液晶端口*****************/
#define SPLC501_Data P0 //液晶数据口
sbit SPLC501_RES=P2^4; //液晶复位口(低电平有效)
sbit SPLC501_A0=P2^3; //液晶数据命令选择脚
sbit SPLC501_RW=P2^2; //液晶读/写信号
sbit SPLC501_EP=P2^1; //液晶时钟信号使能脚
/************************************************************/
/*********************************函数声明****************************************/
extern void SPLC501_WriteCommand(unsigned char comData);
extern void SPLC501_Init(void);
extern void SPLC501_WriteData(unsigned char dispData);
extern void SetPage(unsigned char pageNum );
extern void SetColuAddr(unsigned char coluAdd);
extern void ClearScreen( bit isTrue);
extern void ClearGrid(unsigned char pageNum,unsigned char coluAdd,bit cleaMode);
extern void ClearPage(unsigned char pageNum,bit cleaMode);
extern void SetPos( unsigned char pageNum,unsigned char coluAdd);
extern void ShowChin(unsigned char pageNum,unsigned char coluAdd,bit dispMode,unsigned char *p);
extern void ShowASS(unsigned char pageNum,unsigned char coluAdd,bit dispMode,unsigned char *p);
//=================================================================================
//===================================子函数==========================
/*********************************液晶初始化子函数*************************/
void SPLC501_Init(void)
{
SPLC501_RES=0; //液晶复位(低电平有效)
wait;
SPLC501_RES=1;
SPLC501_WriteCommand(0xe2); //复位
SPLC501_WriteCommand(0xe3); //空操作
SPLC501_WriteCommand(0xc8); //COM口扫描方向 c8 63---0 c0 0----63
SPLC501_WriteCommand(0xa1); //ADC(segment方向)设定为A1 反向 A0 normal
//电源设定
//========================================================
SPLC501_WriteCommand(0xa2); //LCD偏压设定 1/9 bias
SPLC501_WriteCommand(0x24); //V5电压内部电阻调整设置
SPLC501_WriteCommand(0x81); //电量设置模式 (双字节)
SPLC501_WriteCommand(0x10); //调整显示屏亮度 10~1f共16个等级
SPLC501_WriteCommand(0xd2); //驱动模式
SPLC501_WriteCommand(0x00); //模式2
SPLC501_WriteCommand(0x2c); //上电控制设置 REGULATOR on
SPLC501_WriteCommand(0x2e); //上电控制设置 +FOLLOWER oFF
SPLC501_WriteCommand(0x2f); //上电控制设置 +FOLLOWER on
//power set over
//======================================================================
SPLC501_WriteCommand(0xaf); //开显示
SetPage(0x00); //页设置为第0页
SPLC501_WriteCommand(0x40); //显示起始行设置为第0行
SetColuAddr(0x00); //列设置为第0列
SPLC501_WriteCommand(0xa5); //全屏点亮
SPLC501_WriteCommand(0xa4); //正常显示
SPLC501_WriteCommand(0xa6); //正向显示 a7为反向
ClearScreen(0); //清屏全部ROM填零
}
/*************************** 向SPLC501LCD写命令函数 ******************* */
void SPLC501_WriteCommand(unsigned char comData)
{
SPLC501_A0=0; //设置各管脚电平
SPLC501_EP=1;
SPLC501_RW=0;
SPLC501_Data=comData;
WAIT3; // 即3个_NOP_();可以不加,起到稳定的作用
SPLC501_EP=0;
}
/**************************************************************
向SPLC501LCD写数据函数
**************************************************************/
void SPLC501_WriteData(unsigned char dispData)
{
SPLC501_A0=1; //设置各管脚电平
SPLC501_EP=1;
SPLC501_RW=0;
SPLC501_Data=dispData;
WAIT3; //即3个_NOP_(); 可以不加,起到稳定的作用
SPLC501_EP=0;
}
/**********************************************************
页设置子函数( PageNum= 0,1.......8 )
**********************************************************/
void SetPage(unsigned char pageNum )
{
pageNum+=0xb0;
SPLC501_WriteCommand(pageNum);
}
/*********************************************************
列设置子函数 (coluAdd= 0,1,.........131 )
*********************************************************/
void SetColuAddr(unsigned char coluAdd)
{
unsigned char temp; //临时变量
temp=coluAdd>>4; //取列地址的高4位
temp+=0x10;
SPLC501_WriteCommand(temp);
temp=coluAdd & 0x0f; //取列地址的低4位
SPLC501_WriteCommand(temp);
}
/***********************************************************
清屏子函数 fill ROM with 0 or 1
***********************************************************/
void ClearScreen( bit isTrue)
{
unsigned char z1,z2,temp;
if(isTrue==1)
temp=0xff;
else
temp=0x00;
for(z1=0;z1<8;z1++)
{
SetPage(z1);
SetColuAddr(0);
for(z2=0;z2<132;z2++)
{
SPLC501_WriteData(temp);
}
}
}
/*********************************************************
定位函数
( PageNum= 0,1..........7 )
( coluAdd= 0,1,.........131 )
*********************************************************/
void SetPos(unsigned char pageNum,unsigned char coluAdd)
{
if(pageNum<8)
{
SetPage(7-pageNum);
SetColuAddr(coluAdd+4);
}
}
/*********************************************************
显示汉字函数
其中:
PageNum= 0,1.......8
coluAdd= 0,1,.........131
dispMode 显示方式.0为反显,1为正显
p为显示数据的指针
*********************************************************/
void ShowChin(unsigned char pageNum,unsigned char coluAdd,bit dispMode, unsigned char *p)
{
unsigned char i;
SetPos(pageNum,coluAdd);
for(i=0;i<16;i++)
{
if(dispMode)
{
SPLC501_WriteData(*p);
}
else
{
SPLC501_WriteData(~(*p));
}
p++;
}
SetPos(pageNum+1,coluAdd);
for(i=0;i<16;i++)
{
if(dispMode)
{
SPLC501_WriteData(*p);
}
else
{
SPLC501_WriteData(~(*p));
}
p++;
}
}
/*********************************************************
显示ASSICC函数
其中:
PageNum= 0,1.......8
coluAdd= 0,1,.........131
dispMode 显示方式.0为反显,1为正显
p为显示数据的指针
*********************************************************/
void ShowASS(unsigned char pageNum,unsigned char coluAdd,bit dispMode,unsigned char *p)
{
unsigned char i;
SetPos(pageNum,coluAdd);
for(i=0;i<8;i++)
{
if(dispMode)
{
SPLC501_WriteData(*p);
}
else
{
SPLC501_WriteData(~(*p));
}
p++;
}
SetPos(pageNum+1,coluAdd);
for(i=0;i<8;i++)
{
if(dispMode)
{
SPLC501_WriteData(*p);
}
else
{
SPLC501_WriteData(~(*p));
}
p++;
}
}
/*********************************************************
显示ClearGrid()函数
其中:
PageNum= 0,1.......8
coluAdd= 0,1,.........131
cleaMode 显示方式.0为全灭,1为全亮
*********************************************************/
void ClearGrid(unsigned char pageNum,unsigned char coluAdd,bit cleaMode)
{
unsigned char i;
SetPos(pageNum,coluAdd);
for(i=0;i<8;i++)
{
if(cleaMode)
{
SPLC501_WriteData(0xff);
}
else
{
SPLC501_WriteData(0x00);
}
}
SetPos(pageNum+1,coluAdd);
for(i=0;i<8;i++)
{
if(cleaMode)
{
SPLC501_WriteData(0xff);
}
else
{
SPLC501_WriteData(0x00);
}
}
}
/*********************************************************
显示ClearPage()函数
其中:
PageNum= 0,1.......8
coluAdd= 0,1,.........131
cleaMode 显示方式.0为全灭,1为全亮
*********************************************************/
void ClearPage(unsigned char pageNum,bit cleaMode)
{
unsigned char i;
SetPos(pageNum,0);
for(i=0;i<128;i++)
{
if(cleaMode)
{
SPLC501_WriteData(0xff);
}
else
{
SPLC501_WriteData(0x00);
}
}
SetPos(pageNum+1,0);
for(i=0;i<128;i++)
{
if(cleaMode)
{
SPLC501_WriteData(0xff);
}
else
{
SPLC501_WriteData(0x00);
}
}
}
//===================================液晶部分结束=============================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -