📄 lcd_1602.c
字号:
#include<c8051f020.h>
#define uchar unsigned char
#define uint unsigned int
//***************程序说明*******************
// 对字符型液晶显示器定义三根地址线:
// sbit RS=P4^0;sbit RW=P4^1;sbit EN=P4^2;
// 由于P4口在f020单片机上不可位寻址,故以下
// 程序均采用对P4口赋值的形式给三根控制位赋值
//*******************************************
//*******************************************
// 该部分主要是对要用到的函数进行申明
// 后面将具体的对相关函数进行定义,可选择性的选
// 择相关函数
//*******************************************
void Lcd1602_Initial( );
void Lcd1602_Write_Command(uchar Command_Code);
void Lcd1602_Write_Data(uchar row,uchar column,uchar Data);
void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer);
//void Lcd1602_Clear_Char(uchar row,uchar column);
//void Lcd1602_Clear_Line(uchar line);
//void Lcd1602_Clear_All( ); //这三个函数没用
void Lcd_delay(uint t1,t2);
//void Lcd_delay(uint t1,uint t2); 可以写成上面这种方式
//**********************************************
// 功能说明:对字符型液晶显示器LCD1602进行初始化
// 输入变量:无 ; 全局变量:无
// 返回值: 无
// 调用函数:Lcd1602_Write_Command()
//**********************************************
void Lcd1602_Initial( )
{
Lcd1602_Write_Command(0x38);//显示模式设置:0011(数据位8位),1(双行显示)0(5*7点阵)**
Lcd1602_Write_Command(0x0c);//显示开关设置:0000,11(开显示),1(开光标),1(字符闪烁)
Lcd1602_Write_Command(0x01);//清屏显示设置:显示清屏。
Lcd1602_Write_Command(0x06);//输入方式设置:0000,011(光标自左向右移)0(整屏不移动)。
Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
Lcd1602_Write_Command(0x02);//光标复位命令:数据指针清零
Lcd1602_Write_Command(0x0c);//开显示,显示光标,光标闪烁
Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
}
//**************************************************
// 功能说明:对字符型液晶显示器LCD1602写入控制字
// 输入变量:uchar Command_Code ;全局变量:无
// 返回值 :无
// 调用函数 :无
//**************************************************
void Lcd1602_Write_Command(uchar Command_Code)
{
P4=0x00; //RS=0;RW=0;EN=0;开始写入指令
P5=Command_Code; //将待写入指令赋给P5口
Lcd_delay(10,1);
P4=0x04; //NE=1;开启使能
Lcd_delay(10,10);
P4=0x00; //EN=0;当EN由高向底转变时,LCD接收数据或指令
}
//**************************************************
// 功能说明:对字符型液晶显示器LCD1602写入数据
// 输入变量:uchar row,uchar column,uchar Data
// 其中row的取值范围为1~2,column的取值范围为0~15
// 全局变量 :无 ;返回值 : 无
// 调用函数 :Lcd1602_Write_Command()
//**************************************************
void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
{
if (row==2)
column |= 0x40; //当要显示第二行时,相应的地址码为当前列数+0x40;
column |= 0x80; //算出指令码即让DDRAM指针指向相应的位置
Lcd1602_Write_Command(column); //这里不检测忙信号,发送地址码
P4=0x01; //RS=1;RW=0;EN=0;开始写入数据
P5=Data;
Lcd_delay(10,10);
P4=0x05; //EN=1
Lcd_delay(10,10);
P4=0x01; //EN=0
}
//***********************************************************
// 功能说明:写字符串到LCD,如果一行写不下,则写到下一行
// 如果一屏写不下,则只写一屏;
// 输入变量:uchar row,uchar column,uchar *dis_buffer
// 全局变量 :无 ;返回值 : 无
// 调用函数 :Lcd1602_Write_Data();Lcd1602_Write_Command
//***********************************************************
void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer)
{
uchar i=0;
while(dis_buffer[i]!='\0')
{
Lcd1602_Write_Data(row,column,dis_buffer[i]);
i++;column++;
if(column==40)
{
column=1;
row++;
if(row==2)
return;
else
{
switch(row) //这种结构保持以后升级到多行显示液晶
{
case 1:Lcd1602_Write_Command(0x80);break;
case 2:Lcd1602_Write_Command(0x80+0x40);break;//重新调整数据地址指针
default:break;
}
}
}
}
}
//************************************************************
// 功能说明:清除指定的位置的字符,光标返回最左边第一个字符位置
// 输入变量:uchar row,uchar column ;全局变量:无
// 返回值 : 无
// 调用函数 : Lcd1602_Write_String()
//************************************************************
/*void Lcd1602_Clear_Char(uchar row,uchar column)
{
Lcd1602_Write_String(row,column," ");
}*/
//*************************************************************
// 功能说明:清除指定的行,光标返回最左边第一个字符位置
// 输入变量:uchar line ; 全局变量 : 无
// 返回值 : 无
// 调用函数 :Lcd1602_Write_String();Lcd1602_Write_Command()
//*************************************************************
/*void Lcd1602_Clear_Line(uchar line)
{
Lcd1602_Write_String(line,0," ");
switch(line) //这种结构保持以后升级到多行显示液晶
{
case 1:Lcd1602_Write_Command(0x80);break; //将数据地址指针定位到第一行
case 2:Lcd1602_Write_Command(0x80+0x40);break; //将数据地址指针定位到第二行
default: break;
}
}
*/
//**************************************************************
// 功能说明:清屏,并将DDRAM指针指向第一行第一列
// 输入变量:无 ;全局变量: 无 ;返回值:无
// 调用函数:Lcd1602_Write_Command()
//***************************************************************
/*void Lcd1602_Clear_All( )
{
Lcd1602_Write_Command(0x01);//显示清屏。
Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
}
*/
//**************************************************************
// 功能说明:延时
// 输入变量:uint t1,t2 全局变量:无 ;返回值:无
// 调用函数:无
//*************************************************************
//void Lcd_delay(uint t1,uint t2)可以写成下面这种方式
void Lcd_delay(uint t1,t2)
{
uint i,j;
for(i=1;i<t1;i++)
for(j=1;j<t2;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -