📄 lcd_1602.c
字号:
#include<c8051f020.h>
#define uint unsigned int
#define uchar unsigned char
/*sbit RS=P4^0;
sbit RW=P4^1;
sbit EN=P4^2;*/
void write_comm(uchar);
void write_data(uchar);
void lcd_delay(uchar,uchar);
void write_string(uchar,uchar,uchar*);
void L1602_init()
{
lcd_delay(10,10);
write_comm(0x38); //显示模式控制:设置16*2显示,5*7点阵,8位数据口
write_comm(0x08); //关显示
write_comm(0x01); //清屏
write_comm(0x06); //输入模式控制:光标右移,整屏不移动
write_comm(0x0f); //开显示,显示光标,光标闪烁
//0x0e,开显示,显示下光标,光标不闪烁
write_comm(0x80);
write_comm(0x02); //数据指针清零
}
void write_comm(uchar Commend_Code)
{
P4&=~0x01;
P4&=~0x02;
P5=Commend_Code;
lcd_delay(10,10);
P4|=0x04;
lcd_delay(100,100);
P4&=~0x04;
}
void write_data(uchar Data)
{
P4|=0x01; //RS=1
P4&=~0x02; //RW=0
P5=Data;
lcd_delay(10,10);
P4|=0x04; //EN=1
lcd_delay(100,100);
P4&=~0x04; //EN=0
}
void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
{
if (row==1)
column |= 0x40; //当要显示第二行时地址码+0x40;
column |= 0x80; // 算出指令码
write_comm(column); //这里不检测忙信号,发送地址码
write_data(Data);
}
void write_string(uchar row,uchar column,uchar *dis_buffer)
{
switch(row) //这种结构保持以后升级到多行显示液晶
{
case 0:write_comm(0x80+column);break;
case 1:write_comm(0x80+0x40+column);break;//重新调整数据地址指针
default:break;
}
while(*dis_buffer!='\0') // '\0'结束符
{
write_data(*dis_buffer);
dis_buffer++;
column++;
if(column==16)
{
column=0;
row++;
if(row>=3)
return;
else
switch(row) //这种结构保持以后升级到多行显示液晶
{
case 0:write_comm(0x80);break;
case 1:write_comm(0x80+0x40);break; //重新调整数据地址指针
default:break;
}
}
}
}
void Cursor_shift(uchar direct,uchar x)
{
uchar i;
for(i=0;i<x;i++)
if(direct=='R')
write_comm(0x14); //光标右移
else if(direct=='L')
write_comm(0x10); //光标左移
}
void Display_shift(uchar direct,uchar x)
{
uchar i;
for(i=0;i<x;i++)
if(direct=='R')
write_comm(0x1c); //显示右移
else if(direct=='L')
write_comm(0x18); //显示左移
}
void lcd_delay(uchar t1,uchar t2)
{
uchar i,j;
for(i=0;i<t1;i++)
for(j=0;j<t2;j++);
}
//==================================================
// 以下为几种清屏命令
//==================================================
void Clear_All()
{
write_comm(0x01); //显示清屏。
write_comm(0x80); //将数据指针
} //设置到第一行的第一个字符
void Clear_Line(uchar line)
{
write_string(line,0," ");
switch(line) //这种结构保持以后升级到多行显示液晶
{
case 1:write_comm(0x80);break; //将数据地址指针定位到第一行
case 2:write_comm(0x80+0x40);break; //将数据地址指针定位到第二行
default: break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -