📄 lcd1062.c
字号:
/****************************************************************************
本头文件描述了用89S52/89S51控制液晶显示器1602的一些连接情况,并而编写了些控制
液晶显示的函数.
******************************************************************************/
#include<REG51.H>
#include"lcd1062.h"
/***********************************void wait()*****************************
该函数的作用是对LCD进行检测,看LCD是否处于忙的状态.当bflag=1时表示忙,
此时不可以向LCD进行读写操作.而当bflag=0时,表示可以向它读写数据.
****************************************************************************/
void Wait()
{
DATA=0xff;
RW=1; RS=0; //设LCD为读控制字的状态
do
{E=0;E=1;}while(bflag==1);
}
/**********************************void Wrcom()*******************************
该函数的作用是向LCD写入控制字.
******************************************************************************/
void Wrcom(uchar com)
{
DATA=com;
RW=0; RS=0; //设LCD为写控制字的状态
E=0; E=1;
Wait();
}
/**************************************void Disdata()*******************************
该函数的作用是向LCD写入数据并显示出来.
***********************************************************************************/
void Disdata(uchar dat)
{
DATA=dat;
RW=0; RS=1; //设LCD为写数据的状态
E=0; E=1;
Wait();
}
/***************************************void Init_LCD()*******************************
该函数的作用是初始化LCD.
*****************************************************************************************/
void Init_LCD()
{
Wrcom(0x01); //清屏
Wrcom(0x0c); //开显示,关光标及闪烁
Wrcom(0x06); //文字不动,光标右移
Wrcom(0x3c); //8位,两行,5*10点阵
}
/****************************************************************************
该函数能定位光标到指定的位置,并选择是否要闪烁
****************************************************************************/
void Dis_cursor(uchar row,uchar line)
{
Wrcom(0x0d); //开显示,闪烁、不开光标
//Wrcom(0x0e); //开显示、光标、不闪烁
//Wrcom(0x0f); //开显示、光标、闪烁
if(row==1)
{
Wrcom(0x80+line-1);
}
else
{
Wrcom(0xc0+line-1);
}
}
/****************************************void Disdatastring()********************************
该函数的作用是向LCD写入一串数据,并把数据串显示出来. 先行再列,列不能为0,行下边的为0
********************************************************************************************/
void Dis_string(uchar line,uchar row,uchar dat[])
{
uchar com,*s;
s=dat;
if(line==1)
{
com=0x80+row-1; //把数据写到第一行
Wrcom(com);
while(*s!='@'&&com<=0x8f) //写入数据串
{
Disdata(*s);
com++;
s++;
}
}
else
{com=0xc0+row-1; //把数据写入第二行
Wrcom(com);
while(*s!='@'&&com<=0xcf) //写入数据串
{
Disdata(*s);
com++;
s++;
}
}
}
/****************************************void Disdatastring()********************************
该函数的作用是向LCD写入一个浮点数,并把数据显示出来.
********************************************************************************************/
void Dis_float(uchar line,uchar row,float dat)
{
uchar dat1[9],i=0,com;
uint temp1;
uint temp2;
if(dat>0)
{
dat1[0]='+';
temp2=((ulong)(dat*1000))%1000;
temp1=(uint)dat;
}
else
{
dat1[0]='-';
temp2=(ulong)(-dat*1000)%1000;
temp1=(uint)(-dat);
}
dat1[1]=(temp1/1000)%10+'0';
dat1[2]=(temp1/100)%10+'0';
dat1[3]=(temp1/10)%10+'0';
dat1[4]=temp1%10+'0';
dat1[5]='.';
dat1[6]=(temp2/100)%10+'0';
dat1[7]=(temp2/10)%10+'0';
dat1[8]=temp2%10+'0';
if(line==1)
{
com=0x80+row-1; //把数据写到第一行
Wrcom(com);
while(i<=8&&com<=0x8f) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
else
{
com=0xc0+row-1; //把数据写入第二行
Wrcom(com);
while(i<=8&&com<=0xcf) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
}
/****************************************void Disdatastring()********************************
该函数的作用是向LCD写入一个8位的整数,并把数据显示出来.
********************************************************************************************/
void Dis_char(uchar line,uchar row,char dat)
{
uchar dat1[4],i=0,com;
if(dat&0x80)
{
dat1[0]='-';
dat=~dat+1;
}
else
dat1[0]='+';
dat1[1]=dat/100+'0';
dat1[2]=(dat/10)%10+'0';
dat1[3]=dat%10+'0';
if(line==1)
{
com=0x80+row-1; //把数据写到第一行
Wrcom(com);
while(i<=3&&com<=0x8f) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
else
{
com=0xc0+row-1; //把数据写入第二行
Wrcom(com);
while(i<=3&&com<=0xcf) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
}
/****************************************void Disdatastring()********************************
该函数的作用是向LCD写入一个16位整数,并把数据显示出来.
********************************************************************************************/
void Dis_int(uchar line,uchar row,int dat)
{
uchar dat1[6],i=0,com;
if(dat&0x8000)
{
dat1[0]='-';
dat=~dat+1;
}
else
dat1[0]='+';
dat1[1]=dat/10000+'0';
dat1[2]=(dat/1000)%10+'0';
dat1[3]=(dat/100)%10+'0';
dat1[4]=(dat/10)%10+'0';
dat1[5]=dat%10+'0';
if(line==1)
{
com=0x80+row-1; //把数据写到第一行
Wrcom(com);
while(i<=5&&com<=0x8f) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
else
{
com=0xc0+row-1; //把数据写入第二行
Wrcom(com);
while(i<=5&&com<=0xcf) //写入数据串
{
Disdata(dat1[i]);
com++;
i++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -