📄 1602drive.h
字号:
/*********************************************************/
//1602液晶驱动程序(H)
//
//
/********************************************************/
#ifndef _LCD1602_H_
#define _LCD1602_H_
//*******************************************************
//根据需要定义液晶IO口
/*
#ifdef _1602PIN_
#define RS P2^7 // (黑)
#define R_W P2^6 //(白)
#define E P2^5 // (灰)
#define DATA P0
#endif
*/
sbit RS = P3^5;
sbit R_W = P3^6;
sbit E = P3^7;
#define DATA P2
//为了编程方便定义的位变量
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
/*************************************************************
******************声明LCD的有关函数***************************
*************************************************************/
void LCDdelay(unsigned char count);
void WriteInstruction(unsigned char );
void CheckBusy(void);
void WriteData(unsigned char aa );
void LCDInitial(void);
void Modify(unsigned char position);
void ClrLCD(void);
void WriteDatas(void);
void Writeonedata(unsigned char lcd_addr,unsigned char dat);
/*********************************************************************
函数名称: LCDInitial()
函数功能: 液晶初始化
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
/*******************************************************/
//INITIAL 初始化子程序
//设定液晶模块的工作方式 数据长度:8位 DL=1
// 显示行数:2行 N=1
// 点阵字型:5x7 F=0 则为function set=38H
//设定液晶模块的显示方式 显示器开关:开 D=1
// 光标开关: 开 C=1
// 光标闪烁: 不闪 B=0 则为display on/off control=0EH
//设定液晶模块的进入方式 画面不动: S=0
// 光标右移 I/D=1 则为enter mode set=06H
///*****************************************************/
void LCDInitial(void)
{
WriteInstruction(0x38);
WriteInstruction(0x08);
WriteInstruction(0x01);
WriteInstruction(0x0e);
WriteInstruction(0x06);
}
/*********************************************************************
函数名称: LCDdelay延时子程序
函数功能: 检测液晶状态时,给液晶延时
输入参数: count
输出参数: 无
返回值: 无
*********************************************************************/
void LCDdelay(unsigned char count)
{
unsigned char i;
while(count--!=0)
{
for(i=20;i>0;i--)
{
;
}
}
}
/*********************************************************************
函数名称: CHECK_BUSY
函数功能: 读忙子程序
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void CheckBusy(void)
{
E=0; //Disable LCD
R_W=1; //
RS=0; //Read Instruction Register
E=1; //enable LCD
ACC=DATA;
if(a7==1)
{
ACC=DATA; //check LCD is busy or not
}
E=0; //Disable LCD
LCDdelay(20);
}
/*********************************************************************
函数名称: WRITE_INSTRUCTION
函数功能: 写指令寄存器子程序,将ACC中的数据写到相应地址的指令寄存器中
输入参数: aa(指令代码)
输出参数: 无
返回值: 无
*********************************************************************/
void WriteInstruction(unsigned char aa)
{
CheckBusy();
E=0;
R_W=0;
RS=0;
E=1;
DATA =aa;
E=0;
}
/*********************************************************************
函数名称: WRITE_DATA
函数功能: 写数据寄存器子程序,将ACC中的数据写到数据寄存器中
输入参数: aa(数据)
输出参数: 无
返回值: 无
*********************************************************************/
void WriteData(unsigned char aa )
{
CheckBusy();
E=0;
R_W=0;
RS=1;
E=1;
DATA=aa;
E=0;
}
/*********************************************************************
函数名称: ClrLCD
函数功能: 将液晶清屏
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void ClrLCD(void)
{
WriteInstruction(0x01);
}
/*********************************************************************
函数名称: WriteDatas
函数功能: 写数据流子程序
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
#ifdef _1602DATAS_
void WriteDatas(void)
{
unsigned char b;
WriteInstruction(0x80); //Write Datas in line 1
for(b=0;b<16;)
{
WriteData(ram1[b]);
b++;
}
WriteInstruction(0xc0); //Write Datas in line 2
for(b=0;b<16;)
{
WriteData(ram2[b]);
b++;
}
}
#endif
/*********************************************************************
函数名称: Writeonedata
函数功能: 给液晶写一个数据
输入参数: lcd_addr(液晶显示地址),dat(液晶显示数据,ASCII码)
输出参数: 无
返回值: 无
*********************************************************************/
void Writeonedata(unsigned char lcd_addr,unsigned char dat)
{
WriteInstruction(lcd_addr);
WriteData(dat);
}
/*********************************************************************
函数名称: Modify
函数功能: 液晶修改子程序
输入参数: position(修改地址)
输出参数: 无
返回值: 无
*********************************************************************/
#ifdef _1602MODIFY_
void Modify(unsigned char position)
{
WriteInstruction(0x0f); // 显示 光标开 光标闪烁 0x0f
WriteInstruction(position); //
}
#endif
#endif
/*********************************************************************
end of file
**********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -