专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

LCD1602.h和LCD1602.c文件下载(51单片机液晶驱动)

作者:huqin   来源:本站原创   点击数:  更新时间:2014年08月16日   【字体:

LCD1602.c文件的内容(这个一个完善的用51单片机实现1602液晶屏驱动文件带protues仿真文件):
完整的程序源码和仿真文件下载: http://www.51hei.com/f/TLC1543c51.rar

 /*----File Description----

-  File Name              : LCD1602.h
-  Functions              : 
-  Description            : None
                            
-  Author                 : Mason    别名:小菜
-  Create Date            : 2013/7/25 
-  Performance            : Finished
-  Global Variable        : None
-  File static Variable   : None
-  -------------------------------------------
-  Revision History
-  No.    Date        Revised by    Item    Description
-  
-------------------------------------------------------------------------*/
/*----------------------------Head---------------------------------------*/
#include "LCD1602.h"
#include "delay.h"
/*----------------------------Code---------------------------------------*/

// LCD1602上电后初使化
void LCD1602_Init(void)
{
    delayms(50);                // 上电延时50ms.
    write1602_byte(0x3c,0);     // 功能设置:双行、8位数据接口、5*10点阵字符.
    while(Read1602_BF());       // 读取1602的繁忙状态(Busy Flag),直至空闲。
    write1602_byte(0x0c,0);     // 显示开关:开;光标显示:关;闪烁控制:关;
    while(Read1602_BF());       // 读取1602的繁忙状态(Busy Flag),直至空闲。
    write1602_byte(0x06,0);     // 操作后,AC自增,画面不动。
    while(Read1602_BF());       // 读取1602的繁忙状态(Busy Flag),直至空闲。
    write1602_clear();
    CursorRST_1602();           // 光标复位,但DDRAM内容不变
}

/*----Function Description----
-  Function Name           : write1602_byte(uchar dat,bit RorS)
-  Description             : 发送一个字节数据
-  Return Code             : None
-  Parameters/Arguments    : dat 是一个字节数据,RorS 指定 dat 是数据还是指令
-  Global Variable         : None
-  static Variable         : None
-------------------------------------------------------------------------*/
void write1602_byte(uchar dat,bit RorS)
{
    RW_1602 = 0;            // 写
    EN_1602 = 0;
    delayus(10);            // 数据建立时间,需大于1us.这里延时25us.
if(RorS) RS_1602 = 1;     // dat is a data.
else RS_1602 = 0;     // dat is a command.
    EN_1602 = 1;            // 使能脉冲需大于450ns。
    DP_1602 = dat;          // 整个使能周期需大于1ms。
    delayus(10);            // 延时25us
    EN_1602 = 0;
    delayms(1);             // 指令执行时间,需大于40us.这里延时1ms.
}

/*----Function Description----
-  Function Name           : bit Read1602_BF(void)
-  Description             : 判断1602指令执行状态。
-  Return Code             : BF(busy flag),BF = 1 : busy. 
-  Parameters/Arguments    : None
-  Global Variable         : None
-  static Variable         : None
-------------------------------------------------------------------------*/
bit Read1602_BF(void)       // 读取1602的空闲状态(Busy Flag)
{
    RW_1602   = 1;          // 读
    RS_1602   = 0;
    delayus(50);            // 延时100us,这里的延时需大于   
    DP_1602 <<= 1;          // 读指令最大执行时间40us.
    return CY;              // 将BF位移至CY位并返回.
}

void write1602_clear(void)
{
    write1602_byte(CLRLCD1602,0);   // 发送清屏指令。
    delayms(50);                    // 延时需大于15.2ms,这里延时50ms    
}

void CursorRST_1602(void)           // 光标复位,但DDRAM内容不变
{
    write1602_byte(CURRST1602,0);   // 发送清屏指令。
    delayms(50);                    // 延时需大于15.2ms,这里延时50ms    
}

/*----Function Description----
-  Function Name           : write1602_DDRAM_pos(uchar px,uchar py)
-  Description             : DDRAM 为显示数据存储器。本函数更改指向DDRAM
                             的指针AC。
-  Return Code             : None 
-  Parameters/Arguments    : py : row . 0 : First row . 1 : Second row .
                             px : 从左至右分别为 0 ~ 15 .
-  Global Variable         : None
-  static Variable         : None
-------------------------------------------------------------------------*/
void write1602_DDRAM_pos(uchar px,uchar py)
{
    if(py){
        write1602_byte( px|0x80 + 0x40 , 0 );    
    }else{
        write1602_byte( px|0x80 , 0 );    
    }    
}


/*----Function Description----
-  Function Name           : write1602_CGRAM(uchar dat[8],uchar add)
-  Description             : 将一个字符(8个字节的数组)写入 CGRAM。
-  Return Code             : None 
-  Parameters/Arguments    : uchar dat[8]为字符数组。
                             uchar add 为自定义字符的访问地址,取值应在 0~7. 
-  Global Variable         : None
-  static Variable         : None
-------------------------------------------------------------------------*/
void write1602_CGRAM(uchar dat[8],uchar add)
{
    uchar temp;
    add %= 8;                               // 数据有效性处理
    for(temp=0;temp<8;temp++)
    {   
        write1602_byte( add<<3|0x40+temp , 0 );    // 写 CGRAM 地址。
        write1602_byte( dat[temp] , 1 );    // 写 CGRAM 字符数据。
    }   
}

void draw1602_basic(void)
{
    uchar temp;
    for(temp=0;temp<8;temp++)       // 装载8个自定义符号
        write1602_CGRAM(dat1602[temp],temp);

    write1602_DDRAM_pos(0,0);
    write1602_byte(4,1);     // 显示8个自定义符号
    write1602_DDRAM_pos(15,0);
    write1602_byte(5,1);     // 显示8个自定义符号
    write1602_DDRAM_pos(0,1);
    write1602_byte(6,1);     // 显示8个自定义符号
    write1602_DDRAM_pos(15,1);
    write1602_byte(7,1);     // 显示8个自定义符号
    
    write1602_DDRAM_pos(5,0);
    write1602_byte('m',1);
    write1602_byte('a',1);
    write1602_byte('s',1);
    write1602_byte('o',1);
    write1602_byte('n',1);

    write1602_DDRAM_pos(2,1);
    write1602_byte('v',1);
    write1602_byte('o',1);
    write1602_byte('l',1);
    write1602_byte('t',1);
    write1602_byte(':',1);
}
 
 

 

 

 

LCD1602.h头文件的内容(这个一个完善的1602液晶屏驱动文件带protues仿真文件)

/*----Head Description----

-  File Name               : LCD1602.h

-  Author                  : Mason    别名:小菜

-  Create Date             : 2013/7/25 

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

-  Revision History

-  No.    Date        Revised by    Item    Description

-  

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

/*----------------------------Head---------------------------------------*/

#include <reg52.h>

#include "MICRO.h"


#ifndef _LCD1602_H_

#define _LCD1602_H_

/*----------------------------Interface----------------------------------*/

sbit RS_1602 = P0^5;         // 1:数据;0:指令。

sbit RW_1602 = P0^6;         // 1:读;  0:写。

sbit EN_1602 = P0^7;         // 高电平使能

#define DP_1602 P2           // 数据/指令接口

/*----------------------------Micro--------------------------------------*/

// 指令设置(若不另加说明):需令RS1602 = 0;RW1602 = 0 ;


// 清屏

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0          

//   0   0   0   0   0   0   0   1

#define CLRLCD1602 0x01         // Clear LCD1602.       清屏


// 光标复位

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0          

//   0   0   0   0   0   0   1   *

#define CURRST1602 0x02         // Cursor restoration.  光标复位


// 输入方式设置                 // I : Increase, D : Decrease. AC : address counter. 地址寄存器。   

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0          

//   0   0   0   0   0   1 I/D   S

#define MODEIN1602 0x06         // AC Increase,Not Shift. 操作后,AC自增,画面不动。  

#define MODEDN1602 0x04         // AC Decrease,Not Shift. 操作后,AC自减,画面不动。

#define MODEIS1602 0x07         // AC Increase,Shift. 操作后,AC自增,画面平移。

#define MODEDS1602 0x05         // AC Decrease,Shift. 操作后,AC自减,画面平移。


// 显示开关控制  Display Setup

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//   0   0   0   0   1   D   C   B

// D: Display Switch.  显示开关。

// C: Cursor Switch.   光标开关。置位时显示光标。

// B: Blink Switch.    闪烁控制。置位时光标闪烁。

// 将下列相应功能宏相或后赋值操作。

#define DISSET1602 0x08

#define SETDIS1602 0x04

#define SETCUR1602 0x02

#define SETBLI1602 0x01


// 光标/画面位移(不改变DDRAM内容)

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//   0   0   0   1 S/C R/L   *   *

// S/C: Screen or Cursor.

// R/L: Right or left.


// 功能设置

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//   0   0   1  DL   N   F   *   *

// DL = 1,8位数据接口; DL = 0,4位数据接口。

// N  = 1,两行显示;    N = 0,单行显示。

// F  = 1,5*10点阵字符;F = 0,5*7点阵字符。


// CGRAM 地址设置,character generator RAM  (0~3FH)

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//   0   1  A5  A4  A3  A2  A1  A0


// DDRAM 地址设置

// DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//   1  A6  A5  A4  A3  A2  A1  A0

// N = 0,单行显示 A6 ~ A0 = 00H ~ 4FH

// N = 1,首行     A6 ~ A0 = 00H ~ 27H

//       次行     A6 ~ A0 = 40H ~ 67H


// 读BF、AC值(BF:Busy Flag.)

// RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//  0   1  BF  A6  A5  A4  A3  A2  A1  A0


// 写数据

// RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

//  0   1  BF  A6  A5  A4  A3  A2  A1  A0 


/*------------------------------Code Variable----------------------------*/

extern uchar code dat1602[][8];     // 自定义字符


/*----------------------------Function Declaration-----------------------*/

bit  Read1602_BF(void);                     // 读取1602的空闲状态(Busy Flag)

void LCD1602_Init(void);                    // LCD1602上电初使化

void CursorRST_1602(void);                  // 光标复位,但DDRAM内容不变

void write1602_clear(void);                 // 清屏

void write1602_byte(uchar dat,bit RorS);    // 写一字节数据/指令.

void write1602_DDRAM_pos(uchar px,uchar py);// 写指向DDRAM的地址指针

void write1602_CGRAM(uchar dat[8],uchar add);// 将一个5*8自定义字符写入CGRAM中


void draw1602_basic(void);


#endif

 

 

关闭窗口