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

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于8位單片機(jī)驅(qū)動(dòng)液晶屏的應(yīng)用總結(jié)

            關(guān)于8位單片機(jī)驅(qū)動(dòng)液晶屏的應(yīng)用總結(jié)

            作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
            如何構(gòu)成一個(gè)顯示系統(tǒng):
            電源+MCU+TFT液晶屏
            呵呵,是不是覺(jué)得少了點(diǎn)什么?驅(qū)動(dòng)IC那里去了?
            其實(shí)驅(qū)動(dòng)IC我們是看不到的,它被集成在了液晶屏中,我們只要知道它的寄存器的定義,利用液晶屏的端口會(huì)進(jìn)行讀寫(xiě)即可。
            電源:3.3V的直流電源,呵呵,這個(gè)不用細(xì)說(shuō),小功率的可以利用ASM1117-3;大功率的可以利用LM2596S-3.3(最高3A的輸出)來(lái)構(gòu)成一個(gè)電源。
            MCU:主要是3個(gè)要求。
            工作電壓,3.3V
            夠大,
            夠快。
            夠大才能存的下程序和數(shù)據(jù),夠快才會(huì)圖像流暢。
            本人手頭只有15L2K08S2這個(gè)單片機(jī),8K程序存儲(chǔ)區(qū),2K的SRAM,最高時(shí)鐘33.1776MHz,最高輸出8MHz的外部時(shí)鐘,比起60S2的60KB的FLASH,小了不少,但是對(duì)于普通的不太復(fù)雜的應(yīng)用已經(jīng)足夠了,主要是搞通應(yīng)用的原理。
            液晶屏:
            以上列舉的液晶屏都是串口屏,所以屏的引出腳較少,除此之外還有引出管腳較多的并口屏,
            當(dāng)然串口屏的數(shù)據(jù)是一位一位的送出的,速度相對(duì)是比較慢的。
            在操作上,串口和并口原理差不多。這里就先介紹串口屏的使用。
            好了,你有了上面的3大件下面在準(zhǔn)備點(diǎn)輔料。
            1、數(shù)據(jù)線,USB轉(zhuǎn)串口數(shù)據(jù)線,用于燒寫(xiě)MCU
            2、字符LCD點(diǎn)陣提取軟件:百度一下吧,zimo221.exe
            3、圖片點(diǎn)陣數(shù)據(jù)提取軟件:同樣百度,Image2Lcd.exe
            4、編程軟件:KEIL
            5、單片機(jī)燒寫(xiě)軟件:這個(gè)不多說(shuō)了,看你用的芯片而定。
            好的,齊活了,準(zhǔn)備開(kāi)工。
            用導(dǎo)線將單片機(jī)的電源接口和LCD的電源及LED端口同3.3V電源的輸出連接起來(lái)。供電的問(wèn)題解決了。
            用導(dǎo)線將自己選擇的單片機(jī)的端口和LCD的REST、CS、SCL、AO、SDA一一對(duì)應(yīng)的連接起來(lái)。數(shù)據(jù)輸出的問(wèn)題解決。
            硬件問(wèn)題解決,開(kāi)始代碼的編寫(xiě)
            TFT初始化函數(shù):
            也就是對(duì)液晶屏進(jìn)行基本的配置。
            這個(gè)基本直接套用就行。(除了個(gè)別地方需要修改,后面會(huì)說(shuō))
            TFT驅(qū)動(dòng)芯片的手冊(cè)還是有必要看看的,最好是看英文原版內(nèi)容比較詳細(xì)。
            也沒(méi)有必要全部看,但是下面初始化代碼中涉及到的指令及4wireSPI的時(shí)序圖,還是很有必要了解的,不然顯示的界面出了問(wèn)題,就會(huì)感覺(jué)無(wú)從下手解決。
            寫(xiě)數(shù)據(jù)和寫(xiě)命令
            很明顯要想讓液晶屏顯示字符或圖像,必須要把要顯示的內(nèi)容轉(zhuǎn)換成數(shù)據(jù)寫(xiě)到液晶屏的控制器,想寫(xiě)內(nèi)容數(shù)據(jù)還要對(duì)液晶屏的控制寄存器進(jìn)行設(shè)置,也就是寫(xiě)命令數(shù)據(jù)。只有一條SDA串口數(shù)據(jù)線,怎么區(qū)分是內(nèi)容數(shù)據(jù)還是命令數(shù)據(jù)呢,那就要靠AO(RS):寄存器選擇信號(hào)(低電平:選擇命令寄存器;高電平:選擇數(shù)據(jù)寄存器)。
            寫(xiě)命令
            voidwrite_command(ucharc)
            {
            cs=0;//片選有效
            rs=0;//選擇命令寄存器
            bitdata=c;//送數(shù)據(jù)
            sda=bit7;scl=0;scl=1;
            sda=bit6;scl=0;scl=1;
            sda=bit5;scl=0;scl=1;
            sda=bit4;scl=0;scl=1;
            sda=bit3;scl=0;scl=1;
            sda=bit2;scl=0;scl=1;
            sda=bit1;scl=0;scl=1;
            sda=bit0;scl=0;scl=1;
            cs=1;//片選無(wú)效
            }
            寫(xiě)數(shù)據(jù)
            voidwrite_data(uchard)
            {
            cs=0;
            rs=1;
            bitdata=d;
            sda=bit7;scl=0;scl=1;
            sda=bit6;scl=0;scl=1;
            sda=bit5;scl=0;scl=1;
            sda=bit4;scl=0;scl=1;
            sda=bit3;scl=0;scl=1;
            sda=bit2;scl=0;scl=1;
            sda=bit1;scl=0;scl=1;
            sda=bit0;scl=0;scl=1;
            cs=1;
            }
            初始化
            /*****************TFT初始化函數(shù)***************/
            voidlcd_initial()
            {
            reset=0;
            delay(100);
            reset=1;
            delay(100);
            //------------------------------------------------------------------//
            //-------------------SoftwareReset-------------------------------//
            write_command(0x2A);//列地址設(shè)置
            write_data(0x00);//列起始地址低8位
            write_data(0x00);//列起始地址高8位
            write_data(0x00);//列終止地址高8位
            write_data(0x9F);//列終止地址低8位
            //上面的列終止地址為什么設(shè)置成0x9f,0x9f=十進(jìn)制的159,1.8寸的屏的分辨率是128*160.
            //也就是說(shuō)有0-159共160列。下面的同樣的道理,只不過(guò)是說(shuō)明行的起始和終止地址。
            write_command(0x2B);//行地址設(shè)置
            write_data(0x00);
            write_data(0x00);
            write_data(0x00);
            write_data(0x7F);
            write_command(0xCB);//功耗控制A
            write_data(0x39);
            write_data(0x2C);
            write_data(0x00);
            write_data(0x34);
            write_data(0x02);
            write_command(0xCF);//功耗控制B
            write_data(0x00);
            write_data(0XC1);
            write_data(0X30);
            write_command(0xE8);//驅(qū)動(dòng)時(shí)序控制A
            write_data(0x85);
            write_data(0x00);
            write_data(0x78);
            write_command(0xEA);//驅(qū)動(dòng)時(shí)序控制B
            write_data(0x00);
            write_data(0x00);
            write_command(0xED);//電源序列控制
            write_data(0x64);
            write_data(0x03);
            write_data(0X12);
            write_data(0X81);
            write_command(0xF7);//泵比控制
            write_data(0x20);
            write_command(0xC0);//Powercontrol功耗控制1
            write_data(0x23);//VRH[5:0]`
            write_command(0xC1);//Powercontrol功耗控制2
            write_data(0x10);//SAP[2:0];BT[3:0]
            write_command(0xC5);//VCMcontrol
            write_data(0x3e);//對(duì)比度調(diào)節(jié)
            write_data(0x28);
            write_command(0xC7);//VCMcontrol2
            write_data(0x86);//--
            write_command(0x36);//MemoryAccessControl存儲(chǔ)器訪問(wèn)控制
            write_data(0x68);//C8//4868豎屏//28E8橫屏
            //cc同c8
            write_command(0x3A);//像素格式設(shè)置
            write_data(0x55);
            write_command(0xB1);//幀速率控制
            write_data(0x00);
            write_data(0x18);
            write_command(0xB6);//DisplayFunctionControl
            write_data(0x08);
            write_data(0x82);
            write_data(0x27);
            write_command(0xF2);//3GammaFunctionDisable
            write_data(0x00);
            write_command(0x26);//Gammacurveselected
            write_data(0x01);//共4條曲線供選擇,分別是1248;這里選擇1,
            write_command(0xE0);//SetGamma
            write_data(0x0F);
            write_data(0x31);
            write_data(0x2B);
            write_data(0x0C);
            write_data(0x0E);
            write_data(0x08);
            write_data(0x4E);
            write_data(0xF1);
            write_data(0x37);
            write_data(0x07);
            write_data(0x10);
            write_data(0x03);
            write_data(0x0E);
            write_data(0x09);
            write_data(0x00);
            write_command(0XE1);//SetGamma
            write_data(0x00);
            write_data(0x0E);
            write_data(0x14);
            write_data(0x03);
            write_data(0x11);
            write_data(0x07);
            write_data(0x31);
            write_data(0xC1);
            write_data(0x48);
            write_data(0x08);
            write_data(0x0F);
            write_data(0x0C);
            write_data(0x31);
            write_data(0x36);
            write_data(0x0F);
            write_command(0x11);//ExitSleep
            delay(120);
            write_command(0x29);//Displayon
            write_command(0x2c);
            }
            在寫(xiě)入數(shù)據(jù)時(shí)要先確定,圖像的起始坐標(biāo)和終止坐標(biāo),可以用如下的代碼實(shí)現(xiàn)
            staticvoidLCD_SetPos(unsignedintx0,unsignedintx1,unsignedinty0,unsignedinty1)//設(shè)置位置
            {
            write_command(0x2A);//列地址設(shè)置
            write_data(x0>>8);//列起始地址高8位
            write_data(x0);//列起始地址低8位
            write_data(x1>>8);//列終止地址高8位
            write_data(x1);//列終止地址低8位
            write_command(0x2B);//頁(yè)地址設(shè)置
            write_data(y0>>8);
            write_data(y0);
            write_data(y1>>8);
            write_data(y1);
            write_command(0x2c);//寫(xiě)存儲(chǔ)器
            }
            寫(xiě)命令時(shí),先將命令的地址寫(xiě)入,然后在將設(shè)定的數(shù)據(jù)寫(xiě)入寄存器。如
            write_command(0x2A);//列地址設(shè)置
            write_data(0x00);
            write_data(0x00);
            write_data(0x00);
            write_data(0x9F);
            至于這些寫(xiě)入的數(shù)據(jù)的意義及數(shù)值大小,請(qǐng)查閱液晶屏對(duì)應(yīng)的液晶屏的數(shù)據(jù)手冊(cè)。
            了解一下顏色代碼:
            幾種常用的顏色的代碼
            #defineWhite0xFFFF//白
            #defineBlack0x0000//黑
            #defineRed0x001F//紅
            #defineBlue0xF800//藍(lán)
            #defineMagenta0xF81F//紫
            #defineGreen0x07E0//綠
            #defineCyan0x07FF//青
            #defineYellow0xFFE0//黃
            好了說(shuō)了這么多,一個(gè)字暈。好吧,來(lái)點(diǎn)實(shí)際的簡(jiǎn)單的,咱先啥字符也不顯示,
            只是讓液晶屏顯示不同的顏色。
            刷整個(gè)屏幕的顏色
            可以用如下代碼實(shí)現(xiàn)
            /*********顯示色彩******************/
            voiddsp_single_colour(DH,DL)//前景顏色,背景顏色
            {
            unsignedinti,j;
            for(i=0;i<128;i++)
            for(j=0;j<160;j++)
            {
            write_data(DH>>8);
            write_data(DH);
            write_data(DL>>8);
            write_data(DL);
            }
            }
            延時(shí)函數(shù)
            /******延時(shí)函數(shù)************************/
            voiddelay(uinttime)
            {
            uinti,j;
            for(i=0;ifor(j=0;j<500;j++);
            }
            好了,將上面的函數(shù)組合起來(lái),準(zhǔn)備刷屏。
            main()
            {
            lcd_initial();//TFT初始化
            while(1)
            {
            LCD_SetPos(0,159,0,10);//設(shè)置位置
            dsp_single_colour(Blue,Black);//
            delay(2000);
            LCD_SetPos(0,159,10,20);//設(shè)置位置
            dsp_single_colour(Blue,Blue);//
            delay(2000);
            LCD_SetPos(0,159,20,30);//設(shè)置位置
            dsp_single_colour(Green,White);//
            delay(2000);
            LCD_SetPos(0,159,30,40);//設(shè)置位置
            dsp_single_colour(Green,Green);//
            delay(2000);
            LCD_SetPos(0,159,40,50);//設(shè)置位置
            dsp_single_colour(Yellow,White);//
            delay(2000);
            LCD_SetPos(0,159,50,60);//設(shè)置位置
            dsp_single_colour(Yellow,Yellow);//
            delay(2000);
            LCD_SetPos(0,159,60,70);//設(shè)置位置
            dsp_single_colour(Black,White);//
            delay(2000);
            LCD_SetPos(0,159,70,80);//設(shè)置位置
            dsp_single_colour(Black,Black);//
            delay(2000);
            LCD_SetPos(0,159,80,90);//設(shè)置位置
            dsp_single_colour(Red,White);//
            delay(2000);
            LCD_SetPos(0,159,90,100);//設(shè)置位置
            dsp_single_colour(Red,Red);//
            delay(2000);
            LCD_SetPos(0,159,100,110);//設(shè)置位置
            dsp_single_colour(Magenta,Black);//
            delay(2000);
            LCD_SetPos(0,159,110,120);//設(shè)置位置
            dsp_single_colour(Magenta,Magenta);//
            delay(2000);
            LCD_SetPos(0,159,0,120);//設(shè)置位置
            dsp_single_colour(White,White);//只刷到第121行留下了7行
            delay(2000);

            評(píng)論


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

            關(guān)閉