51单片机常用头文件LCD1602.docx

上传人:b****1 文档编号:19075484 上传时间:2023-04-24 格式:DOCX 页数:10 大小:17.71KB
下载 相关 举报
51单片机常用头文件LCD1602.docx_第1页
第1页 / 共10页
51单片机常用头文件LCD1602.docx_第2页
第2页 / 共10页
51单片机常用头文件LCD1602.docx_第3页
第3页 / 共10页
51单片机常用头文件LCD1602.docx_第4页
第4页 / 共10页
51单片机常用头文件LCD1602.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

51单片机常用头文件LCD1602.docx

《51单片机常用头文件LCD1602.docx》由会员分享,可在线阅读,更多相关《51单片机常用头文件LCD1602.docx(10页珍藏版)》请在冰豆网上搜索。

51单片机常用头文件LCD1602.docx

51单片机常用头文件LCD1602

自制51单片机常用头文件(LCD1602)

C512008-09-2420:

11:

05阅读946评论0  字号:

大中小 订阅

/*--------------------------------------------------------------------------

LCD1602.H

TheuserfunctionisC51.

Copyright(c)1988-2004KeilElektronikGmbHsumzhaojun

Allrightsreserved.

--------------------------------------------------------------------------*/

#ifndef__LCD1602_H__

#define__LCD1602_H__

/*连接线图:

---------------------------------------------------

|LCM-----51 |LCM-----51  | LCM------51    |

|-----------------------------------------------|

|DB0-----P0.0|DB4-----P0.4|RS-------P2.0    |

|DB1-----P0.1|DB5-----P0.5|RW-------P2.1    |

|DB2-----P0.2|DB6-----P0.6|E--------P2.2    |

|DB3-----P0.3|DB7-----P0.7|VLCD接1K电阻到GND|

---------------------------------------------------*/

/****************** LCD1602指令 ***********************************/

//输入方式设置

#defineLCD_AC_AUTO_INCREMENT    0x06  //数据读、写操作后,AC自动增一

#defineLCD_AC_AUTO_DECREASE     0x04  //数据读、写操作后,AC自动减一

#defineLCD_MOVE_ENABLE          0x05  //数据读、写操作,画面平移

#defineLCD_MOVE_DISENABLE       0x04  //数据读、写操作,画面不动

#defineLCD_GO_HOME              0x02  //AC=0,光标、画面回HOME位

//设置显示、光标及闪烁开、关

#defineLCD_DISPLAY_ON           0x0C  //显示开

#defineLCD_DISPLAY_OFF          0x08  //显示关

#defineLCD_CURSOR_ON            0x0A  //光标显示

#defineLCD_CURSOR_OFF           0x08  //光标不显示

#defineLCD_CURSOR_BLINK_ON      0x09  //光标闪烁

#defineLCD_CURSOR_BLINK_OFF     0x08  //光标不闪烁

//光标、画面移动,不影响DDRAM

#defineLCD_LEFT_MOVE            0x18  //LCD显示左移一位

#defineLCD_RIGHT_MOVE           0x1C  //LCD显示右移一位

#defineLCD_CURSOR_LEFT_MOVE     0x10  //光标左移一位

#defineLCD_CURSOR_RIGHT_MOVE    0x14  //光标右移一位

//工作方式设置

#defineLCD_DISPLAY_DOUBLE_LINE  0x38  //两行显示

#defineLCD_DISPLAY_SINGLE_LINE  0x30  //单行显示

#defineLCD_CLEAR_SCREEN         0x01  //清屏

/***********************LCD1602地址相关******************************/

#defineLINE1_HEAD               0x80  //第一行DDRAM起始地址

#defineLINE2_HEAD               0xc0  //第二行DDRAM起始地址

#defineLINE1                    0     //第一行

#defineLINE2                    1     //第二行

#defineLINE_LENGTH              8     //每行的最大字符长度

/***********************LCD1602接线引脚定义**************************/

#defineLCM_RS                   P2_0  //数据/命令选择信号

#defineLCM_RW                   P2_1  //读/写选择信号

#defineLCM_E                    P2_2  //使能信号

#defineLCM_Data                 P0    //显示数据端口

#defineBusy                     0x80  //用于检测LCM状态字中的Busy标识

#defineucharunsignedchar

#defineuintunsignedint

//================================LCM1602控制部分=========================================================

/*****************************************************

 函数名:

voidDelay_LCD(void)

 功   能:

5ms延时

 说   明:

LCD显示延时

 入口参数:

 返回值:

无 

 *****************************************************/

voidDelay_LCD(void)

{

  uintTempCyc=5552;//放入延时数据

while(TempCyc--)

 {

  ;

 }

}

/*****************************************************

 函数名:

ucharReadStatusLCM()

 功   能:

读忙状态

 说   明:

判断LCM的工作状态;也可以不用此函数,用一段延时程序代替

 入口参数:

 返回值:

LCM_Data 

 *****************************************************/

//读状态

ucharReadStatusLCM(void)

{

 LCM_Data=0xFF;        //LCM数据口先置1

LCM_RS=0;

 LCM_RW=1;

 LCM_E=0;

 LCM_E=0;

 LCM_E=1;

while(LCM_Data&Busy) //检测忙信号.如果忙,则不执行

 {

  ;

 }

return(LCM_Data);      //不忙返回读取数据

}

/*****************************************************

 函数名:

voidWriteDataLCM()

 功   能:

向LCM1602中写入数据

 说   明:

将形参WDLCM中的数据写入LCM中

 入口参数:

WDLCM

 返回值:

无 

 *****************************************************/

//写数据

voidWriteDataLCM(ucharWDLCM)

{

 ReadStatusLCM(); //检测忙

LCM_Data=WDLCM;//写入数据到LCM

LCM_RS=1;

 LCM_RW=0;

 LCM_E=0;       //若晶振速度太高可以在这后加小的延时

 LCM_E=0;       //延时

 LCM_E=1;

}

/*****************************************************

 函数名:

voidWriteCommandLCM()

 功   能:

向LCM1602中写入指令

 说   明:

向LCM中写入指令;如果BuysC=0时,忽略忙检测,如果BuysC=1时,不忽略忙检测

 入口参数:

WCLCM,BuysC

 返回值:

无 

 *****************************************************/

//写指令

voidWriteCommandLCM(ucharWCLCM,BuysC)//BuysC为0时忽略忙检测

{

 if(BuysC)

 {

  ReadStatusLCM();               //根据需要检测忙

 }

LCM_Data=WCLCM;                  //写入指令

LCM_RS=0;

 LCM_RW=0;

 LCM_E=0;

 LCM_E=0;

 LCM_E=1;

}

/*****************************************************

 函数名:

voidLCMInit()

 功   能:

初始化LCM1602

 说   明:

LCM在工作前先要对显示屏初始化,否则模块无法正常工作

 入口参数:

 返回值:

无 

 *****************************************************/

//LCM初始化

voidLCMInit(void)

{

 LCM_Data=0;

 WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);//三次显示模式设置,不检测忙信号

 Delay_LCD();

 WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);//0x38指令表示:

8位数据显示模式,俩行多显示

 Delay_LCD();

 WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);

 Delay_LCD();

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,1);//显示模式设置,开始要求每次检测忙信号

 WriteCommandLCM(LCD_DISPLAY_OFF,1);        //关闭显示

 WriteCommandLCM(LCD_CLEAR_SCREEN,1);       //显示清屏

 WriteCommandLCM(LCD_AC_AUTO_INCREMENT,1);  //显示光标移动设置

 WriteCommandLCM(LCD_DISPLAY_ON,1);         //显示开及光标设置

}

/*****************************************************

 函数名:

voidDisplayOneChar()

 功   能:

按指定坐标中写入数据

 说   明:

X-横坐标,Y-纵坐标,DData为ASCII值

 入口参数:

X,Y,DData

 返回值:

无 

 *****************************************************/

//按指定位置显示一个字符

voidDisplayOneChar(ucharX,ucharY,ucharDData)

{

 Y&=0x01;

 X&=0x0F;             //限制X不能大于15,Y不能大于1

if(Y)

  {

  X|=LINE2_HEAD; //当要显示第二行时地址码:

0xc0

  }

X|=LINE1_HEAD;       //第一行的地址码:

0x80

 WriteCommandLCM(X,0); //这里不检测忙信号,发送地址码

 WriteDataLCM(DData);

}

