(玩電子) 電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LCD1602.h和LCD1602.c文件下載(51單片機液晶驅動)

作者:huqin   來源:本站原創   點擊數:x  更新時間:2014年08月16日   【字體:

LCD1602.c文件的內容(這個一個完善的用51單片機實現1602液晶屏驅動文件帶protues仿真文件):
完整的程序源碼和仿真文件下載: http://www.ljflms.live/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

 

 

發表評論】【告訴好友】【收藏此文】【關閉窗口

文章評論

全天计划时时彩