新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 12232c液晶顯示和8051單片機的接口c語言程序

        12232c液晶顯示和8051單片機的接口c語言程序

        作者: 時間:2016-11-10 來源:網絡 收藏
        以下為彭總編寫的c語言程序,我用過了!赫赫!!在atmega128中寫通訊協議的頭四位數字時好像不能分開一位一位的送,而是要把它當作一個16進制的整體移位寫入!程序中的comm為寫0表示寫12232c的指令,dat為1表示寫數據。cs,sclk,std分別為片選、時鐘、及數據io口,可用sbit指令定義。

        /************lcd初始化程序**************/
        void init_lcd (void)
        {
        wr_lcd (comm,0x30); /*30---基本指令集動作,8位控制接口*/
        wr_lcd (comm,0x01); /*清屏,地址指針指向00H*/
        delay (80);
        wr_lcd (comm,0x06); /*光標的移動方向,光標右移*/
        wr_lcd (comm,0x0c); /*開顯示,關光標*/
        }

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

        /******************LCD顯示任意量程序********************/
        void eng_disp (uchar x,uchar y,uchar code *eng)
        {
        uchar i,j;
        wr_lcd (comm,0x30);
        wr_lcd (comm,0x80); /*第一行的起始地址*/
        for(j=0;j {
        for (i=0;i wr_lcd (dat,eng[j*16+i]);
        if((y==2)&&(j==1))
        {wr_lcd (comm,0x90);
        for (i=0;i<8;i++)
        wr_lcd (dat,eng[j*16+i]);
        }
        }
        }

        /*********************LCD顯示中文(歡迎界面)程序******************/

        void chn_disp (uchar code *chn) /*lcd顯示中文*/
        {
        uchar i,j;
        wr_lcd (comm,0x30);
        wr_lcd (comm,0x80); /*第一行的起始地址*/
        j=0;
        for (i=0;i<16;i++)
        wr_lcd (dat,chn[j*16+i]);
        wr_lcd (comm,0x90); //第二行的起始地址
        j=1;
        for (i=0;i<16;i++)
        wr_lcd (dat,chn[j*16+i]);
        }

        /***************************LCD清內存程序*******************/
        void clrram (void) //lcd清內存
        {
        wr_lcd (comm,0x30);
        wr_lcd (comm,0x01);
        delay (120);
        }

        /*************LCD寫數據或寫命令子程序****************/

        void wr_lcd (uchar dat_comm,uchar content) /*lcd寫數據*/
        {
        uchar a,i,j;
        delay (40);
        a=content; //a為指令代碼或者數據
        cs=1; //置位cs開始傳輸數據
        sclk=0; //拉低sclk準備給上升沿,發送數據
        std=1; //置1
        for(i=0;i<5;i++) /*先傳輸起始字節,首先5個1,sclk的上升沿傳輸啟動*/
        {
        sclk=1;
        sclk=0;
        }
        std=0; //RW=0;
        sclk=1;
        sclk=0;
        if(dat_comm)
        std=1; //如果是數據則RS為1
        else
        std=0; //如果是控制字則RS為0
        sclk=1; //給上升沿,啟動傳輸
        sclk=0; //拉低sclk
        std=0; //第8位為0,起始字節傳輸完畢
        sclk=1; //給上升沿,啟動傳輸
        sclk=0;
        for(j=0;j<2;j++) //一個字節分兩次發送,第一次發送高四位,后面補4個0,第二次發送低4位,后面同樣補4個0
        {
        for(i=0;i<4;i++) //先傳輸高4位
        {
        a=a<<1; //數據循環左移一位,低位補0
        std=CY; //把進位進行傳輸
        sclk=1;
        sclk=0;
        }
        std=0;
        for(i=0;i<4;i++) //后4位數據為4個0
        {
        sclk=1;
        sclk=0;
        }
        }
        }

        /**********************LCD延時程序************************************/
        void delay (uint us) //lcd延時時間
        {
        while(us--);
        }
        void delay1 (uint ms)
        {
        uint i,j;
        for(i=0;i for(j=0;j<15;j++)
        delay(1);
        }
        /*********************顯示數據位子程序*******************/

        void math_disp(uint math)
        { uint k;
        uchar i;
        uchar j;
        k=math;
        dispbuf[0]=k/10000; //得到萬位數
        k=k%10000;
        dispbuf[1]=k/1000; //得到千位數
        k=k%1000;
        dispbuf[2]=k/100; //得到百位數
        k=k%100;
        dispbuf[3]=k/10; //得到十位數
        dispbuf[4]=k%10; //得到個位數
        wr_lcd (comm,0x90); //給第二行的起始地址以讓數據在第二行顯示,
        for(i=0;i<5;i++)
        {
        for(j=0;j<2;j++) //連續顯示兩個tab2中的字節,LCD自動把這兩個字節聯系起來顯示一個數據
        {
        wr_lcd(dat,tab2[xs2*dispbuf[i]+j]); //調用顯示子函數
        }
        }
        }



        關鍵詞: 12232c液晶顯示805

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 靖西县| 丽水市| 广灵县| 朔州市| 景泰县| 察隅县| 介休市| 潼南县| 兰州市| 怀远县| 常德市| 蒙山县| 罗江县| 白水县| 花莲县| 千阳县| 喜德县| 郁南县| 兴化市| 扬州市| 桦南县| 乐东| 雅江县| 巨野县| 额尔古纳市| 吴堡县| 定远县| 报价| 襄城县| 永胜县| 准格尔旗| 于田县| 温州市| 武山县| 南开区| 信丰县| 沂南县| 东莞市| 黔江区| 蒲江县| 贵定县|