新聞中心

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

        液晶顯示器控制設計

        作者: 時間:2016-10-15 來源:網絡 收藏

        利用實現數字和英文字符的顯示

        本文引用地址:http://www.104case.com/article/201610/307635.htm

        實驗原理圖

        實驗程序

        #include

        #include

        #include

        #include

        #include

        #define busy 0x80 //用于檢測LCD 狀態字中的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); //這里不檢測忙信號,發送地址碼

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

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东兴市| 同心县| 依安县| 民丰县| 常熟市| 信丰县| 仪征市| 凯里市| 高邑县| 巴南区| 南平市| 阳西县| 姚安县| 满城县| 封丘县| 黄陵县| 通渭县| 五家渠市| 宣城市| 常山县| 凭祥市| 新田县| 开平市| 鄢陵县| 辉南县| 台南市| 宜州市| 桦南县| 柏乡县| 旬阳县| 淳安县| 永昌县| 浦东新区| 新余市| 八宿县| 太谷县| 深圳市| 高平市| 石台县| 大竹县| 娱乐|