1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      1602LCD四位數據接口驅動1602LCD四位數據接口驅動程序

      更新時間: 2006-03-23 16:18:39來源: 粵嵌教育瀏覽量:4268

      /////LCM_start/////
      /*============================================================
      1602LCD四位數據接口驅動程序 馬文壘 2004/12/13
      ==============================================================
      感謝:本程序參考 明皓的1602LCM液晶顯示屏的驅動函數和實例

      連接線圖:
      ----------------------------------
      | LCM-----51  | LCM-----51 | 
      ----------------------------------
      |RS-----P2.1 | DB4-----P1.4 |
      |RW-----P2.0 | DB5-----P1.5 |
      |E -----P2.2 | DB6-----P1.6 |
      |VLCD接1K電阻到GND| DB7-----P1.7 |
      ---------------------------------------------------
      [注:AT89S51使用12M晶振]
      =============================================================*/
      void writelcd(bit command,unsigned char ddata)
      {
      ReadStatusLCM(); //檢測忙
      LCM_Data = (ddata&0xf0)|(P1&0x0f);
      LCM_RW = 0;
      if(command==0) LCM_RS = 0; else LCM_RS=1;
      LCM_E = 1;
      LCM_E = 0;
      LCM_E = 0;
      LCM_Data = ((ddata<<4)&0xf0)|(P1&0x0f);
      if(command==0) LCM_RS = 0; else LCM_RS=1;
      LCM_E = 1;
      LCM_E = 0;
      LCM_E = 0;
      }

      //讀狀態
      unsigned char ReadStatusLCM(void)
      {
      P1_7=1;
      LCM_RS = 0;
      LCM_RW = 1;
      LCM_E = 0;
      LCM_E = 0;
      LCM_E = 1;
      while(P1_7&0x01);//檢測忙信號
      return(P1_7);
      }

      void LCMInit(void) //LCM初始化
      {
      LCM_Data=0xff;
      writelcd(0,0x28); //三次顯示模式設置,不檢測忙信號
      Delay5Ms();
      writelcd(0,0x28);
      Delay5Ms();
      writelcd(0,0x28);
      Delay5Ms();
      writelcd(0,0x28); //顯示模式設置,開始要求每次檢測忙信號
      writelcd(0,0x0c); // 顯示開及光標設置
      writelcd(0,0x01); //顯示清屏
      writelcd(0,0x06); // 顯示光標移動設置
      }

      //按指定位置顯示一個字符
      void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
      {
      Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1
      if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
      X |= 0x80; //算出指令碼
      writelcd(0,X);
      writelcd(1,DData);
      }

      //按指定位置顯示一串字符 ***原來的遇到空格0x20就不顯示***
      void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
      {
      unsigned char ListLength,j;
      ListLength = strlen(DData);
      Y &= 0x1;
      X &= 0xF; //限制X不能大于15,Y不能大于1
      if (X <= 0xF) //X坐標應小于0xF
      {
      for(j=0;j<ListLength;j++)
      {
      DisplayOneChar(X, Y, DData[j]); //顯示單個字符
      X++;
      }
      }
      }

      //5ms延時
      void Delay5Ms(void)
      {
      unsigned int TempCyc = 5552;
      while(TempCyc--);
      }

      //400ms延時
      void Delay400Ms(void)
      {
      unsigned char TempCycA = 5;
      unsigned int TempCycB;
      while(TempCycA--)
      {
      TempCycB=7269;
      while(TempCycB--);
      };
      }
      /////LCM_end///////

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一区二区日韩成人动漫 | 亚洲国产嫩草影院 | 日本一本高清中文字幕视频 | 婷婷亚洲一区二区三区 | 亚洲国产91一区二区 | 午夜一级a成年大片在线 |