<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

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

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

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

         

         

        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