天堂网www中文天堂在线/色操在线/成人精品视频一区二区三区/欧美特黄一片aa大片免费看

  • LCD顯示模塊并行接口驅動程序設計(2)———LCD顯示模塊并行接口驅動程序設計(2)

    2 程序設計、移植和剪裁方法
    2.1 LCD驅動器I/O操作基本程序
        對驅動器控制是完成液晶產品開發的第一步也是關鍵部分,下面的程序是采用I/O模擬8031時序方法完成對控制器進行控制,通過這個方法有助于理解對控制器控制的操作步驟。圖1為C8051F340同驅動器的連接方法,本文所有例程編寫都遵循這種連接方式。操作基本程序清單如下:

     


        上述的dlcd,clcd1,clcd2,clcd3函數中,如果把控制器的片選信號接到低電平,cs這個管腳在程序可以略去;假如P4端口和其他端口相連接,cs管腳要通過I/O口控制驅動器是否選通。注意函數中的延遲函數:數據出現在端口上要經過T6的時間在wr的上升沿把數據寫入控制器。
    2.2 LCD高級程序設計
        函數draw_point功能:把有顏色的點在LCD指定位置顯示出來。函數參數意義(參考圖3):
        word_which_display:設置顯示頁;
        word_which_write:設置操作頁;
        word_x,:新坐標O'在原坐標O下橫坐標;
        word_y:新坐標O'在原坐標O下縱坐標;
        line_x:點G在坐標系O'下橫坐標
        line_y:點G在坐標系O'下縱坐標
        yanse1,yanse2:連續寫入的8位像素字節
        說明:顯示頁的設置是為了顯示兩頁緩存中的一頁數據到LCD上,操作頁的設置是為了把數據寫入到兩頁緩存當中的一頁。如果顯示頁為第1頁,操作頁為第0頁,此時LCD顯示的是第一頁的緩存的數據,此時把數據寫入到第0頁緩存中,寫入的數據在LCD上不被顯示;如果顯示頁為第0頁,操作頁為第0頁,此時LCD顯示的是第0頁的緩存的數據,此時把數據寫入到第0頁緩存中,寫入的數據可以在LCD上實時的顯示出來。程序依據圖3中對坐標軸設計方法和LCD區域劃分手段判斷點G在新坐標系O'中坐標值。在程序中一定要注意每寫兩個字節顯示數據列地址(列坐標)自動加1。為此設計如下函數:


        這個函數功能比較多樣化,是用新坐標系O'來確認點G的坐標。執行函數draw_point(0,0,511,255,8,9,0xf8,0x07)結果為,當前顯示第0頁,點為紅色且被置到第0頁。新坐標O'在原坐標O的(511,255)處,點G在坐標系O'的位置為(8,9),也就是被置到圖3中的F區;如果執行函數draw_point(0,0,0,0,、520,364,0xf8,0x07),那么此點和上一個點將重合,此時坐標系O’和原坐標O重合。

     函數display_word功能:把字體寫入到控制器緩沖區指定位置中,并控制字體是否顯示。函數參數意義:
        word:顯示字體字庫的首地址;
        word_line,word_row:字庫行數和列數(列數等于字模的列數/8);
        word1,word2:字體顯示的顏色的16進制表示;
        backdrop1,backdrop2:字體和背景的顏色其他參數含義同clear_region。函數原型和參數如下:

     


    2.3 其他主要函數編寫說明
        清屏程序:可以通過draw_point函數編寫得到,建議清屏函數具有清理任何緩存頁中的數據并控制數據顯示的功能。如函數及參數列表如下:
    void clear_region(c har word_which_display,c har
        word_which_write,int word_x,int word_y,
        unsigned int word_row,unsigned int
        word_line,unsigned c har with_color)
    在這個函數中,參數word_row:清理的矩形區域距離word_x的長度;參數word_line:清理的矩形區域距離word_y的長度;參數with color:清理區域的顏色。此函數所清理的是矩形區域。函數改寫可以采用連續置點的方法,通過draw_piont函數連續的向清屏區域內置入一定顏色的點。由于篇幅所限,本文不給出程序清單。
        畫線程序:把LCD上任意兩點連接成直線。設LCD上兩點坐標M(x1,y1)和N(x2,y2),得斜率由于x方向地增量△x=1,則△y=k。通過循環置點就可以得到直線。
        本文所用的函數如下:
    void draw_line(c har word_which_display, c har word_which_write,unsigned int x1,unsigned int y1,int x2,int y2,c har colour)
    參數功能:x1,y1:LCD上任意一點M的坐標
        x2,y2:LCD上任意一點N的坐標
        colour:連線的顏色
        同種LCD驅動器可應用在不同的MCU上,如果采用I/O模擬時序的方法,需改動管腳設置并注意讀寫的時間要求。如本文的程序在8051單片機上運行時候基本程序中的不需要加延時,在C8051F單片機(晶振48MHz)上需要加延時。另外MCU和LCD驅動器必須共地處理,否則可能會產生不必要的干擾。
        對驅動器的控制還可以采用直接訪問外部存儲器的方法,這個時候相當于向固定的寄存器寫數據和控制字,接口程序如下:

       
        如果向外部存儲器寫數據,采用dlcd=0x04的形式,它的含義是把數0x04存儲到外部地址為0x0000中。使用此方法要注意MCU的EMIF的接口讀寫時序。有一些控制器的功能更豐富一些,如clcd1=0x81,驅動器會執行0x81所代表的功能。本文使用的是C8051F340單片機,這款單片機有自帶的EMIF接口,在使用之前需要對其進行配置:
        P1SKIP=0x80;//跳過WR和RD引腳
        XBR1=0x41;//Enable crossbar and enable
    //EMIF工作在地址/數據復用方式
    //只用外部存儲器
    //ALE高和ALE低脈沖寬度=4個SYSCLK周期EMI0CF=0x0c;
    //地址建立時間=0個SYSCLK周期。
    ///WR和/RD脈沖寬度=2個SYSCLK周期。
    //地址保持時間=1個SYSCLK周期
        EMI0TC=0X05;


    3 使用舉例及顯示效果
        如圖4是使用本文程序設計的飛機操縱性能檢測評估儀操作使用界面,界面中左邊的箭頭可以通過按鍵控制下上下移動,并進入到相應的操作界面。

        首先要了解,LCD顯示圖像的實質是在屏幕上置入一定顏色的點,曲線y=f(x)也基于這個原理產生,當x軸連續時且函數值y幅度很小的時候在LCD上顯示的圖形是連續的,當幅度很大時會產生幅度離散的圖形,如果可以把兩個離散的點用一條線連上,那么離散圖形可以變得連續,圖4中有正弦函數顯示的事例。程序實例如下:
    for(i=0;i<640;i++)
        {y1=200*sin(0.05*i);y2=200*sin(0.05*(i+1));
        draw_line(0,0,0,240,y1,y1-y2,i,’g’);}


    4 結束語
        上述控制程序是當今通用的使用方法。控制驅動器的函數如顯示字體、清屏幕和置點等都要人為編寫,但這更有助于對LCD顯示的過程的理解。現如今市場上LCD驅動器的品種多,且有很大一部分控制起來要優于本文所使用的驅動器,本文的目的旨在給予大家一種通用有效的方法,希望在以后遇到LCD驅動器的時候能快速入門,縮短開發周期,節約成

     
     
    網站首頁  |  關于我們  |  聯系我們  |  廣告服務  |  版權隱私  |  友情鏈接  |  站點導航