📄 lcd1602.h
字号:
#define uchar unsigned char
#define uint unsigned int
#define delay5ms() Delayms(5 ms)
sfr lcdport=0x80;
//unsigned char xdata * lcdport=(unsigned char xdata *)0x8000;//使用指针
//unsigned char xdata lcdport _at_ 0x8000;//使用绝对变量
//#define lcdport 0x8000;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
void writecmd(uchar cmd,uchar i);//写入命令rs=0,rw=0 E高脉冲有效
void writedata(uchar ddata);//写入数据rs=1,rw=0 E高脉冲有效
uchar rdsta();//读取状态信息,rs=0,rw=1,e=1
uchar rddata();//读取数据,rs=1,rw=1,e=1
void Lcd_Initial();//初始化液晶显示器
void locatexy(uchar px,uchar py);//定位光标到x,y处
void row00(uchar y);//y行清空,显示空白
void one_displ(uchar x,uchar y,uchar ddata);//显示一个字符
void Lcd_Puts(uchar x,uchar y,uchar str[]);//从x,y处开始显示字符串以'/0'结尾,若字符长度过长则有覆盖现象
void Lcd_Initial()//初始化液晶显示器
{
delay5ms();delay5ms();delay5ms();//延时15ms
writecmd(0x38,0);//写38H指令
delay5ms();
writecmd(0x38,0);//写38H指令
delay5ms();
writecmd(0x38,0);//写38H指令
delay5ms();
writecmd(0x38,1);//显示模式设置
writecmd(0x08,1);//关显示
writecmd(0x01,1);//清屏
writecmd(0x06,1);//光标移动设置
writecmd(0x0c,1);//开显示,光标闪烁
}
void writecmd(uchar cmd,uchar i)//写入命令
{
if(i)while(rdsta()&0x80);//读忙判断,忙,等
lcdport=cmd;//写命令
RS=0;
RW=0;
E=0;
_nop_();
E=1;//E高脉冲有效
_nop_();
lcdport=0xff;
E=0;
}
void writedata(uchar ddata)//写入数据rs=1,rw=0 E高脉冲有效
{
while(rdsta()&0x80);//读忙等待
lcdport=ddata;//写数据
RS=1;
RW=0;
E=0;
_nop_();
E=1;//E高脉冲有效
_nop_();
E=0;
lcdport=0xff;
}
uchar rdsta()//读取状态信息,rs=0,rw=1,e=1
{
uchar temp;
lcdport=0xff;
RS=0;
RW=1;
E=1;
temp=lcdport;
//E=0;
return temp;
}
uchar rddata()//读取数据,rs=1,rw=1,e=1
{
uchar temp;
while(rdsta()&0x80);//读忙等待
lcdport=0xff;
RS=1;
RW=1;
E=1;
temp=lcdport;
//E=0;
return temp;
}
void Lcd_Clr()//清屏
{
writecmd(0x01,1);//清屏
}
void one_displ(uchar x,uchar y,uchar ddata)//显示一个字符
{
if((x>15)||(y>1))return;//坐标错误,不显示
locatexy(x,y);//定位光标
writedata(ddata);//写数据
}
void locatexy(uchar px,uchar py)//定位光标到x,y处
{
uchar addr;
addr=px&0x0f;
if(py)addr=addr|0x40;
addr|=0x80;
writecmd(addr,1);//写入光标地址
}
void row00(uchar y)//y行清空,显示空白
{
uchar i;
for(i=0;i<16;i++)
{
one_displ(i,y,0x20);
}
}
void Lcd_Puts(uchar x,uchar y,uchar str[])//从x,y处开始显示字符串以'/0'结尾,若字符长度过长则有覆盖现象
{
uchar i,j;
for(i=0;str[i]!=0x00;++i)
{
one_displ(x++,y,str[i]);
if(x==16)//行满
{
for(j=0;j<100;j++)delay5ms();//延时500ms
x=0;
y=y^0x01;//换行
if(str[i+1]!=0x00)row00(y);//此行清空
}
}
}
void Lcd_Putint(unsigned char x,unsigned char y,unsigned char i,unsigned int num)
//x y为起始坐标,num是要显示的数,i是要显示的位数
{
unsigned char bcd[8];
unsigned int temp;
bcd[i--]=0x00;
temp=num;
for(;(i>=0)&&(i<8);i--)
{
bcd[i]=temp%10+0x30;
temp=temp/10;
}
Lcd_Puts(x,y,bcd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -