新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機控制HD61202液晶顯示C語言程序

        51單片機控制HD61202液晶顯示C語言程序

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
        //寫漢字液晶程序 液晶屏分為4行/8列漢字,全部使用模擬接口方式。
        ///////////////////////////////////////////////////////////////////////////////////////////////////
        連線圖: /
        /LCM---89C52/ /LCM---89C52/ /LCM-------89C52/ /LCM----------89C52/ /
        /DB0---P1.0/ /DB4---P1.4/ /D/I-------P2.3/ /CS1----------P2.0/ /
        /DB1---P1.1/ /DB5---P1.5/ /R/W-------P2.2/ /CS2----------P2.1/ /
        /DB2---P1.2/ /DB6---P1.6/ /E---------P2.4/ /EL-E---------P3.4/ /
        /DB3---P1.3/ /DB7---P1.7/ /RST-------VCC /EL-D---------VCC /
        注:89C52的晶振頻率為12MHz /
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        #include
        #include
        #define Uchar unsigned char
        #define _Nop() _nop_() //定義空指令//
        /////////////////全局變量定義///////////////////
        Uchar col,row,cbyte,keyd,t,Signal; //列y,行(頁)x,輸出數(shù)據(jù);keyd為鍵值;t為數(shù)組下標;Signal為觸發(fā)傳感器的編號 //
        Uchar buf[10]; //保存,顯示數(shù)據(jù)緩沖區(qū)//
        ////////////液晶顯示器接口引腳定義////////////////
        sbit EL_E= P3^4; //背景光控制腳
        sbit Elcm= P2^4; //
        sbit CS1LCM= P2^0; //
        sbit CS2LCM= P2^1; //
        sbit Dilcm= P2^3; //
        sbit Rwlcm= P2^2; //
        sfr Datalcm= 0x90; //數(shù)據(jù)口.即P1口地址
        sbit PL= P3^5; //接74HC164的PL腳,并行數(shù)據(jù)鎖入使能,低電平有效
        ////////////常用操作命令和參數(shù)定義////////////////
        #define DISPON 0x3f //顯示on //
        #define DISPOFF 0x3e //顯示off //
        #define DISPFIRST 0xc0 //顯示起始行定義 //
        #define SETX 0xb8 //X定位設(shè)定指令(頁) //
        #define SETY 0x40 //Y定位設(shè)定指令(列) //
        #define Lcdbusy 0x80 //LCM忙判斷位 //
        ///////////////顯示分區(qū)邊界位置//////////////////
        #define MODL 0x00 //左區(qū) //
        #define MODM 0x40 //左區(qū)和右區(qū)分界 //
        #define LCMLIMIT 0x80 //顯示區(qū)的右邊界 //
        //////////////////函數(shù)列表///////////////////////
        void InputNo(void);
        void ShowPage(void);
        void input(void);
        void LookOver(void);
        void Drawing(void);
        void Save(void);
        void ProcessSgl(void);
        ///////////////////數(shù)組列表//////////////////////
        Uchar code Ezk[]; //ASCII常規(guī)字符點陣碼表 //
        Uchar code Hzk[]; //自用漢字點陣碼表 //
        Uchar code KJHM[]; //開機畫面點陣碼表 //
        //////////////////////////////////
        //定義字符串?dāng)?shù)組 //
        //////////////////////////////////
        Uchar code BH[]={0x80,0x81,0x23,0x25,0x25};
        Uchar code JL[]={0x82,0x83,0x23,0x25,0x25,0x25,0x25,0x8b,0x8c}; //9個字節(jié)
        Uchar code FW[]={0x84,0x85,0x23,0x25,0x25,0x25,0x25,0x86,0x85};
        Uchar code BC[]={0x89,0x8a,0x9e,0x9f,0xa1,0x22}; //保存??//
        Uchar code LX[]={0x87,0x88,0x23};
        Uchar code ZD[]={0x8d,0x8e,0x93};
        Uchar code HZ[]={0x8f,0x90,0x93};
        Uchar code ZS[]={0x91,0x92,0x93};
        Uchar code XD[]={0x94,0x95,0x96,0x97};
        Uchar code YJ[]={0x98,0x99};
        Uchar code SR[]={0xa0,0x9a,0x9b,0x9e,0x9f};
        Uchar code CK[]={0x9a,0x9b,0x80,0x81,0x9c,0x9d,0x9e,0x9f};
        //狀態(tài)標志//
        bit ack; //應(yīng)答標志位//
        ///////////////////////////液晶子程序//////////////////////////////
        //公用busy等待//
        void wtcom(void)
        {
        Dilcm = 0; //CLR DI 命令操作 //
        Rwlcm = 1; //SETB RW 讀操作 //
        Datalcm = 0xFF; //用作輸入時,口鎖存器必須先寫1 //
        Elcm = 1;_nop_();
        while(Datalcm & Lcdbusy);
        Elcm = 0;
        }
        //////////////////////////////////////////////////////////
        // 分區(qū)操作允許等待,返回時保留分區(qū)選擇狀態(tài) //
        //////////////////////////////////////////////////////////
        void lcdbusyL(void)
        {
        CS1LCM = 1; //CLR CS1 //
        CS2LCM = 0; //SETB CS2 //
        wtcom(); // waitting for enable //
        }
        void lcdbusyR(void)
        {
        CS1LCM = 0; //SETB CS1 //
        CS2LCM = 1; //SETB CS2 //
        wtcom(); // waitting for enable //
        }
        //////////////////////////////////
        // 命令輸出到左區(qū)控制口 //
        //////////////////////////////////
        void WrcmdL(Uchar X)
        {
        lcdbusyL(); //確定分區(qū),返回時保留分區(qū)狀態(tài)不變//
        Dilcm = 0; //命令操作 //
        Rwlcm = 0; //寫輸出 //
        Datalcm = X; //數(shù)據(jù)輸出到數(shù)據(jù)口 //
        Elcm = 1;_nop_();Elcm = 0; //下降沿,寫入到LCM//
        }
        //////////////////////////////////
        // 命令輸出到右區(qū)控制口 //
        //////////////////////////////////
        void WrcmdR(Uchar X)
        {
        lcdbusyR(); //確定分區(qū),返回時保留分區(qū)狀態(tài)不變 //
        Dilcm = 0; //命令操作 //
        Rwlcm = 0; //寫輸出 //
        Datalcm = X; //命令輸出到數(shù)據(jù)口 //
        Elcm = 1;_nop_();Elcm = 0; //讀入到LCM//
        }
        //////////////////////////////////////////////////////////
        //根據(jù)設(shè)定的坐標數(shù)據(jù),定位LCM上的下一個操作單元位置 //
        //////////////////////////////////////////////////////////
        void Locatexy(void)
        {
        unsigned char x,y;
        y = col&0x3F|SETY; // col.and.0x3f.or.setx //
        x = row&0x07|SETX; // row.and.0x07.or.sety //
        switch (col&0xc0) // col.and.0xC0 //
        { //條件分支執(zhí)行 //
        case 0: {WrcmdL(y);
        WrcmdL(x);
        break;} //左區(qū) //
        case 0x40:{WrcmdR(y);
        WrcmdR(x);
        break;} //右區(qū) //
        }
        }

        上一頁 1 2 下一頁

        關(guān)鍵詞: 51單片機HD61202液晶顯

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 佛坪县| 宜兰市| 达拉特旗| 新丰县| 竹山县| 团风县| 福贡县| 太谷县| 柘荣县| 澄迈县| 剑阁县| 大名县| 漠河县| 武义县| 永春县| 米易县| 社旗县| 新密市| 宝清县| 乌拉特中旗| 大田县| 逊克县| 轮台县| 大竹县| 巴南区| 肇源县| 哈巴河县| 临桂县| 平定县| 贵港市| 山西省| 上思县| 博客| 霞浦县| 古丈县| 崇信县| 理塘县| 行唐县| 文成县| 东阳市| 横峰县|