在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自制51單片機(jī)常用頭文件(LCD1602)

            自制51單片機(jī)常用頭文件(LCD1602)

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            /*--------------------------------------------------------------------------

            LCD1602.H

            本文引用地址:http://www.biyoush.com/article/201611/317353.htm

            The user function is C51.
            Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
            All rights reserved.
            --------------------------------------------------------------------------*/

            #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指令 ***********************************/
            //輸入方式設(shè)置
            #define LCD_AC_AUTO_INCREMENT 0x06 // 數(shù)據(jù)讀、寫操作后,AC自動(dòng)增一
            #define LCD_AC_AUTO_DECREASE 0x04 // 數(shù)據(jù)讀、寫操作后,AC自動(dòng)減一
            #define LCD_MOVE_ENABLE 0x05 // 數(shù)據(jù)讀、寫操作,畫面平移
            #define LCD_MOVE_DISENABLE 0x04 // 數(shù)據(jù)讀、寫操作,畫面不動(dòng)
            #define LCD_GO_HOME 0x02 // AC=0,光標(biāo)、畫面回HOME位
            //設(shè)置顯示、光標(biāo)及閃爍開、關(guān)
            #define LCD_DISPLAY_ON 0x0C // 顯示開
            #define LCD_DISPLAY_OFF 0x08 // 顯示關(guān)
            #define LCD_CURSOR_ON 0x0A // 光標(biāo)顯示
            #define LCD_CURSOR_OFF 0x08 // 光標(biāo)不顯示
            #define LCD_CURSOR_BLINK_ON 0x09 // 光標(biāo)閃爍
            #define LCD_CURSOR_BLINK_OFF 0x08 // 光標(biāo)不閃爍
            //光標(biāo)、畫面移動(dòng),不影響DDRAM
            #define LCD_LEFT_MOVE 0x18 // LCD顯示左移一位
            #define LCD_RIGHT_MOVE 0x1C // LCD顯示右移一位
            #define LCD_CURSOR_LEFT_MOVE 0x10 // 光標(biāo)左移一位
            #define LCD_CURSOR_RIGHT_MOVE 0x14 // 光標(biāo)右移一位
            //工作方式設(shè)置
            #define LCD_DISPLAY_DOUBLE_LINE 0x38 // 兩行顯示
            #define LCD_DISPLAY_SINGLE_LINE 0x30 // 單行顯示
            #define LCD_CLEAR_SCREEN 0x01 // 清屏

            /***********************LCD1602地址相關(guān)******************************/
            #define LINE1_HEAD 0x80 // 第一行DDRAM起始地址
            #define LINE2_HEAD 0xc0 // 第二行DDRAM起始地址
            #define LINE1 0 // 第一行
            #define LINE2 1 // 第二行
            #define LINE_LENGTH 8 // 每行的最大字符長(zhǎng)度

            /***********************LCD1602接線引腳定義**************************/

            #define LCM_RS P2_0 // 數(shù)據(jù)/命令選擇信號(hào)
            #define LCM_RW P2_1 // 讀/寫選擇信號(hào)
            #define LCM_E P2_2 // 使能信號(hào)
            #define LCM_Data P0 // 顯示數(shù)據(jù)端口
            #define Busy 0x80 // 用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)

            #define uchar unsigned char
            #define uint unsigned int

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

            /*****************************************************
            函 數(shù) 名:void Delay_LCD(void)
            功 能:5ms延時(shí)
            說(shuō) 明:LCD顯示延時(shí)
            入口參數(shù):無(wú)
            返 回 值:無(wú)
            *****************************************************/
            void Delay_LCD(void)
            {
            uint TempCyc = 5552; // 放入延時(shí)數(shù)據(jù)

            while(TempCyc--)
            {
            ;
            }
            }

            /*****************************************************
            函 數(shù) 名:uchar ReadStatusLCM()
            功 能:讀忙狀態(tài)
            說(shuō) 明:判斷LCM的工作狀態(tài);也可以不用此函數(shù),用一段延時(shí)程序代替
            入口參數(shù):無(wú)
            返 回 值:LCM_Data
            *****************************************************/
            //讀狀態(tài)
            uchar ReadStatusLCM(void)
            {
            LCM_Data = 0xFF; // LCM數(shù)據(jù)口先置1

            LCM_RS = 0;
            LCM_RW = 1;
            LCM_E = 0;
            LCM_E = 0;
            LCM_E = 1;

            while (LCM_Data & Busy) // 檢測(cè)忙信號(hào).如果忙,則不執(zhí)行
            {
            ;
            }

            return (LCM_Data); // 不忙返回讀取數(shù)據(jù)
            }

            /*****************************************************
            函 數(shù) 名:void WriteDataLCM()
            功 能:向LCM1602中寫入數(shù)據(jù)
            說(shuō) 明:將形參WDLCM中的數(shù)據(jù)寫入LCM中
            入口參數(shù):WDLCM
            返 回 值:無(wú)
            *****************************************************/
            //寫數(shù)據(jù)
            void WriteDataLCM(uchar WDLCM)
            {
            ReadStatusLCM(); // 檢測(cè)忙

            LCM_Data = WDLCM; // 寫入數(shù)據(jù)到LCM

            LCM_RS = 1;
            LCM_RW = 0;
            LCM_E = 0; // 若晶振速度太高可以在這后加小的延時(shí)
            LCM_E = 0; // 延時(shí)
            LCM_E = 1;
            }

            /*****************************************************
            函 數(shù) 名:void WriteCommandLCM()
            功 能:向LCM1602中寫入指令
            說(shuō) 明:向LCM中寫入指令;如果BuysC=0時(shí),忽略忙檢測(cè),如果BuysC=1時(shí),不忽略忙檢測(cè)
            入口參數(shù):WCLCM,BuysC
            返 回 值:無(wú)
            *****************************************************/
            //寫指令
            void WriteCommandLCM(uchar WCLCM,BuysC) // BuysC為0時(shí)忽略忙檢測(cè)
            {
            if (BuysC)
            {
            ReadStatusLCM(); // 根據(jù)需要檢測(cè)忙
            }

            LCM_Data = WCLCM; // 寫入指令

            LCM_RS = 0;
            LCM_RW = 0;
            LCM_E = 0;
            LCM_E = 0;
            LCM_E = 1;
            }

            /*****************************************************
            函 數(shù) 名:void LCMInit()
            功 能:初始化LCM1602
            說(shuō) 明:LCM在工作前先要對(duì)顯示屏初始化,否則模塊無(wú)法正常工作
            入口參數(shù):無(wú)
            返 回 值:無(wú)
            *****************************************************/
            //LCM初始化
            void LCMInit(void)
            {
            LCM_Data = 0;
            WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
            Delay_LCD();
            WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 0x38指令表示:8位數(shù)據(jù)顯示模式,倆行多顯示
            Delay_LCD();
            WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);
            Delay_LCD();

            WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,1); // 顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
            WriteCommandLCM(LCD_DISPLAY_OFF,1); // 關(guān)閉顯示
            WriteCommandLCM(LCD_CLEAR_SCREEN,1); // 顯示清屏
            WriteCommandLCM(LCD_AC_AUTO_INCREMENT,1); // 顯示光標(biāo)移動(dòng)設(shè)置
            WriteCommandLCM(LCD_DISPLAY_ON,1); // 顯示開及光標(biāo)設(shè)置
            }

            /*****************************************************
            函 數(shù) 名:void DisplayOneChar()
            功 能:按指定坐標(biāo)中寫入數(shù)據(jù)
            說(shuō) 明:X-橫坐標(biāo),Y-縱坐標(biāo),DData為ASCII值
            入口參數(shù):X,Y,DData
            返 回 值:無(wú)
            *****************************************************/
            //按指定位置顯示一個(gè)字符
            void DisplayOneChar(uchar X, uchar Y, uchar DData)
            {
            Y &= 0x01;
            X &= 0x0F; // 限制X不能大于15,Y不能大于1

            if (Y)
            {
            X |= LINE2_HEAD; // 當(dāng)要顯示第二行時(shí)地址碼:0xc0
            }

            X |= LINE1_HEAD; // 第一行的地址碼:0x80
            WriteCommandLCM(X, 0); // 這里不檢測(cè)忙信號(hào),發(fā)送地址碼
            WriteDataLCM(DData);
            }
            /*在LCD1602中使用此函數(shù),在DIPS082中使用下面的函數(shù)
            /*****************************************************
            函 數(shù) 名:void DisplayListChar(uchar x,uchar y,uchar *DData)
            功 能:向指定坐標(biāo)中寫入字符串(在LCD1602中使用此函數(shù))
            說(shuō) 明:X-橫坐標(biāo),Y-縱坐標(biāo)
            入口參數(shù):X,Y,*DData
            返 回 值:無(wú)
            *****************************************************
            //按指定位置顯示字符串
            void DisplayListChar(uchar x,uchar y,uchar *DData)
            {
            if (y == LINE1) // 判斷是否寫入第1行
            {
            if (x < LINE_LENGTH) // 寫入位數(shù)
            {
            WriteCommandLCM(LINE1_HEAD+x,0); // 寫入第1行地址

            for (;x

            <menu id="6qfwx"><li id="6qfwx"></li></menu>
            1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

              <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
                  • <center id="6qfwx"><dl id="6qfwx"></dl></center>