<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開(kāi)發(fā)網(wǎng)

      電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī) >> 正文

      單片機(jī)c51驅(qū)動(dòng)1602A液晶屏的驅(qū)動(dòng)實(shí)驗(yàn)

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011-5-14
      所需硬件:   1.單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板A
                  2.杜邦頭插線
                  3.16x2液晶顯示字符模塊
                  4.STC89C51RC單片機(jī)
      所需軟件:   1. Keil C51 V8.08或Keil_uv3 綠色版本
                  2.STC單片機(jī)ISP下載編程軟件


              1602A液晶屏連接圖
      C語(yǔ)言源程序
      /******************************************************************
      ** 1602A液晶屏驅(qū)動(dòng)程序
      ** 晶 振  頻 率:11.0592M
      ** 線路->單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板A
      ******************************************************************/
          #include  
          #define uchar unsigned char
          #define uint unsigned int

          sbit LCM_E=P3^5;  //定義接口
          sbit LCM_RW=P3^6;
          sbit LCM_RS=P3^7;

          #define LCM_Data P1//數(shù)據(jù)接口

          void LCM_WriteData(uchar WDLCM);
          void LCM_WriteCommand(uchar WCLCM,BuysC);
          uchar LCM_ReadData(void);
          uchar LCM_ReadStatus(void);
          void LCM_Init(void);
          void DisplayOneChar(uchar X, uchar Y, uchar DData);
          void DisplayListChar(uchar X, uchar Y, uchar code *DData);
          void Delay5Ms(void);
          void Delay400Ms(void);

          uchar code uctech[] = {"1602A"};
          uchar code net[] = {"www.52c51.com"};

          void main(void)
          {
              Delay400Ms(); //啟動(dòng)等待,等LCM講入工作狀態(tài)
              LCM_Init(); //LCM初始化
              Delay5Ms(); //延時(shí)片刻(可不要)

              DisplayListChar(6, 1, uctech);   
              DisplayListChar(0, 0, net);
              LCM_ReadData();//測(cè)試用句無(wú)意義
              LCM_Data=255;
              while(1);
          }

      /****************************1602A寫(xiě)數(shù)據(jù)函數(shù)**************************/
      /*函數(shù)原型:void LCM_WriteData(uchar WDLCM)
      /*函數(shù)功能:1602A寫(xiě)數(shù)據(jù)
      /*輸入?yún)?shù):要寫(xiě)入的數(shù)據(jù)
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void LCM_WriteData(uchar WDLCM)
          {
              LCM_ReadStatus(); //檢測(cè)忙
              LCM_Data = WDLCM;
              LCM_RS = 1;
              LCM_RW = 0;
              LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
              LCM_E = 0; //延時(shí)
              LCM_E = 1;
          }

      /****************************1602A寫(xiě)指令函數(shù)**************************/
      /*函數(shù)原型:void LCM_WriteCommand(uchar WCLCM,BuysC)
      /*函數(shù)功能:1602A寫(xiě)指令
      /*輸入?yún)?shù):要寫(xiě)入的指令
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void LCM_WriteCommand(uchar WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
          {
              if (BuysC) LCM_ReadStatus(); //根據(jù)需要檢測(cè)忙
              LCM_Data = WCLCM;
              LCM_RS = 0;
              LCM_RW = 0;
              LCM_E = 0;
              LCM_E = 0;
              LCM_E = 1;
          }

      /****************************1602A讀數(shù)據(jù)函數(shù)**************************/
      /*函數(shù)原型:uchar LCM_ReadData(void)
      /*函數(shù)功能:1602A讀數(shù)據(jù)
      /*輸入?yún)?shù):無(wú)
      /*輸出參數(shù):1602A返回的數(shù)據(jù)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          uchar LCM_ReadData(void)
          {
              LCM_RS = 1;
              LCM_RW = 1;
              LCM_E = 0;
              LCM_E = 0;
              LCM_E = 1;
              return(LCM_Data);
          }

      /****************************1602A讀狀態(tài)函數(shù)**************************/
      /*函數(shù)原型:uchar LCM_ReadData(void)
      /*函數(shù)功能:1602A讀狀態(tài)
      /*輸入?yún)?shù):無(wú)
      /*輸出參數(shù):1602A返回的狀態(tài)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          uchar LCM_ReadStatus(void)
          {
              LCM_Data = 0xFF;
              LCM_RS = 0;
              LCM_RW = 1;
              LCM_E = 0;
              LCM_E = 0;
              LCM_E = 1;
              while (LCM_Data & 0x80); //檢測(cè)忙信號(hào)
              return(LCM_Data);
          }

      /****************************1602A初始化函數(shù)**************************/
      /*函數(shù)原型:void LCM_Init(void)
      /*函數(shù)功能:1602A初始化
      /*輸入?yún)?shù):無(wú)
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void LCM_Init(void)
          {
              LCM_Data = 0;
              LCM_WriteCommand(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
              Delay5Ms();
              LCM_WriteCommand(0x38,0);
              Delay5Ms();
              LCM_WriteCommand(0x38,0);
              Delay5Ms();

              LCM_WriteCommand(0x38,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
              LCM_WriteCommand(0x08,1); //關(guān)閉顯示
              LCM_WriteCommand(0x01,1); //顯示清屏
              LCM_WriteCommand(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
              LCM_WriteCommand(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置
          }

      /******************1602A按指定位置顯示一個(gè)字符函數(shù)**********************/
      /*函數(shù)原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)
      /*函數(shù)功能:1602A按指定位置顯示一個(gè)字符
      /*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示的字符
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void DisplayOneChar(uchar X, uchar Y, uchar DData)
          {
              Y &= 0x1;
              X &= 0xF; //限制X不能大于15,Y不能大于1
              if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
              X |= 0x80; // 算出指令碼
              LCM_WriteCommand(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
              LCM_WriteData(DData);
          }

      /*******************1602A按指定位置顯示一串字符函數(shù)*********************/
      /*函數(shù)原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)
      /*函數(shù)功能:1602A按指定位置顯示一個(gè)字符
      /*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示字符串的首地址
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void DisplayListChar(uchar X, uchar Y, uchar code *DData)
          {
              uchar ListLength;
              ListLength = 0;
              Y &= 0x1;
              X &= 0xF; //限制X不能大于15,Y不能大于1
              while (DData[ListLength]>0x20) //若到達(dá)字串尾則退出
              {
                  if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
                  {
                      DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
                      ListLength++;
                      X++;
                  }
              }
          }

      /********************5ms延時(shí)函數(shù)************************/
      /*函數(shù)原型:void Delay5Ms(void)
      /*函數(shù)功能:5ms延時(shí)
      /*輸入?yún)?shù):無(wú)
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
          void Delay5Ms(void)
          {
              unsigned int TempCyc = 5552;
              while(TempCyc--);
          }

      /********************400ms延時(shí)延時(shí)函數(shù)************************/
      /*函數(shù)原型:void Delay400Ms(void)
      /*函數(shù)功能:400ms延時(shí)延時(shí)
      /*輸入?yún)?shù):無(wú)
      /*輸出參數(shù):無(wú)
      /*調(diào)用模塊:
      /*建立時(shí)間:2005/11/14
      /*作者:站長(zhǎng)
      /**********************************************************************/
      void Delay400Ms(void)
      {
      uchar TempCycA = 5;
      unsigned int TempCycB;
      while(TempCycA--)
      {
         TempCycB=7269;
         while(TempCycB--);
      };
      }
      keil工程文件打包下載yejing_c.rar

      匯編語(yǔ)言源程序
      /******************************************************************
      ** 1602A液晶屏驅(qū)動(dòng)程序
      ** 晶 振  頻 率:11.0592M
      ** 線路->單片機(jī)實(shí)驗(yàn)開(kāi)發(fā)板A
      ******************************************************************/

                  LCM_RS EQU P3.7  ;//定義接口
                  LCM_RW EQU P3.6
                  LCM_E EQU P3.5

                  LCM_Data EQU P1  ;數(shù)據(jù)接口

                  ORG 0000H   ;從0000H處開(kāi)始
                  SJMP MAIN   ;跳轉(zhuǎn)到MAIN處

                  ORG 0030H   ;主程序從0030H處開(kāi)始
      MAIN:       MOV SP,#70H   ;堆棧指針指向70H
                  LCALL INITIAL   ;調(diào)用啟動(dòng)LCM子程序進(jìn)行初始化
                  LCALL CLS   ;調(diào)用清除LCM子程序
                  MOV A,#80H   ;向A送立即數(shù)80H設(shè)定顯示地址為第一行第一列
                  LCALL WRITE_COM  ;調(diào)用寫(xiě)指令到LCM子程序
                  MOV DPTR,#LINE1  ;將第一行字符串的啟始地址送如DPTR中
                  LCALL DISP   ;調(diào)用顯示字符串到LCM子程序
                  MOV A,#0C0H   ;向A送立即數(shù)0C0H設(shè)定顯示地址為第二行第一列
                  LCALL WRITE_COM  ;調(diào)用寫(xiě)指令到LCM子程序
                  MOV DPTR,#LINE2  ;將第二行字符串的啟始地址送如DPTR中
                  LCALL DISP   ;調(diào)用顯示字符串到LCM子程序
                  SJMP $   ;程序動(dòng)態(tài)停機(jī)

      LINE1:      DB " www.52c51.com ",00H ;第一行字符串
      LINE2:      DB "   1602A   ",00H ;第二行字符串

      INITIAL:    MOV A,#38H   ;啟動(dòng)LCM子程序
                  LCALL WRITE_COM
                  MOV A,#0EH
                  LCALL WRITE_COM
                  MOV A,#06H
                  LCALL WRITE_COM
                  RET

      CHECK_BUSY: PUSH ACC   ;查詢忙碌信號(hào)子程序
      BUSY_LOOP:  CLR LCM_E
                  SETB LCM_RW
                  CLR LCM_RS
                  SETB LCM_E
                  MOV A,LCM_Data
                  CLR LCM_E
                  JB ACC.7,BUSY_LOOP
                  POP ACC
                  LCALL DEL
                  RET

      WRITE_COM:  LCALL CHECK_BUSY;寫(xiě)指令到LCM子程序
                  CLR LCM_E
                  CLR LCM_RS
                  CLR LCM_RW
                  SETB LCM_E
                  MOV LCM_Data,A
                  CLR LCM_E
                  RET

      WRITE_DATA: LCALL CHECK_BUSY ;寫(xiě)數(shù)據(jù)到LCM子程序
                  CLR LCM_E
                  SETB LCM_RS
                  CLR LCM_RW
                  SETB LCM_E
                  MOV LCM_Data,A
                  CLR LCM_E
                  RET

      CLS:        MOV A,#01H  ;清除LCM子程序
                  LCALL WRITE_COM
                  RET

      DEL:        MOV R6,#5   ;2.7ms延時(shí)子程序
      D1:         MOV R7,#248
                  DJNZ R7,$
                  DJNZ R6,D1
                  RET

      DISP:       PUSH ACC   ;將A的內(nèi)容壓棧
      DISP_LOOP:  CLR A   ;A清零
                  MOVC A,@A+DPTR  ;查表將字符串內(nèi)容送入A
                  JZ END_DISP  ;若查到的內(nèi)容為0則終止查表
                  LCALL WRITE_DATA  ;調(diào)用寫(xiě)數(shù)據(jù)到LCM子程序
                  INC DPTR   ;DPTR加1指向下一個(gè)對(duì)象
                  SJMP DISP_LOOP  ;跳轉(zhuǎn)到DISP_LOOP循環(huán)執(zhí)行
      END_DISP:   POP ACC   ;彈出壓棧內(nèi)容至A
                  RET

                  END    ;程序結(jié)束
      keil工程文件打包下載 yejing_asm.rar
      Tags:單片機(jī)驅(qū)動(dòng),1602液晶屏  
      責(zé)任編輯:admin
      相關(guān)文章列表
      沒(méi)有相關(guān)文章
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢
      主站蜘蛛池模板: 久久久久青草线蕉综合超碰| 日本伊人色综合网| 色婷婷久久综合中文久久蜜桃av| 亚洲伊人久久大香线蕉综合图片| 国产在线五月综合婷婷| 狠狠色成人综合首页| 亚洲欧美国产国产综合一区| 综合三区后入内射国产馆| 人人妻人人狠人人爽天天综合网| 色婷婷综合和线在线| 亚洲av伊人久久综合密臀性色| 狠狠色丁香久久婷婷综合_中| 狠狠色狠狠色综合伊人| 国产成人综合久久精品| 亚洲狠狠色丁香婷婷综合| 久久婷婷香蕉热狠狠综合| 久久综合色之久久综合| 色偷偷狠狠色综合网| 色综合天天综合网站中国| 久久99精品综合国产首页| 伊人婷婷色香五月综合缴激情| 久久亚洲精品高潮综合色a片| 久久丝袜精品综合网站| 丁香六月婷婷综合| 色婷婷久久综合中文久久一本| 色婷婷天天综合在线| 伊人久久大香线蕉综合热线| 亚洲综合久久久久久中文字幕| 精品久久久久久综合日本| 久久久久久久综合日本亚洲| 天天爽天天狠久久久综合麻豆| 国产综合久久久久久鬼色| 久久88色综合色鬼| 亚洲AV日韩综合一区尤物| 婷婷六月久久综合丁香76| 亚洲AV成人潮喷综合网| 伊人激情久久综合中文字幕| 亚洲综合精品一二三区在线| 国产成人综合久久综合| 色欲香天天综合网无码| 久久久久久综合一区中文字幕|