1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. MSP430單片機與液晶顯示器的串行接口方案設計(一)

        時間:2024-07-09 22:11:45 通信工程畢業論文 我要投稿
        • 相關推薦

        MSP430單片機與液晶顯示器的串行接口方案設計(一)

        1 概述
         點陣式液晶與外部的硬件接口簡單,能以點陣或圖形方式顯示出各種信息,因此在電子設計中得到廣泛應用。但是,對它的接口設計必須遵循一定的硬件和時序規范,不同的液晶顯示驅動器,可能需要采用不同的接口方式和控制指令才能夠實現所需信息的顯示。某些液晶顯示驅動器與外部的接口必須采用串行方式,而其串行接口往往不是標準的串行接口,這就為這類液晶顯示驅動器的設計帶來了困難。
         針對上述問題,本文提出一種利用微控制器(MCU)的I/O端口,通過軟件設計模擬與所使用的液晶顯示驅動器規范相符的串行總線的設計思想,實現MCU對液晶顯示驅動器的控制,從而建立起一套不但可以顯示各種字符,而且可以動態顯示曲線的游人顯示系統。
        2 系統設計
         本文所建立的液晶顯示系統,選用美國德州儀器(TI)公司的MSP430F149微控制器來控制液晶顯示驅動器uPD16682A,從而實現各種信息的顯示。
        2.1 MSP430F14X微控制器簡介
         TI公司的MSP430F14X微控制器與其它MSP430系列微控制器相同,均甚至一個真正的正交16位RISC CPU內核:具有16個可單周期全尋址的16位寄存器,僅27條的精簡指令集以及7種均采用雙重取數據技術(DDFT)的一致性尋址方式。DDFT技術利用每個時鐘脈沖對存儲器進行兩次數據存取操作。從而不再需要復雜的時鐘乘法和指令流水線方案。
         MSP430F14X系列MCU片內不但包括60多KB的Flash、2KB的RAM、一個看門狗時鐘、12位16通道的A/D轉換器、定時器、高精度比較器、PWM以及高速的USART控制器等常用資源,還在某些型號中集成了LCD控制器。其I/O資源豐富,且每個輸入/輸出(I/O)引腳上都提供了矢量中斷功能,每個外圍器件都支持復雜的事件驅動型操作。同其它微控制器相,帶片內Flash的微控制器可將系統功耗降低5倍,并且減小了硬件線路板空間,與現代程序設計技術(如計算分支以及高級語言(如C語言)結合使用,使得MSP430的體系結構更為高效。
         MSP430F14X可采用一個集成的數字控制振蕩器(DCO)或外部高速晶振對系統進行定時,其工作電壓范圍為1.8~3.6V,并可根據需要提供高達8MIPS(每秒百萬條指令)的操作性能,對于對成本非常敏感的應用,該系列器件能夠采用DCO來工作而無需外部晶振,快速的指令執行周期配之以低于6ms的等機啟動時間,使得系統總功耗比競爭器件低了10倍,大大延長了諸如公用設施計量、便攜式儀表測試和智能檢測等工程應用系統中的電池使用壽命。
         MSP430F14X系列微控制器允許用戶使用標準C語言進行程序編程,并提供高效的C語言編譯環境;配之以支持對具有仿零點功能的快閃產品進行豐取的快速實時仿真工具FET及優良的調試環境,使MSP430F14X系列微控制器在工程設計中得到了廣泛應用。
        2.2 液晶顯示驅動器uPD16682A簡介
         uPD16682是NEC公司2001年初推出的液晶顯示驅動器,該產品內置大容量顯示RAM內存,并能夠提供132×65點陣的全點顯示,特別適合用于16×16或12×12點陣中、日文字符顯示。該產品采用+3V單電源供電,內置升壓電路并具3倍壓和4倍壓兩種工作模式,支持8位串行或并行數據的輸入,內置時鐘發生電路和程序可編程控制的偏壓電路。
        (1)uPD16682A的顯示內存
         uPD16682A的顯示RAM內存保存著被顯示內容的點陣信息。顯示RAM的每一位對應顯示屏上的一個點,總共可以存儲132×65點的信息;通過選擇對應的RAM頁地址和列地址,微控制器可以訪問其中的任何一個點。微控制器對uPD16682A的顯示RAM的讀寫操作通過uPD16682A的I/O緩沖器進行(串行模式下uPD16682A不支持讀操作),并且該讀操作和液晶顯示屏驅動信號的讀取操作是獨立的,因此,當顯示內存的數據同時被雙方訪問時,不會出現顯示信息的抖動等現象。從微控制器讀入的顯示數據按照D7~D0的數據位順序與液晶顯示屏的行順序一一對應,其顯示關系對應圖如圖1所示。如果在系統中使用了多片uPD16682A,則在片間進行顯示數據的轉移和顯示一整幅圖案時用戶就會有很大的自由度。
         
        (2)uPD16682A與微控制器的接口
         uPD16682A可以通過8位雙向數據總線(并行模式下)或者通過串行總線接收來自微控制器的數據,這兩種模式可以通過將其P/S引腳置高或置低進行選擇。當工作于并行輸入模式下時,uPD16682A的片選信號端、讀寫信號端以及控制信號端(A0)和數據線(D0~D7)都應該同微控制器的對應端口進行連接。此時uPD16682A內部顯示RAM的數據以刷新液晶顯示的內容,也可以通過數據總線讀取顯示內存的內容。當工作于串行模式下,uPD16682A僅使用數據線D6輸入串行數據,即串行總線的數據輸入端(SI),數據線D7被用作時鐘輸入(SCL)端,并將片將信號和控制信號(A0)同微控制器總線進行連接,置高或接地讀寫信號。此時uPD16682A內部顯示RAM的數據訪問是單向的,即微控制器只可以向顯示RAM寫數據以刷新液晶顯示的內容,但不可以讀取顯示RAM的內容。
        (3)uPD16682A的串行接口
         uPD16682A的串行接口是TTL電平,不是標準的串行接口,對串行數據的接收沒有具體波特率、數據接口協議的要求,內部包括1個8位的移位寄存器和1個3位的計數器。UPD16682A在每個串行時鐘的上升沿將串行數據捕獲到其內部的移位寄存器,同時計數器自動加1。當串行數據按照D7~D0的順序被依次捕獲到后,在第8個時鐘周期的上升沿,已接收到內部的8位串行數據被轉換成一個8位的并行數據;同時,uPD16682A讀取控制信號線A0上的電平,并且根據A0信號來判斷當前被寫入的8位串行數據是一個顯示數據還是一個控制命令。對控制信號線A0的讀操作由uPD16682A的內部定時器來控制,在每隔8個串行時鐘之后自動操作一次。
        (4)uPD16682A的控制指令
         uPD16682A通過讀取其控制信號線A0的電平來判斷當前從片外設備接收的數據是一個顯示數據還是控制命令。當A0電平為高時,認為接收到的是一個顯示數據;而當A0電平為低時,則認為接收到的是一個顯示控制命令。利用uPD16682A的控制命令可以實現對uPD16682A大多數操作的控制。
        2.3 uPD16682A與MSP430F149的硬件接口設計
         圖2是系統uPD16682A與MSP430F149的硬件接口示意圖。圖中系統采用4MHz晶振,并由系統時鐘分頻得到其它內外設所用的時鐘。MSP430F149和uPD16682A相連接的I/O口被定義為輸出,MSP430F149利用片內12位A/D采集傳感器變換后的電壓信號。經程序處理后,通過上述I/O口傳送到uPD16682A進行信息顯示。由于驅動液晶顯示的電壓需要十幾V,如果系統板采用+3V單供電,則液晶顯示驅動器必須采用片內升壓電路。圖中uPD16682A采用內部4倍壓連接方式。
         
         2.4 軟件設計
         MSP420F149允許用戶標準C進行編程,并提供高效的C編譯環境。如果對程序運行時間的要求不是很荷刻,采用C語言進行程序開發應當是編程人員的首先。以下主要介紹關于自定義串口總線的程序設計,同時介紹一種在uPD16682A下的畫點和畫線函數,提供在釁符顯示屏下顯示曲線的實現方法,從而為程序實現動態顯示波形提供了可能。
        2.4.1 串行口控制程序
         微控制器送往uPD16682A的數據有顯示數據或顯示命令兩種。兩者的區分由uPD16692A控制信號線A0的狀態來表征,因此將MSP430F149的Port2.2端口電平置高或置低就可控制uPD16682A的狀態。
         按照uPD16682A串行接口聽原理,為了向其寫入一個8位或16位的數據,首先必須通過程序設計向uPD16682A產生一個時鐘輸出。時鐘產生可以有兩種方式。一是利用微控制器定時器中斷,定時依次從I/O端口輸出高、低電平。二是利用指令產生和數據同步的時鐘脈沖,通過產生一個電平的跳變沿將位數據送到uPD16682A,然后通過逐次移位,就可以將一個8位數據寫進uPD16682A內部的數據鎖存器。在第8個時鐘脈沖的上升沿,鎖存器中數據炙一個8位的并行數據,同時根據A0信號線睥電平來顯示圖符或執行相應的控制命令。雖然這里的串行數據的發送沒有具體波特率和數據接口協議的要求,但是在編寫程序時,必須認真考慮串行方式下各個信號的時序。以下是向uPD16682A寫入一個8位控制命令的程序:
         void Set_Address(unsigned char column,unsigned char page){unsigned char ColH,ColL;//設頁地址
         ColH=page|0xB0;
         Write_Command(ColH);//設列地址
         ColH=(column&0xF0)>>4;
         ColH|=0x10;
         ColL=column&0x0F;
         Write_Command(ColH);
         Write_Command(ColL);}轉
        2.4.2 字符顯示屏上的曲線繪制程序
         有了上述程序,就可以方便地在uPD16682A上指定位置顯示設定的圖案和字符了。如果用戶需要動態地展示信號波形和曲線,還可設計出專用的畫點和畫線函數,從而大大提高了字符液晶顯示屏的動態圖形顯示能力。通常而言,液晶顯示屏上的一點對應液晶顯示驅動器顯示RAM中的一位。顯示RAM中的某位為1,則在液晶顯示屏上的相應點即為點亮狀態;而要想實現在液顯示屏上動態的顯示點和曲線,必須用到顯示RAM中的數據。通常的做法是讀取指定點周圍的數據,然后在這些點中的某個指定位置插入1位,從而將液晶顯示屏上的指定點點亮,這就是基本的畫點原理。但是,在串行方式下,uPD16682A不具備數據讀出能力。為此,我們仿照顯示RAM顯示的方式,在MSP430F149的數據區開辟了一塊和uPD16682A顯示RAM同樣大小的內存塊,在向uPD16682A顯示RAM寫入顯示數據的同時,也向該內存塊的對應位置寫入同樣的數據,保證了該內存塊的內容和uPD16682A顯示RAM中的數據是同步刷新的。因此在畫點函數中,我們直接從該內存塊中取出需要的顯示數據進行處理,然后再通過自定義串行總線送往uPD16682A進行顯示。用這種方式,我們實現了在液晶顯示屏的任意位置畫出一個點,并且還可以利用這種方式編制自己的畫線函數,這樣就使uPD16682A具備了動態顯示波形的能力,也就擴展了字符液晶顯示屏動態曲線波形的顯示功能。以下是uPD16682A編寫的畫點函數:
         void DrawPointXY(unsigned char x,unsigned char y){unsigned char page,dot,dat,CouL,CouH;
         dot=0x01;
         page=y/8; /*計算當前點頁地址、列地址*/
         r_page=page; /*點亮當前點并保持周圍點信息不變*/
         r_column=x;
         page|=0xB0;
         dat=y%8;
         dot=dot<<DAT;
         CouH=(x&0xF0)>>4;
         /*通過自定義串行總線向uPD16682A發送數據*/
         CouH=CouH|0x10;
         CouL=(x&0x0F);
         Write_Command(page);
         Write_Command(CouH);
         Write_Command(CouL);
         dat=DisplayRam[r_page][r_column];
         dat|=dot;
         Write_DisplayData(dat); /*向顯示RAM寫入數據*

        【MSP430單片機與液晶顯示器的串行接口方案設計(一)】相關文章:

        MSP430與液晶顯示器的串行接口方案03-18

        一種用于單片機的紅外串行通信接口03-18

        串行DataFlash存儲器及其與單片機的接口03-18

        異步串行通信接口的IP核設計03-18

        串行接口鍵盤控制器SK5278及其在單片機系統中的應用03-18

        MultiMediacard及其與單片機接口03-20

        MSP430串行寫入BOOTSTRAP與加密熔斷功能03-20

        串行FLASH SSF1101在單片機03-20

        基于單片機的MicroDrive接口設計03-20

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>