📄 lcd_control_ks0107.h
字号:
/******************************************************
函数库名称:LCD_Display.h
库功能:存放了驱动12864-1液晶显示屏的基本函数(ks0107)
库版本:1.0
硬件平台:ATMaga16
作者:Smallbogy congxd@vip.sina.com
日期:2005年6月7日
-------------------------------------------------------
端口说明:
1 vss GND
2 VDD VCC(5v)
3 V0 VCC(5v)
4 D/I PC4
5 R/W PC5
6 E PC3
7 DB0 PA0
...
14 DB7 PA7
15 CS1 PC1
16 CS2 PC2
17 RST PC0
-----------------------------------------------------*/
//功能管脚定义
#define RS PORTC.4
#define RW PORTC.5
#define E PORTC.3
#define CS1 PORTC.1
#define CS2 PORTC.2
#define RST PORTC.0
//命令定义:
#define OpenLCD 0b00111111
#define CloseLCD 0b00111110
#define SetStartLine 0b11000000
#define SetX 0b10111000
#define SetY 0b01000000
//字符变量
#define LEFT 0b11111111
#define RIGHT 0b00000000
/*-----------------------------------------------------
函数说明:
函数名 函数说明
-----------------------------------------------------*/
void Delay(int i); //延时函数
void PortInit(void); //端口初始化
void ReadStateL(void); //读取系统状态(左)
void ReadStateR(void); //读取系统状态(右)
void CheckStateL(void);
void CheckStateR(void);
void LCD_Nop(void); //屏幕周期延时(临时)
void WriteCommandToLeft(unsigned char Commander); //向屏幕送命令
void WriteCommandToRight(unsigned char Commander); //向屏幕送命令
void WriteDataToLeft(unsigned char Datas); //写数据
void WriteDataToRight(unsigned char Datas); //写数据
unsigned char ReadDataToLeft(void); //写数据
void SendByte(unsigned char h,unsigned char l,unsigned char Datas); //根据坐标发送一个字节
void LCD_Init(void); //显示屏初始化
void ClsLeft(unsigned char val); //显示屏清屏
void ClsRight(unsigned char val); //显示屏清屏
void LCDAutoTestLeft(unsigned char val);
void LCDAutoTestRight(unsigned char val);
void LCDAutoTestLeft2(void);
void SetLineLeft(unsigned char line);
void SetLineRight(unsigned char line);
void SetColumnLeft(unsigned char column);
void SetColumnRight(unsigned char column);
void TurnOnLCD(char p); //打开显示屏
void TurnOffLCD(char p); //关闭显示屏
//显示一个8*16的字符
void Show816(unsigned char h,unsigned char l,unsigned char * ch,unsigned char ShowType);
void Show1616(unsigned char h,unsigned char l,unsigned char * ch,unsigned char ShowType);
char BUSYL=1; //系统忙标志
char BUSYR=1;
char BUSY=1;
char ON_OFFR=0; //显示开标志
char ON_OFFL=0;
char ON_OFF=0;
char RSTL=0;
char RSTR=0;
char Now_X=0; //目标位置x
char Now_Y=0; //目标位置y
void LCD_Init(void)
{
PortInit();
RST = 1;
ClsLeft(0x00);
ClsRight(0x00);
TurnOnLCD(LEFT);
TurnOnLCD(RIGHT);
WriteCommandToLeft(0b11000000);
WriteCommandToLeft(0b10111000);
WriteCommandToLeft(0b01000000);
WriteCommandToRight(0b11000000);
WriteCommandToRight(0b10111000);
WriteCommandToRight(0b01000000);
}
void Delay(int i)
{
/******************************************************
函数名:延时子函数
功能描述:延时
输入变量 int i
******************************************************/
char a=0;
int b=0;
for (b=0;b<i;b++)
{
for (a=0;a<255;a++);
}
}
void PortInit(void)
{
/******************************************************
函数名:端口初始化
功能描述:初始化端口
******************************************************/
DDRC=0xff;
PORTC=0x00;
DDRA=0xff;
PORTA=0x00;
}
void LCD_Nop(void)
{
/******************************************************
函数名:屏幕周期等待函数
功能描述:延时,等待屏幕就位(临时使用)
******************************************************/
char i=0;
for (i=0;i<150;i++);
}
void ReadStateL(void)
{
/******************************************************
函数名:显示屏状态读取函数(左)
功能描述: 读取显示屏当前状态
输出变量:BUSYL ON_OFFL RSTL
******************************************************/
BUSYL=1;
ON_OFFL=0;
RSTL=1;
CS2 = 0; //CS2 =0
CS1 = 1; //CS1 =1 选左
DDRA =0x00; //设置为读
RW = 1;
RS = 0;
E = 0; //E拉低L 下降沿送锁存信号
LCD_Nop();
E = 1; //E拉高H 度取状态
BUSYL = PINA.7; //获得第七位数据BUSY
ON_OFFL = PINA.5; //获得现实状态数据ON / OFF
RSTL = PINA.4; //获取复位数据RSTL
DDRA = 0xff; //恢复写数据状态
}
void ReadStateR(void)
{
/******************************************************
函数名:显示屏状态读取函数(右)
功能描述: 读取显示屏当前状态
输出变量:BUSYL ON_OFFL RSTL
******************************************************/
BUSYR=1;
ON_OFFR=0;
RSTR=1;
CS1 = 0;
CS2 = 1;
DDRA =0x00; //设置为读
RW = 1;
RS = 0;
E = 0; //E拉低L 下降沿送锁存信号
LCD_Nop();
E = 1; //E拉高H 度取状态
BUSYR = PINA.7; //获得第七位数据BUSY
ON_OFFR = PINA.5; //获得现实状态数据ON / OFF
RSTR = PINA.4; //获取复位数据RSTL
DDRA = 0xff; //恢复写数据状态
}
void CheckStateL(void)
{
ReadStateL();
while(BUSYL||RSTL){
ReadStateL();
LCD_Nop();
}
}
void CheckStateR(void)
{
ReadStateR();
while(BUSYL||RSTL){
ReadStateR();
LCD_Nop();
}
}
void WriteCommandToLeft(unsigned char Commander)
{
/******************************************************
函数名:屏幕控制函数(左)
功能描述:向屏幕写命令
输入变量 Commander
******************************************************/
CS2 = 0;
CS1 = 1;
CheckStateL();
RS = 0; //D/I拉低L 0
RW = 0;
DDRA = 0xff;
PORTA =Commander; //写命令
E = 1;
E = 0; //下降沿
}
void WriteCommandToRight(unsigned char Commander)
{
/******************************************************
函数名:屏幕控制函数(右)
功能描述:向屏幕写命令
输入变量 Commander
******************************************************/
CS1 = 0;
CS2 = 1;
CheckStateR();
RS = 0; //D/I拉低L 0
RW = 0;
DDRA = 0xff;
PORTA =Commander; //写命令
E = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -