新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机的1602驱动程序

51单片机的1602驱动程序

作者: 时间:2016-12-01 来源:网络 收藏

/*************************************
函数名:lcdwcmd
函数功能:向1602中写指令
参数:cmd(命令)
返回:无
备注:无
*************************************/
void lcdwcmd(uchar cmd)
{
  while(lcdbusy());
  RSlcd=0;
  RWlcd=0;
  EPlcd=0;
  _nop_();
  _nop_();
  P0=cmd;
  delaynop();
  EPlcd = 1;
  delaynop();
  EPlcd = 0;
}
/*************************************
函数名:lcdwdat
函数功能:向1602中写数据
参数:dat(数据)
返回:无
备注:无
*************************************/
void lcdwdat(uchar dat)
{
  while(lcdbusy());
  RSlcd=1;
  RWlcd=0;
  EPlcd=0;
  P0=dat;
  delaynop();
  EPlcd=1;
  delaynop();
  EPlcd=0;
}
/*************************************
函数名:lcdprc
函数功能:写一个字符
参数:zifu(字符)
返回:无
备注:无
*************************************/
void lcdprc(uchar zifu)
{
  lcdwdat(zifu);
}
/*************************************
函数名:lcdprs
函数功能:写字符串
参数:zifu(字符)
返回:无
备注:无
*************************************/
void lcdprs(uchar *string)
{
  while(*string)
  {lcdwdat(*string);string++;}
}
/*************************************
函数名:lcdclear
函数功能:清屏
参数:无
返回:无
备注:无
*************************************/
void lcdclear(void)
{
  lcdwcmd(0x01);
}
/*************************************
函数名:lcdenter
函数功能:软复位
参数:无
返回:无
备注:无
*************************************/
void lcdenter(void)
{
  lcdwcmd(0x2);
}
/*************************************
函数名:lcdsetxs
函数功能:显示设置
参数:d(显示)c(光标)b(闪烁)
返回:无
备注:d=1(开显示),d=0(关显示)
c=1(显示光标),c=0(不显示光标)
b=1(光标闪烁),b=0(不闪烁)
*************************************/
void lcdsetxs(bit D,bit C,bit B)
{
  unsigned char order;
  order=0x8;
  if(D)
    order=order+0x4;
  if(C)
    order=order+0x2;
  if(B)
    order=order+0x1;
  lcdwcmd(order);
}
/*************************************
函数名:lcdsetim
函数功能:左右移动
参数:I_D(地址指针), S(整行移动)
返回:无
备注:I_D=1(光标右移),I_D=0(光标左移)
S=1(整行左右移),S=0(整行不动)
*************************************/
void lcdsetim(bit I_D,bit S)
{
  unsigned char order;
  order=0x4;
  if(I_D)
    order=order+0x2;
  if(S)
    order=order+0x1;
  lcdwcmd(order);
}

本文引用地址:https://www.eepw.com.cn/article/201612/324086.htm

/*************************************
函数名:lcdinit
函数功能:初始化
参数:无
返回:无
备注:无
*************************************/
void lcdinit()
{

  lcdwcmd(0x38);
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdwcmd(0x38);
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdwcmd(0x38);
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  lcdsetxs(1,0,0);//设置输入模式,默认增量方式,画面不动,光标向右边移动
  lcdsetim(1,0);
  lcdwcmd(0x01);//清屏
}

/*************************************
函数名:lcdsetxy
函数功能:坐标设置
参数:x(列数),y(行数)
返回:无
备注:配合lcdxyprc,lcdxyprs函数使用
列数小于39,行数小于2
*************************************/
void lcdsetxy(uchar X,uchar Y)
{
uchar Address;
if(X>39)
   X=39;
if (Y == 0)
 {
  Address = 0x80 + X;
}
else
 {
 Address = 0xc0 + X;
 }
lcdwcmd(Address);
}



评论


技术专区

关闭