新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > HD4478U顯示LCD與51單片機驅動程序

        HD4478U顯示LCD與51單片機驅動程序

        作者: 時間:2016-11-13 來源:網絡 收藏
        #include

        #include
        #include

        本文引用地址:http://www.104case.com/article/201611/316141.htm

        sbit LCDRSPIN = P3^7;
        sbit LCDRWPIN = P3^6;
        sbit LCDEPIN = P2^6;

        #define UCHAR unsigned char
        void delay(unsigned int i)
        {
        UCHAR j;
        for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
        }



        ///////////////////////////////
        //控制LCD
        unsigned char XPOS,YPOS;

        //測忙
        void LcdWaitIdle(void)
        { P0=0xff;
        LCDRSPIN=0;
        LCDRWPIN=1;
        LCDEPIN=1;
        while((P0&0x80)==0x80);
        LCDEPIN=0;
        }

        //寫指令代碼
        void LcdWCN(unsigned char c)
        { LCDRSPIN=0;
        LCDRWPIN=0;
        P0=c;
        LCDEPIN=1;
        _nop_();
        LCDEPIN=0;
        }

        //寫指令代碼(測忙)
        void LcdWC(unsigned char c)
        { LcdWaitIdle();
        LcdWCN(c);
        }

        //寫數據
        void LcdWD(unsigned char d)
        { LcdWaitIdle();
        LCDRSPIN=1;
        LCDRWPIN=0;
        P0=d;
        LCDEPIN=1;
        _nop_();
        LCDEPIN=0;
        }

        //內部數據地址指針定位
        void LcdPos(void)
        { XPOS&=0x0f;
        YPOS&=0x03;
        if(YPOS==0x00)
        LcdWC(XPOS|0x80);
        else if(YPOS==0x01)
        LcdWC((XPOS+0x40)|0x80);
        else if(YPOS==0x02)
        LcdWC((XPOS+0x10)|0x80);
        }

        //初始化
        void InitLcd()
        {
        LCDEPIN=0;
        delay(150); LcdWCN(0x38); /*設置8位格式,2行,2*16*/

        LcdWC(0x08); /*清除顯示*/
        LcdWC(0x06); /*設定輸入方式,增量不移位*/
        LcdWC(0x0c); /*整體顯示,關光標,不閃爍*/
        }


        void LcdWDA(unsigned char x,unsigned char y,unsigned char *s)
        {
        YPOS=y;
        for(XPOS=x;XPOS<16 && *s != 0;XPOS++)
        { LcdPos();
        LcdWD(*s);
        s++;
        }
        }
        char LcdStr[13]={L,A,N,D, ,C,5,1,-,P,R,O,0x0};
        char * str1=LcdStr;
        char * str2="WWW.LDMCU.COM";

        char CharPos=-11;
        char CharLen = 12; //滾動的字符的個數
        bit LcdPause = 0; //是否停止滾動

        以下為字符顯示位置與主程序,可相應修改。
        //設置str1從左邊進入
        void LcdLeftIn()
        {

        delay(1500);

        LCDEPIN=0;
        LcdWDA(2,1,str2);
        if(CharPos > 16)
        {
        CharPos = (CharLen - 1)* -1;
        }

        if(CharPos > 0)
        {
        LcdWDA(CharPos-1,0," "); //前進一格清除前面的字符
        LcdWDA(CharPos,0,str1);
        }
        else
        {
        LcdWDA(0,0,str1-CharPos);
        }
        CharPos++;
        // P3=P3B;
        }


        main()
        {
        InitLcd();
        while(1)
        {
        LcdLeftIn();
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 马尔康县| 黑龙江省| 陆丰市| 玉林市| 资阳市| 宜昌市| 阿克苏市| 海南省| 宁城县| 新丰县| 广南县| 云林县| 秦皇岛市| 灵丘县| 深圳市| 庄浪县| 富蕴县| 泊头市| 新竹县| 达州市| 突泉县| 房山区| 三原县| 定南县| 牡丹江市| 安西县| 宁乡县| 英超| 广安市| 光泽县| 时尚| 衡阳县| 阿勒泰市| 南陵县| 永仁县| 昌黎县| 高要市| 裕民县| 福泉市| 延安市| 达孜县|