MCS51单片机使用的STC89C51RC 如何让1602LCD显示字符
1个回答
展开全部
#include "lcd1602.h"
/*--------------------------------------------------------------------
程序名称:延时---12MHz
--------------------------------------------------------------------*/
void Lcd1602Delay(uchar t)
{
uchar a,b,c;
for(c=t;c>0;c--)
for(b=35;b>0;b--)
for(a=2;a>0;a--);
}
/*-------------------LcdWriteCom-------------------*/
//*char lcd子程序*
//功 能:写LCD的指令代码函数
//入口参数:LCD命令
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
/*-------------------------------------------------*/
void LcdWriteCom(uchar com)
{
en=0;
Lcd1602Delay(5);
rs=0;
Lcd1602Delay(5);
rw=0;
Lcd1602Delay(5);
DLCD=com;
Lcd1602Delay(5);
en=1;
Lcd1602Delay(5);
en=0;
}
/*-------------------LcdWriteData-------------------*/
//*char lcd子程序*
//功 能:写LCD显示数据函数
//入口参数:DAT,LCD数据
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
/*--------------------------------------------------*/
void LcdWriteData (uchar date)
{
en=0;
Lcd1602Delay(5);
rs=1;
Lcd1602Delay(5);
rw=0;
Lcd1602Delay(5);
DLCD=date;
Lcd1602Delay(5);
en=1;
Lcd1602Delay(5);
en=0;
}
void LcdPrintfString( uchar *p, uchar posy, uchar posx )
{
uchar k;
if ( posy==1 )
{
LcdWriteCom(0x80+posx);
}
else
{
LcdWriteCom(0x80+0x40+posx);
}
for(k = 0;*(p+k) != '\0';k++)
LcdWriteData(*(p+k));
}
/*--------------------int_lcd------------------*/
//*char lcd子程序*
//功 能:LCD初始化函数
//入口参数:命令
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
// 具体流程查看HD44780(KS0066)的中文数据手册
/*-----------------------------------------------*/
void LcdInit (void)
{
Lcd1602Delay(20);
LcdWriteCom(0x38); //LCD工作方式设置,4位数据接口,2行5*7显示
Lcd1602Delay(10);
LcdWriteCom(0x0c); //LCD显示设置
Lcd1602Delay(10);
LcdWriteCom(0x06); //LCD输入方式设置:读写操作后AC自增1
Lcd1602Delay(10);
LcdWriteCom(0x01); //LCD清屏。。。。在初始化最后要清屏
Lcd1602Delay(10);
}
/**-------------------end file--------------**/
这个是我一直在用的1602驱动。。
/*--------------------------------------------------------------------
程序名称:延时---12MHz
--------------------------------------------------------------------*/
void Lcd1602Delay(uchar t)
{
uchar a,b,c;
for(c=t;c>0;c--)
for(b=35;b>0;b--)
for(a=2;a>0;a--);
}
/*-------------------LcdWriteCom-------------------*/
//*char lcd子程序*
//功 能:写LCD的指令代码函数
//入口参数:LCD命令
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
/*-------------------------------------------------*/
void LcdWriteCom(uchar com)
{
en=0;
Lcd1602Delay(5);
rs=0;
Lcd1602Delay(5);
rw=0;
Lcd1602Delay(5);
DLCD=com;
Lcd1602Delay(5);
en=1;
Lcd1602Delay(5);
en=0;
}
/*-------------------LcdWriteData-------------------*/
//*char lcd子程序*
//功 能:写LCD显示数据函数
//入口参数:DAT,LCD数据
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
/*--------------------------------------------------*/
void LcdWriteData (uchar date)
{
en=0;
Lcd1602Delay(5);
rs=1;
Lcd1602Delay(5);
rw=0;
Lcd1602Delay(5);
DLCD=date;
Lcd1602Delay(5);
en=1;
Lcd1602Delay(5);
en=0;
}
void LcdPrintfString( uchar *p, uchar posy, uchar posx )
{
uchar k;
if ( posy==1 )
{
LcdWriteCom(0x80+posx);
}
else
{
LcdWriteCom(0x80+0x40+posx);
}
for(k = 0;*(p+k) != '\0';k++)
LcdWriteData(*(p+k));
}
/*--------------------int_lcd------------------*/
//*char lcd子程序*
//功 能:LCD初始化函数
//入口参数:命令
//出口参数:无
//返 回:无
//说 明:IO口如此操作,使LCD的程序更具通用性
// 具体流程查看HD44780(KS0066)的中文数据手册
/*-----------------------------------------------*/
void LcdInit (void)
{
Lcd1602Delay(20);
LcdWriteCom(0x38); //LCD工作方式设置,4位数据接口,2行5*7显示
Lcd1602Delay(10);
LcdWriteCom(0x0c); //LCD显示设置
Lcd1602Delay(10);
LcdWriteCom(0x06); //LCD输入方式设置:读写操作后AC自增1
Lcd1602Delay(10);
LcdWriteCom(0x01); //LCD清屏。。。。在初始化最后要清屏
Lcd1602Delay(10);
}
/**-------------------end file--------------**/
这个是我一直在用的1602驱动。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询