在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 12864實際應(yīng)用的驅(qū)動程序

        12864實際應(yīng)用的驅(qū)動程序

        作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
        一下程序在使用時,緊緊結(jié)合每句后面的注釋進行修改,比如端口的銜接問題

        這是一個12864結(jié)合ST168進行方位顯示的程序:

        本文引用地址:http://www.biyoush.com/article/201611/321640.htm

        使用技巧:只需從中復(fù)制有關(guān)12864的驅(qū)動程序,修改相關(guān)參數(shù)即可

        #include

        #define uchar unsigned char

        #define uint unsigned int //宏定義

        sbit SID = P2^1; //串行數(shù)據(jù)RW端口

        sbit SCLK = P2^2; //串行同步時鐘 E

        sbit cs=P2^0; //為寫rs端口

        sbit psb=P2^3;

        uchar code display1[]={"123"},

        //定義一個要顯示的數(shù)據(jù)串,只當是12864中的字庫,必須要雙引號,特定意義

        display8[]={"456"},

        display2[]={"789"},

        display9[]={"458"},

        display3[]={"654"},

        display7[]={"785!"},

        display4[]={"4254"},

        display10[]={"4587"},

        display5[]={"1010"},

        display11[]={"10201"},

        display6[]={"15420"},

        display12[]={"1201245"},

        displayrt[]={"前42452!!"},

        display13[]={"4524返回"};

        char dir=0,dil=0,zongjil[]={"5204 次"},

        zongjir[]={"右4520"};

        void delayms(uint t) //約延時n(ms)

        { uint i;

        while(t--)

        { for(i=0;i<125;i++); }

        }

        void SendByte(uchar Dbyte) //必須的子函數(shù),寫指令和寫數(shù)據(jù)都需要調(diào)用

        {

        uchar i; for(i=0;i<8;i++)

        { SCLK = 0;

        Dbyte=Dbyte<<1;

        //左移一位

        SID = CY; //移出的位給SID,CY為Dbyte的最好位,下降沿將數(shù)據(jù)傳入

        SCLK = 1;

        SCLK = 0; }

        }

        uchar ReceiveByte(void) //檢查忙碌的時候調(diào)用

        { uchar i,temp1,temp2;

        temp1 = 0;

        temp2 = 0;

        for(i=0;i<8;i++)

        { temp1=temp1<<1;//傳出來的是從高位到低位,從SID中傳出來

        SCLK = 0;

        SCLK = 1;

        SCLK = 0;//下降沿傳出數(shù)據(jù)

        if(SID)

        temp1++;

        }

        for(i=0;i<8;i++)

        {

        temp2=temp2<<1;

        SCLK = 0;

        SCLK = 1;

        SCLK = 0;

        if(SID) temp2++;//低位先出來

        }

        return ((0xf0&temp1)+(0x0f&temp2));//高八位和低八位

        }

        void CheckBusy( void )

        {

        do SendByte(0xfc); //11111,RW(1),RS(0),0

        while(0x80&ReceiveByte());

        //BF(.7)=1 Busy

        }

        void Lcd_WriteCmd(uchar Cbyte )

        { CheckBusy();

        SendByte(0xf8); //11111,RW(0)A(低表示從單片機到LCD,RS(0)B(低表示指令),0C固定我0;

        SendByte(0xf0&Cbyte); //高四位

        SendByte(0xf0&(Cbyte<<4));

        //低四位(先執(zhí)行<<)

        }

        void Lcd_WriteData(uchar Dbyte )

        { CheckBusy();

        SendByte(0xfa);

        //11111,RW(0),RS(1),0

        SendByte(0xf0&Dbyte);

        //高四位

        SendByte(0xf0&Dbyte<<4);//低四位(先執(zhí)行<<)

        }

        void Lcd_Init(void)

        { delayms(50);

        Lcd_WriteCmd(0x30);

        //選擇基本指令集

        delayms(1);

        Lcd_WriteCmd(0x30);

        //選擇8bit數(shù)據(jù)流

        delayms(1);

        Lcd_WriteCmd(0x0c);

        //開顯示(無游標、不反白)

        delayms(1);

        Lcd_WriteCmd(0x01); //清除顯示,并且設(shè)定地址指針為00H

        delayms(20); }

        void LCD12864_Write_Str(unsigned char x,unsigned char y,char *buff)//尋找地址

        { unsigned char addr,i=0;

        if(x==1)addr=0x80;

        if(x==2)addr=0x90;

        if(x==3)addr=0x88;

        if(x==4)addr=0x98;

        addr=addr+y;

        Lcd_WriteCmd(0x30); //基本指令功能

        write_com(0x30);//發(fā)出尋地址指令 //

        delay_ms(10);

        Lcd_WriteCmd(addr);

        //基本指令功能.

        write_com(addr);//尋找地址

        while(buff[i]!=)

        { Lcd_WriteData(buff[i]);

        //write_data(buff[i]); i++; } }

        void main()

        { uchar shuju,num[]={"0123456789"},a=1,b=1;

        P1=0xff;

        cs=1;

        psb=0;

        Lcd_Init(); // LCD初始化 ,讓LCD處于白屏狀態(tài).

        delayms(10);

        while(1)

        { Lcd_Init();

        shuju=P1;

        //shuju&=0xf8;

        if((shuju==0xf7|shuju==0xef)&&a==1)

        dil++;

        if((shuju==0xfd|shuju==0xfb)&&b==1)

        dir++;

        zongjil[8]=num[dil/10];

        zongjil[9]=num[dil];

        zongjir[8]=num[dir/10];

        zongjir[9]=num[dir];

        switch(shuju) { case 0xf7: { LCD12864_Write_Str(2,0,display8);//左

        LCD12864_Write_Str(1,0,display1);

        LCD12864_Write_Str(3,0,zongjil);

        a++;

        b=0;

        break; }

        case 0xef: { LCD12864_Write_Str(2,0,display9);//左

        LCD12864_Write_Str(1,0,display2);

        LCD12864_Write_Str(3,0,zongjil);

        a++;

        b=0;

        break;

        }

        case 0xfe:

        { LCD12864_Write_Str(2,0,display7); LCD12864_Write_Str(1,0,display3); break; } //(行,列,字符)

        case 0xfd: { LCD12864_Write_Str(2,0,display10);//右

        LCD12864_Write_Str(1,0,display4);

        LCD12864_Write_Str(3,0,zongjir);

        b++;

        a=0;

        break;

        }

        case 0xfb:

        { LCD12864_Write_Str(2,0,display11);//右

        LCD12864_Write_Str(1,0,display5);

        LCD12864_Write_Str(3,0,zongjir);

        b++; a=0;

        break; }

        case 0xe0: { LCD12864_Write_Str(2,0,display13);

        LCD12864_Write_Str(1,0,displayrt); break; }

        default: LCD12864_Write_Str(2,0,display12);

        LCD12864_Write_Str(1,0,display6); break; }

        delayms(500); } }



        評論


        技術(shù)專區(qū)

        關(guān)閉
        ×

        “芯”朋友见面大会
        珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>