/*在LCD1602中使用此函数,在DIPS082中使用下面的函数

/*****************************************************

 函数名:

voidDisplayListChar(ucharx,uchary,uchar*DData)

 功   能:

向指定坐标中写入字符串(在LCD1602中使用此函数)

 说   明:

X-横坐标,Y-纵坐标

 入口参数:

X,Y,*DData

 返回值:

无 

 *****************************************************

//按指定位置显示字符串

voidDisplayListChar(ucharx,uchary,uchar*DData)

{

 if(y==LINE1)                                     //判断是否写入第1行

   {

     if(x

     { 

        WriteCommandLCM(LINE1_HEAD+x,0);            //写入第1行地址

for(; x

='\0'; x++)

        {

          WriteDataLCM(*(DData++));               //写入数据

        }

if(*DData!

='\0')                          //判断数据是否写完

        {

       x=0;                                  //没写完写入第2行

    y=LINE2;

     }

     }

   }

if(y==LINE2)                                     //判断是否写入第2行

   {

    WriteCommandLCM(LINE2_HEAD+x,0);                //写入第2行地址

for(;x

='\0';x++)        //判断数据是否写完

     {

        WriteDataLCM(*(DData++));                   //写入数据

     }

   }

}*/

/*****************************************************

 函数名:

voidDisplayListChar(ucharX,ucharY,ucharcode*DData)

 功   能:

向指定坐标中写入字符串(在DIPS082中使用此的函数)

 说   明:

X-横坐标,Y-纵坐标

 入口参数:

X,Y,*DData

 返回值:

无 

 *****************************************************/

//按指定位置显示一串字符 ***原来的遇到空格0x20就不显示***

voidDisplayListChar(ucharX,ucharY,ucharcode*DData)

{

  ucharListLength,j;

ListLength=strlen(DData);               //strlen:

读取字符串的长度

  Y&=0x1;

  X&=0xF;                                 //限制X不能大于15,Y不能大于1

     

 if(X<=0x0F)                            //X坐标应小于0xF

   {

  for(j=0;j

  {

           DisplayOneChar(X,Y,DData[j]);   //显示单个字符

           X++;                              //横坐标加1,纵坐标不变

       }

 }

}

/*****************************************************

 函数名:

voidMychar()

 功   能:

自定义字符--CGRAM

 说   明:

LCM1602字符库中没有温度符号,自定义温度符号

 入口参数:

 返回值:

/*****************************************************/

voidMychar(void)

{

//---------自定义字符代码--00H------闹铃符号-------------

 WriteCommandLCM(0x40,1);//第1行  

 WriteDataLCM(0x01);//              

 WriteCommandLCM(0x41,1);//第2行  

 WriteDataLCM(0x1b);//              

 WriteCommandLCM(0x42,1);//第3行   

 WriteDataLCM(0x1d);//              

 WriteCommandLCM(0x43,1);//第4行   

 WriteDataLCM(0x19);//              

 WriteCommandLCM(0x44,1);//第5行   

 WriteDataLCM(0x1d);//              

 WriteCommandLCM(0x45,1);//第6行   

 WriteDataLCM(0x1b);//              

 WriteCommandLCM(0x46,1);//第7行  

 WriteDataLCM(0x01);//

 WriteCommandLCM(0x47,1);//第8行  

 WriteDataLCM(0x00);//

//---------自定义字符代码--01H-------温度符号------------

 WriteCommandLCM(0x48,1);//第1行  

 WriteDataLCM(0x02);//              

 WriteCommandLCM(0x49,1);//第2行  

 WriteDataLCM(0x05);//              

 WriteCommandLCM(0x4a,1);//第3行   1------**--

 WriteDataLCM(0x05);//              2----**--**

 WriteCommandLCM(0x4b,1);//第4行   3----**--**

 WriteDataLCM(0x02);//              4------**--

 WriteCommandLCM(0x4c,1);//第5行   5----------

 WriteDataLCM(0x00);//              6----------

 WriteCommandLCM(0x4d,1);//第6行   7----------

 WriteDataLCM(0x00);//              8----------

 WriteCommandLCM(0x4e,1);//第7行  

 WriteDataLCM(0x00);//

 WriteCommandLCM(0x4f,1);//第8行  

 WriteDataLCM(0x00);//

 //---------自定义字符代码--02H-------当前时间------------

 WriteCommandLCM(0x50,1);//第1行  

 WriteDataLCM(0x1f);//              

 WriteCommandLCM(0x51,1);//第2行  

 WriteDataLCM(0x11);//              

 WriteCommandLCM(0x52,1);//第3行 

 WriteDataLCM(0x15);//              

 WriteCommandLCM(0x53,1);//第4行 

 WriteDataLCM(0x11);//              

 WriteCommandLCM(0x54,1);//第5行   

 WriteDataLCM(0x1b);//              

 WriteCommandLCM(0x55,1);//第6行   

 WriteDataLCM(0x0a);//             

 WriteCommandLCM(0x56,1);//第7行  

 WriteDataLCM(0x1f);//

 WriteCommandLCM(0x57,1);//第8行  

 WriteDataLCM(0x00);//

//-----------------------------------------------

}

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1