<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();