<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

          基于單片機(jī)的VRAM型彩色液晶顯示模塊設(shè)計(jì)

          作者: 時(shí)間:2011-10-14 來源:網(wǎng)絡(luò) 收藏
          4  軟件系統(tǒng)及實(shí)現(xiàn)

          本文引用地址:http://www.ex-cimer.com/article/172447.htm

            4. 1  操作YD2502 的程序

            YD2502 的指令碼格式如下:

            其中: CA1 ,CA0 組合功能為內(nèi)部寄存器通道的選擇,功能如下:

            DISP :顯示控制位。

            當(dāng)DISP 設(shè)置為“1”時(shí),為開顯示狀態(tài)。

            當(dāng)DISP 設(shè)置為“0”時(shí),為關(guān)顯示狀態(tài)。

            X:表示未用位,可設(shè)為“0”。

            ATmega128 訪問外部存儲(chǔ)器的軟件步驟是:先用extern 聲明一個(gè)外部變量,再用map2ping_init 函數(shù)(外部存儲(chǔ)地址分配函數(shù)) 分配給此變量一個(gè)外部存儲(chǔ)地址(因A Tmega128 內(nèi)部有4 kB 的SRAM 所以外部存儲(chǔ)地址范圍為1000H~0FFFFH) ,那么對(duì)該變量的操作就實(shí)現(xiàn)了CPU 對(duì)相應(yīng)地址的外部存儲(chǔ)空間的訪問。

          根據(jù)此步驟,對(duì)YD2502 寫指令和寫數(shù)據(jù)的具體函數(shù)如下:

            extern unsigned char LCD_DA TA ;

            void  mapping_init (void) {

            asm(“。 area memory (abs) n”

            “。 org 0x4000n ”  / / 分配給LCD_DA TA 的地址為4000H

            “ _LCD_DA TA : : . blkb 1 n”/ / 存儲(chǔ)空間為1

            “。 text/ n”) ;}

            寫指令函數(shù)如下:

            void  LCD_writeinstr (unsigned char data) {

            PORTD = 0xFC ;    / / 置/ CS 為低電平,并且置RS 為低電平,處于寫指令狀態(tài)

            LCD_DA TA = data ; / / 送數(shù)據(jù)

            PORTD | = 0x03 ;} / / 置/ CS 和RS為高電平

            寫數(shù)據(jù)函數(shù)如下:

            void  LCD_writedata (unsigned char data) {

            PORTD = 0xFE ;   / / 置/ CS 為低,并且置RS 為高電平,處于寫數(shù)據(jù)狀態(tài)

            LCD_DA TA = data ; / / 送數(shù)據(jù)

            PORTD | = 0x01 ;} / / 置/ CS 為高電平除了上面兩個(gè)基本的函數(shù)外,對(duì)YD2502 最基本的操作是往 里寫數(shù)據(jù),根據(jù)上面給出的指令碼,具體函數(shù)如下:

            # define  HREG   0x09  / / 顯示地址高8 位寄存器指令

            # define  L REG 0x08 / / 顯示地址低8 位寄存器指令

            # define  DA TARW 0x0A / / 顯示數(shù)據(jù)讀寫通道指令

            void  LCD_filldata ( unsigned int address ,

            unsigned char data) {

            unsigned char addrh ,addrl ;

            addrh = (char) (address > > 8) ;  / / 取內(nèi)存地址的高8 位數(shù)據(jù)

            addrl = (char) (address 0xFF) ;  / / 取內(nèi)存地址的低8 位數(shù)據(jù)

            LCD_writeinst r ( HREG) ;  / / 送顯示地址高8 位寄存器指令

            LCD_writedata (addrh) ;  / / 送內(nèi)存地址的高8 位數(shù)據(jù)

            LCD_writeinst r (L REG) ;  / / 送顯示地址低8 位寄存器指令

            LCD_writedata (addrl) ;  / / 送內(nèi)存地址的低8 位數(shù)據(jù)

            LCD_writeinst r (DA TARW) ;  / / 送顯示數(shù)據(jù)讀寫通道指令

            LCD_writedata (data) ;}  / / 送數(shù)據(jù)

            4. 2  畫點(diǎn)函數(shù)的實(shí)現(xiàn)

            要在液晶上實(shí)現(xiàn)顯示字符和畫圖等功能,在屏幕上顯示一個(gè)點(diǎn)是實(shí)現(xiàn)這些功能的基礎(chǔ)。畫點(diǎn)函數(shù)實(shí)現(xiàn)的步驟是:首先確定該點(diǎn)對(duì)應(yīng)的中的內(nèi)存位置,找到該點(diǎn)具體對(duì)應(yīng)的數(shù)據(jù)位,填充顯示顏色的數(shù)據(jù),該點(diǎn)就按對(duì)應(yīng)的顏色顯示出來了。

            4. 2. 1  顯示內(nèi)存與屏幕點(diǎn)陣的對(duì)應(yīng)關(guān)系

            YD2502 屏幕點(diǎn)陣為320 ×240 ,每一個(gè)點(diǎn)對(duì)應(yīng)3 個(gè)像素(RGB) ,屏幕上8 個(gè)點(diǎn)對(duì)應(yīng)內(nèi)存3 個(gè)字節(jié),一行對(duì)應(yīng)320/ 8 ×3 = 120 個(gè)字節(jié),其對(duì)應(yīng)關(guān)系如下:

            其中R ,G,B 表示紅、綠、藍(lán)三原色,D7~D0 表示對(duì)應(yīng)的數(shù)據(jù)位。

          對(duì)于屏幕上坐標(biāo)為( X , Y) 的點(diǎn),其對(duì)應(yīng)內(nèi)存地址的計(jì)算方法為:

            當(dāng)Y = 0 時(shí)  SRAM = 0EFH ×100H +[ IN T( X/ 8) ] ×3

            當(dāng)Y > 0 時(shí)  SRAM = ( Y - 1) ×100H +[ IN T( X/ 8) ] ×3

            通過( X/ 8) 的余數(shù)得出具體的內(nèi)存位置:

            當(dāng)余數(shù)為0  則 RAM = SRAM  [ 1110 ,0000 ]

            當(dāng)余數(shù)為1  則 RAM = SRAM  [ 0001 ,1100 ]

            當(dāng)余數(shù)為2  則 RAM1 = SRAM  [ 0000 ,0011 ]

            RAM2 = SRAM + 1[1000 ,0000 ]

            當(dāng)余數(shù)為3  則 RAM = SRAM + 1[0111 ,0000 ]

            當(dāng)余數(shù)為4  則 RAM = SRAM + 1[0000 ,1110 ]

            當(dāng)余數(shù)為5  則 RAM1 = SRAM + 1[0000 ,0001 ]

            RAM2 = SRAM + 2[1100 ,0000 ]

            當(dāng)余數(shù)為6  則 RAM = SRAM + 2[0011 ,1000 ]

            當(dāng)余數(shù)為7  則 RAM = SRAM + 2[0000 ,0111 ]

            其中[ ]內(nèi)為“1”的位表示應(yīng)該填充顏色的位置, SRAM 表示該點(diǎn)對(duì)應(yīng)的基礎(chǔ)地址, RAM、RAM1 和RAM2 表示該點(diǎn)對(duì)應(yīng)的實(shí)際內(nèi)存地址。

            當(dāng)數(shù)據(jù)位為“1”時(shí),對(duì)應(yīng)色點(diǎn)為亮;為“0”時(shí),對(duì)應(yīng)色點(diǎn)為暗。通過RGB 三原色組合而得到的8 種顏色代碼如下:

            例1 :若X 、Y 坐標(biāo)為(7 ,0)

            SRAM = 0EFH ×100H + 0 = 0EF00H

            余數(shù)為7 ,則 RAM = 0EF00H + 2 = 0EF02H

            若此點(diǎn)為紅色,則送入0EF02H 內(nèi)存單元里的數(shù)據(jù)為[ 0EF02H] 11111000B + 00000100B

            例2 :若X 、Y 坐標(biāo)為(15 ,5)

            SRAM = (5 - 1) ×100H + 1 ×3 = 403H

            余數(shù)為5 ,則 RAM1 = 403H + 1 = 404H

            RAM2 = 403H + 2 = 405H

            若此點(diǎn)為白色,則送入這兩個(gè)單元的數(shù)據(jù)為

            [ 404H] 11111110B + 00000001B

            [ 405H] 00111111B + 11000000B

            4. 2. 2  畫點(diǎn)函數(shù)的具體實(shí)現(xiàn)

            從例1 和例2 可以看出,要只顯示一個(gè)色點(diǎn),就必須知道該點(diǎn)對(duì)應(yīng)的內(nèi)存中的數(shù)據(jù),而前面提到過內(nèi)存中的數(shù)據(jù)是不能讀出的,所以要將寫入內(nèi)存中的數(shù)據(jù)先保存起來,即在向YD2502 的顯示緩沖區(qū)里寫數(shù)據(jù)之前, 應(yīng)先將此數(shù)據(jù)寫入61LV5128 。若在坐標(biāo)( X , Y) 處畫顏色為color 的點(diǎn),其具體函數(shù)如下:

            void  LCD_ disppixel ( unsigned int X , unsigned int Y ,unsigned char color) {

            unsigned int address ;

            unsigned char data ;

            address = LCD_pixeladdr ( X , Y) ;

            / / 計(jì)算該點(diǎn)對(duì)應(yīng)的內(nèi)存地址

            switch ( X %8) {

            case 0 : data = read _ exram ( ad2

            dress) ; / / 讀取相應(yīng)SRAM 中的數(shù)據(jù)

            data = 0x1F; / / [1110 ,

            0000]保存其他點(diǎn)的數(shù)據(jù)

            data | = (color 5) ;

            / / 填充相應(yīng)的顏色

            write _ exram ( data , ad2

            dress) ; / / 把修改好的數(shù)據(jù)寫回到SRAM

            LCD_filldata (address ,da2

            ta) ; / / 把數(shù)據(jù)寫到緩沖區(qū)

            break ;

            ……

            case 7 : …; break ;}}

            以上只給出了余數(shù)是0 的情況,其他的情況可依此類推。計(jì)算內(nèi)存地址的LCD_pixeladdr 函數(shù)可根據(jù)給出的內(nèi)存地址計(jì)算方法編寫,讀寫61LV5128 的read_exram 函數(shù)和write_exram 函數(shù)可根據(jù)具體的硬件設(shè)計(jì)編寫,這里不再給出。



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();