新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

        51單片機(jī)采用模擬時(shí)序控制點(diǎn)陣圖形液晶程序

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


        //////////////////////////////////////////////////////////////////////////////////
        ///全角字符點(diǎn)陣碼數(shù)據(jù)輸出///
        //////////////////////////////////////////////////////////////////////////////////
        void Putcdot(Uchar Order)
        {
        Uchar i,bakerx,bakery;///共定義3個(gè)局部變量///
        int x;///偏移量,字符量少的可以定義為UCHAR///
        bakerx = col;///暫存x,y坐標(biāo),已備下半個(gè)字符使用 ///
        bakery = row;
        x=Order // 0x20;///每個(gè)字符32字節(jié)///

        ///上半個(gè)字符輸出,16列///
        for(i=0;i<16;i++)
        {
        Wrdata(Hzk[x]);///寫(xiě)輸出一字節(jié)///
        x++;
        col++;
        if (col==LCMLIMIT){ col=0;row++;row++;} ///下一列,如果列越界換行///
        if (row>6) row=0;///如果行越界,返回首行///
        }///上半個(gè)字符輸出結(jié)束 ///

        ///下半個(gè)字符輸出,16列///
        col = bakerx;
        row = bakery+1;
        for(i=0;i<16;i++)///下半部分///
        {
        Wrdata(Hzk[x]);
        x++;
        col++;
        if (col==LCMLIMIT){col=0;row++;row++;}///下一列,如果列越界換行///
        if (row>7) row=1;///如果行越界,返回首行///
        }///下半個(gè)字符輸出結(jié)束 ///
        row = bakery;
        }///整個(gè)字符輸出結(jié)束///

        //////////////////////////////////////////////////////////////////////////////////
        ///清屏,全屏幕清零///
        //////////////////////////////////////////////////////////////////////////////////
        void Lcmcls( void )
        {
        for(row=0;row<8;row++)
        for(col=0;col
        }

        //////////////////////////////////////////////////////////////////////////////////
        ///從液晶片上讀數(shù)據(jù),保留在全局變量中///
        //////////////////////////////////////////////////////////////////////////////////

        void Rddata(void)
        {
        Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
        Datalcm=0xFF;
        Dilcm = 1;///數(shù)據(jù)///
        Rwlcm = 1;///讀數(shù)據(jù)///
        Elcm = 1;///讀入到LCM///
        _nop_();
        cbyte = Datalcm;///虛讀一次 ///
        Elcm = 0;
        Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
        Datalcm=0xFF;
        _nop_();
        Dilcm = 1;///數(shù)據(jù)///
        Rwlcm = 1;///讀數(shù)據(jù)///
        Elcm = 1;///讀入到LCM///
        _nop_();
        cbyte = Datalcm;///從數(shù)據(jù)口讀數(shù)據(jù),真讀 ///
        Elcm = 0;
        }

        //////////////////////////////////////////////////////////////////////////////////
        ///數(shù)據(jù)寫(xiě)輸出///
        //////////////////////////////////////////////////////////////////////////////////

        void Wrdata(Uchar X)
        {
        Locatexy();///坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變///
        //wtcom();
        Dilcm = 1;///數(shù)據(jù)輸出///
        Rwlcm = 0;///寫(xiě)輸出///
        Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
        Elcm = 1;///讀入到LCM///
        _nop_();
        Elcm = 0;
        }

        //////////////////////////////////////////////////////////////////////////////////
        /// 命令輸出,每次輸出一個(gè)分區(qū)控制口 ///
        //////////////////////////////////////////////////////////////////////////////////

        ///void Wrcmd(Uchar X)
        //{
        //Locatexy();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
        //wtcom();///等待LCM操作允許 ///
        //Dilcm = 0;///數(shù)據(jù)操作///
        //Rwlcm = 0;///寫(xiě)輸出///
        //Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
        //Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
        //}

        //////////////////////////////////////////////////////////////////
        /// 命令輸出到左區(qū)控制口///
        //////////////////////////////////////////////////////////////////

        void WrcmdL(Uchar X)
        {
        lcdbusyL();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
        Dilcm = 0;///命令操作///
        Rwlcm = 0;///寫(xiě)輸出///
        Datalcm = X;///數(shù)據(jù)輸出到數(shù)據(jù)口 ///
        Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
        }

        //////////////////////////////////////////////////////////////////
        /// 命令輸出到中區(qū)控制口///
        //////////////////////////////////////////////////////////////////

        void WrcmdM(Uchar X)
        {
        lcdbusyM();///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
        Dilcm = 0;///命令操作///
        Rwlcm = 0;///寫(xiě)輸出///
        Datalcm = X;///命令輸出到數(shù)據(jù)口 ///
        Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
        }

        //////////////////////////////////////////////////////////////////
        /// 命令輸出到右區(qū)控制口///
        //////////////////////////////////////////////////////////////////

        void WrcmdR(Uchar X)
        {
        lcdbusyR(); ///確定分區(qū),返回時(shí)保留分區(qū)狀態(tài)不變///
        Dilcm = 0;///命令操作///
        Rwlcm = 0;///寫(xiě)輸出///
        Datalcm = X;///命令輸出到數(shù)據(jù)口 ///
        Elcm = 1;_nop_();Elcm = 0;///讀入到LCM///
        }

        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// 分區(qū)操作允許等待,返回時(shí)保留分區(qū)選擇狀態(tài)///
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        void lcdbusyL(void)
        {
        CS1LCM = 0;///CLRCS1///
        CS2LCM = 1;///SETBCS2///
        CS3LCM = 1;///SETBCS3///
        wtcom();/// waitting for enable///
        }

        void lcdbusyM(void)
        {
        CS1LCM = 1;///SETBCS1///
        CS2LCM = 0;///CLRCS2///
        CS3LCM = 1;///SETBCS3///
        wtcom();/// waitting for enable///
        }

        void lcdbusyR(void)
        {
        CS1LCM = 1;///SETBCS1///
        CS2LCM = 1;///SETBCS2///
        CS3LCM = 0;///CLRCS3///
        wtcom();/// waitting for enable///
        }

        void wtcom(void)
        {
        Dilcm = 0;///CLRDI///
        Rwlcm = 1;///SETBRW///
        Datalcm = 0xFF;///MOVDATA_LCM,#0FFH///
        Elcm= 1;_nop_();
        while(Datalcm & Lcdbusy);
        Elcm= 0;
        }

        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個(gè)操作單元位置///
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        void Locatexy(void)
        {
        unsigned charx,y;
        switch (col&0xc0)///col.and.0xC0///
        {///條件分支執(zhí)行///
        case 0:{lcdbusyL();break;} ///左區(qū)///
        case 0x40:{lcdbusyM();break;} ///中區(qū)///
        case 0x80:{lcdbusyR();break;} ///右區(qū)///
        }
        x = col&0x3F|SETX;///col.and.0x3f.or.setx///
        y = row&0x07|SETY;///row.and.0x07.or.sety///
        wtcom();///waitting for enable///
        Dilcm = 0;///CLRDI///
        Rwlcm = 0;///CLRRW///
        Datalcm = y;///MOVP0,Y///
        Elcm = 1;_nop_();Elcm = 0;
        wtcom();///waitting for enable///
        Dilcm = 0;///CLRDI///
        Rwlcm = 0;///CLRRW///
        Datalcm = x;///MOVP0,X///
        Elcm = 1;_nop_();Elcm = 0;
        }

        //////////////////////////////////////////////////////////////////
        ///液晶屏初始化///
        //////////////////////////////////////////////////////////////////

        void Lcminit(void)
        {
        cbyte = DISPOFF;///關(guān)閉顯示屏 ///
        WrcmdL(cbyte);
        WrcmdM(cbyte);
        WrcmdR(cbyte);
        cbyte = DISPON;///打開(kāi)顯示屏 ///
        WrcmdL(cbyte);
        WrcmdM(cbyte);
        WrcmdR(cbyte);
        cbyte = DISPFIRST;///定義顯示起始行為零 ///
        WrcmdL(cbyte);
        WrcmdM(cbyte);
        WrcmdR(cbyte);
        Lcmcls();
        col=0;///清屏///
        row=0;
        Locatexy();
        }
        //////////////////////////////////////////////////////////////////
        /// 延時(shí)///
        //////////////////////////////////////////////////////////////////
        void Delay(Uchar MS)
        {
        Uchar us,usn;
        while(MS!=0)
        { usn = 4;
        while(usn!=0)
        {
        us=0xf0;
        while (us!=0){us--;};
        usn--;
        }
        MS--;
        }
        }

        //////////////////////////////////////////////////////////////////
        //定義字符串?dāng)?shù)組///
        //////////////////////////////////////////////////////////////////

        Uchar code STR1[]=
        {
        0x80,0x81,0x82,0x83,0x84,0x85,
        0x86,0x87,0x88,0x89,0x8a,0x8B
        };

        Uchar code STR2[]="Our friend over the wold";
        Uchar code STR3[]="Program by Keil C51 6.12";
        Uchar code STR4[]="Thank you ~v~ 1234567890";


        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 河间市| 廊坊市| 井冈山市| 木兰县| 嘉义市| 天峨县| 平安县| 南华县| 东乌| 阜南县| 娄烦县| 珲春市| 屯门区| 九台市| 会东县| 蓬溪县| 古浪县| 临城县| 花莲市| 出国| 达州市| 泗阳县| 临泉县| 丁青县| 什邡市| 西乌珠穆沁旗| 鄂伦春自治旗| 南宫市| 洪江市| 手游| 昌邑市| 左云县| 仙桃市| 白沙| 闽清县| 长沙市| 孝昌县| 德昌县| 句容市| 诸城市| 垦利县|