色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 液晶顯示器控制設計

          液晶顯示器控制設計

          作者: 時間:2016-10-15 來源:網(wǎng)絡 收藏

          利用實現(xiàn)數(shù)字和英文字符的顯示

          本文引用地址:http://cafeforensic.com/article/201610/307635.htm

          實驗原理圖

          實驗程序

          #include

          #include

          #include

          #include

          #include

          #define busy 0x80 //用于檢測LCD 狀態(tài)字中的Busy 標識

          #define RSaddr 0x1000

          #define RWaddr 0x2000

          #define CSaddr 0x0400

          #define adtn 0xc8ff

          #define wc 0xcfff

          #define wd 0xdfff

          #define rc 0xefff

          unsigned char code homepage[] = {www.ispdown.com};

          unsigned char code email[] = {ispdown@21cn.com};

          //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--);

          };

          }

          //--------------------------------

          void waitLcd()

          {

          char temp;

          bit flag=1;

          while(flag==1)

          {

          //temp=XBYTE[CSaddr+RWaddr+adtn];

          temp=XBYTE[rc];

          if (temp>>7==0) flag=0;

          P1=temp;

          }

          P1=0xff;

          }

          //---------------------------------

          void WC_Lcd(bit isCheck,char c)

          {

          if (isCheck==1) waitLcd();

          //XBYTE[CSaddr+adtn]=c;

          XBYTE[wc]=c;

          }

          //--------------------------------

          void WD_Lcd(char c)

          {

          waitLcd();

          //XBYTE[CSaddr+RSaddr+adtn]=c;

          XBYTE[wd]=c;

          }

          //----------------------------------

          void LcdInit()

          {

          delay5ms();

          delay5ms();

          delay5ms();

          WC_Lcd(0,0x38); //三次顯示模式設置,不檢測忙信號

          delay5ms();

          WC_Lcd(0,0x38);

          delay5ms();

          WC_Lcd(0,0x38);

          delay5ms();

          WC_Lcd(1,0x38); //顯示模式設置,開始要求每次檢測忙信號

          WC_Lcd(1,0x08); //關閉顯示

          WC_Lcd(1,0x01); //顯示清屏

          WC_Lcd(1,0x06); // 顯示光標移動設置

          WC_Lcd(1,0x0C); // 顯示開及光標設置

          }

          //-------------------------------------------------------------------------

          //按指定位置顯示一個字符

          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; //算出指令碼

          WC_Lcd(0,X); //這里不檢測忙信號,發(fā)送地址碼

          WD_Lcd(DData);

          }

          //-------------------------------------------------------------------------------

          //按指定位置顯示一串字符

          void displayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

          {

          unsigned char ListLength;

          ListLength = 0;

          Y = 0x1;

          X = 0xF; //限制X 不能大于15,Y 不能大于1

          while (DData[ListLength]>0x20) //若到達字串尾則退出

          {

          if (X = 0xF) //X 坐標應小于0xF

          {

          displayOneChar(X, Y, DData[ListLength]); //顯示單個字符

          ListLength++;

          X++;

          }

          }

          }

          //====================================

          void main(void)

          {

          delay400ms();

          LcdInit();

          displayListChar(0, 0, homepage);

          displayListChar(0, 1, email);

          while(1);

          }



          評論


          相關推薦

          技術專區(qū)

          關閉