《基于MSP430單片機(jī)原理及應(yīng)用》課件第五章_第1頁
《基于MSP430單片機(jī)原理及應(yīng)用》課件第五章_第2頁
《基于MSP430單片機(jī)原理及應(yīng)用》課件第五章_第3頁
《基于MSP430單片機(jī)原理及應(yīng)用》課件第五章_第4頁
《基于MSP430單片機(jī)原理及應(yīng)用》課件第五章_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《基于MSP430單片機(jī)原理及應(yīng)用》第五章MSP430單片機(jī)片內(nèi)及片外模塊的應(yīng)用目錄5.0預(yù)備知識5.1通用I/O接口的應(yīng)用5.2中斷系統(tǒng)應(yīng)用5.3定時器模塊的應(yīng)用5.4通用串行數(shù)據(jù)總線UART通信5.5SPI通信5.6I2C通信5.7比較器模塊的應(yīng)用5.8ADC125.9DAC125.10LCD顯示5.11其他模塊應(yīng)用舉例預(yù)備知識本章重點講述MSP430單片機(jī)片內(nèi)及片外模塊的應(yīng)用實例。其中片內(nèi)模塊的應(yīng)用包括MSP430單片機(jī)的I/O口,中斷,定時器,串口通信,比較器,ADC12,DAC12,等;片外模塊主要講解配套“口袋實驗板”上與單片機(jī)連接的外部電路和模塊,包括LED,數(shù)碼管顯示,LED點陣顯示,鍵盤,AT24C02存儲芯片,SST25VF016B存儲芯片,LCD12864液晶顯示屏等。所有實例均可以在本教材配套的實驗板上驗證,讀者可以通過觀察實驗現(xiàn)象,加深對單片機(jī)系統(tǒng)的理解。本章中給出的例程代碼僅供參考,讀者可以根據(jù)需求自行開發(fā)設(shè)計例程。目過千遍不如動手一遍,希望讀者能親自動手去實踐。作者編寫本章節(jié)內(nèi)容時使用的操作系統(tǒng)是Windows8.1,開發(fā)工具是IAREW430V5.30。單片機(jī)下載方式包括BSL下載或JTAG仿真器下載。BSL下載方式需要安裝MspFet下載軟件,仿真器下載直接用IAREW430V5.30就可以了。使用的硬件實驗設(shè)備是教材配套的M430F169單片機(jī)口袋實驗板。本章的所有實例程序均在該環(huán)境中調(diào)試通過,并在實驗板上得到驗證。以下是關(guān)于實驗板硬件部分和代碼設(shè)計部分一些需要注意的準(zhǔn)備知識。預(yù)備知識(1)鎖存器為了節(jié)約I/O口,實現(xiàn)端口復(fù)用,實驗板在設(shè)計中使用了鎖存器,本章的實例在代碼設(shè)計中對應(yīng)的也運(yùn)用了鎖存器。鎖存器74HC573引腳如圖5-1所示。圖5-1鎖存器引腳預(yù)備知識(1)鎖存器為了節(jié)約I/O口,實現(xiàn)端口復(fù)用,實驗板在設(shè)計中使用了鎖存器,本章的實例在代碼設(shè)計中對應(yīng)的也運(yùn)用了鎖存器。鎖存器74HC573引腳如圖5-1所示。圖5-1鎖存器引腳僅當(dāng)QE引腳為低電平,引腳為高電平的時候,Q1~Q8的值與D1~D8的值相等。其余狀態(tài),Q1~Q8保留上一個狀態(tài)的值。本章的實例默認(rèn)引腳已經(jīng)接地,因此僅需控制引腳的電平。若讀者想詳細(xì)了解鎖存器的工作原理,可以自行查閱74HC573的數(shù)據(jù)手冊。預(yù)備知識(2)宏定義本章的實例代碼中,多次出現(xiàn)類似“P4OUT=BIT1;”這樣的語句,“BIT1”為頭文件中的宏定義,讀者可打開頭文件msp430x16x.h查看。(3)關(guān)于最小系統(tǒng)板上的開關(guān)BSL_1和BSL_2的說明BSL_1向上撥動,BSL_2向下?lián)軇?,單片機(jī)處于下載模式,程序可以正常下載。若在此模式下開啟單片機(jī),會有多次重啟的現(xiàn)象。BSL_1向下?lián)軇樱珺SL_2向上撥動,單片機(jī)處于串口通信模式。BSL_1向上撥動,BSL_2向上撥動,單片機(jī)正常運(yùn)行。目錄5.1通用I/O接口的應(yīng)用5.1.1發(fā)光二極管顯示模塊5.1.2數(shù)碼管顯示模塊5.1.3LED8×8點陣顯示模塊

5.1.4按鍵模塊發(fā)光二極管顯示模塊LED燈電路相對比較簡單,圖5-2是LED燈的工作原理圖。為節(jié)約I/O口,給其他外設(shè)留下充足的引腳,加入了鎖存器。P47引腳控制鎖存器的狀態(tài)。當(dāng)P47引腳為高電平時,鎖存器處于導(dǎo)通狀態(tài),Q1~Q8的狀態(tài)與D1~D8相同。P2端送出數(shù)據(jù)(此時P2端應(yīng)設(shè)為I/O輸出模式),控制LED燈亮滅,高電平LED燈滅,低電平LED燈亮。圖5-2I/O口驅(qū)動8位發(fā)光二極管數(shù)碼管顯示模塊(1)LED數(shù)碼管的結(jié)構(gòu)與工作原理單片機(jī)應(yīng)用系統(tǒng)中,顯示部分可以反映系統(tǒng)工作狀態(tài)和運(yùn)行結(jié)果,是單片機(jī)與人對話的輸出設(shè)備。最常用的顯示工具是七段式和八段式LED數(shù)碼管,八段比七段多了一個小數(shù)點,其他的基本相同。所謂的八段是指數(shù)碼管里有八個小LED發(fā)光二極管,通過控制不同的LED燈的亮滅來顯示出不同的字形。數(shù)碼管分為共陰極和共陽極兩種類型:共陰極是將八個LED的陰極連在一起,讓其接地,這樣給任何一個LED的另一端高電平,它便能點亮;而共陽極是將八個LED的陽極連在一起,讓其接電源,點亮的方法與共陰極相反。數(shù)碼管的原理圖如圖5-3所示。圖5-3數(shù)碼管原理圖(a)結(jié)構(gòu)和引腳(b)共陰極接法(c)共陽極接法數(shù)碼管顯示模塊一個八段數(shù)碼管,稱為一位,多個數(shù)碼管并列在一起可構(gòu)成多位數(shù)碼管,它們的段選線(即a,b,c,d,e,f,g,dp)連在一起,而各自的公共端,為位選線。顯示時,都從段選線送入字符編碼,而選中哪個位選線,那個數(shù)碼管便會被點亮,如同例1中點亮LED燈。數(shù)碼管的8段,對應(yīng)一個字節(jié)的8位,a對應(yīng)最低位,dp對應(yīng)最高位。所以如果讓數(shù)碼管,顯示數(shù)字0,那么共陰極數(shù)碼管的字符編碼為“00111111”,即0x3F;共陽極數(shù)碼管的字符編碼為11000000,即0xC0??梢钥闯鰞蓚€編碼的各位正好相反。表5-1給出了共陰極數(shù)碼管的段碼表。共陽極數(shù)碼管的字型碼只需將共陰極數(shù)碼管的字型碼,按位取反。顯示字符dpgfedcba字型碼0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FHA0111011177HB011111007CHC0011100139HD010111105EHE0111100179HF0111000171H表5-1共陰極數(shù)碼管段碼表數(shù)碼管顯示模塊(2)LED數(shù)碼管的顯示方式LED數(shù)碼管要正常顯示,需要驅(qū)動電路,負(fù)責(zé)驅(qū)動數(shù)碼管的各個段碼。數(shù)碼管的驅(qū)動電路相對簡單,這里同樣運(yùn)用了鎖存器,如圖5-4所示。細(xì)心的讀者可以發(fā)現(xiàn),數(shù)碼管也是用P2端口來控制。P2端口驅(qū)動的對象,可以通過設(shè)置寄存器來選擇,這樣復(fù)用引腳,節(jié)約I/O口,是解決I/O口不足的一種方法。根據(jù)LED數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩種。圖5-44位共陰極數(shù)碼管電路圖數(shù)碼管顯示模塊靜態(tài)驅(qū)動也稱直流驅(qū)動,是指每個數(shù)碼管的每一個段碼,都由一個單片機(jī)的I/O端口進(jìn)行驅(qū)動,或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動。圖5-4為4位共陰極數(shù)碼管電路圖,從圖中可以看出,4位數(shù)碼管占用了單片機(jī)的12個引腳。例4演示靜態(tài)顯示,僅用到最右邊一位數(shù)碼管,P50拉低,模擬接地;P51、P52、P53置高。操作靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅(qū)動4個數(shù)碼管靜態(tài)顯示則需要4×8=32根I/O端口來驅(qū)動,一個MSP430x16x單片機(jī)可用的I/O端口才48個,實際應(yīng)用時必須增加譯碼驅(qū)動器進(jìn)行驅(qū)動,增加了硬件電路的復(fù)雜性。例如,要在數(shù)碼管上顯示“5”,先查字型碼為“6DH”,然后直接賦值給P2口即可:P2OUT=6DH;數(shù)碼管顯示模塊LED數(shù)碼管動態(tài)顯示方式LED數(shù)碼管動態(tài)顯示接口是單片機(jī)應(yīng)用中最為廣泛的顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個數(shù)碼管的公共端COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時,單片機(jī)對位選通COM端電路的控制,所以只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管點亮的時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實際上各位數(shù)碼管不是同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,但是能夠節(jié)省大量的I/O端口,而且功耗更低。從圖5-4中可以看出,4個數(shù)碼管動態(tài)顯示只需要12個引腳,其中P50~P53控制位選,P2控制字選。相對于靜態(tài)的“4*8=32”個引腳來說,節(jié)約了20個引腳。單片機(jī)動態(tài)驅(qū)動數(shù)碼管的方法如下:由P50~P53向各個位輪流輸出掃描信號,使每一瞬間只有一個數(shù)碼管被選通(共陰極低電平選通,共陽極高電平選通),然后由P2口送入該位所要顯示的字形碼,點亮該位字段顯示的字形。這樣在P2口送出的碼段,與P5口送出的位段,共同配合控制,就可以使各個數(shù)碼管輪流點亮顯示各自的字形。雖然幾位數(shù)碼管是依次被點亮的,但需要每位被點亮?xí)r間超過1ms,隔一段時間使之再顯示一遍,如此不斷重復(fù)掃描。只要掃描時間足夠快,人眼就看不出閃爍。動態(tài)掃描一般用軟件實現(xiàn)。以下舉例說明,在4個數(shù)碼管上分別顯示“1”、“2”、“3”、“4”。LED8×8點陣顯示模塊很多時候,除了簡單的數(shù)字顯示外,我們需要顯示更多的信息,比如字母、漢字甚至圖片。LED點陣可以滿足顯示更多內(nèi)容的需求。LED點陣屏發(fā)光亮度強(qiáng),指示效果好,可以制作運(yùn)動的發(fā)光圖文,更容易吸引注意力,信息量大,隨時更新,有著非常好的廣告和告示效果。LED點陣如同LED數(shù)碼管一樣,分靜態(tài)顯示以及動態(tài)顯示,由于靜態(tài)顯示占用過多的I/O口,實際應(yīng)用中基本選擇動態(tài)顯示。本示例對LED8×8點陣屏動態(tài)掃描顯示作一個簡單的介紹。LED8×8點陣顯示模塊LED8×8點陣結(jié)構(gòu)與工作原理圖5-5為一種8x8的LED點陣單色行共陽極模塊的內(nèi)部結(jié)構(gòu)圖,對于紅光LED,其工作正向電壓約為1.8V,其持續(xù)工作的正向電流一般為10mA左右,峰值電流可以更大。當(dāng)某一行線為高電平而某一列線為低時,其行列交叉的點就被點亮,比如要點亮第2行第2列的燈,需要將R2置高,C2拉低。當(dāng)某一行線為低電平時,列線取高或取低,對應(yīng)的這一行的點全部為暗。LED點陣屏顯示與數(shù)碼管的動態(tài)顯示相同,就是通過一定的頻率進(jìn)行逐行掃描,數(shù)據(jù)端口不斷輸入數(shù)據(jù)顯示,只要掃描頻率足夠高,由于人眼的視覺殘留效應(yīng),就可以看到完整的文字或圖案信息。圖5-5LED8x8點陣屏的內(nèi)部結(jié)構(gòu)圖(左),外部引腳圖(右)LED8×8點陣顯示模塊LED8×8點陣顯示LED8x8點陣屏外部電路較為簡單,如圖5-6所示,占用P4與P5兩個I/O口,P4口連接行信號,P5口連接列信號。實際應(yīng)用中,也可以使用譯碼器節(jié)約I/O口。點陣屏的顯示涉及到對顯示圖像的取模,什么是取模呢?舉個簡單的例子,現(xiàn)在需要在LED8×8點陣上顯示“1”。把點陣屏的每個燈想象成一個小方格,在8×8的點陣?yán)锢L制出“1”的圖形,如圖5-7所示。黑色代表燈亮,用“1”表示,白色代表燈滅,用“0”表示,這樣得到一個8×8的“0”和“1”構(gòu)成的矩陣,如圖5-8所示。圖5-6LED8×8點陣屏外部電路圖圖5-7“1”圖形繪制圖5-8“1”圖形矩陣表示LED8×8點陣顯示模塊矩陣?yán)锏拿?位用1bit表示,每8位為一組,正好為一字節(jié)。按行分組,稱為橫向取模,得到的8個字節(jié)依次為:0x00,0x08,0x18,0x08,0x08,0x08,0x1C,0x00。按列分組,稱為縱向取模,得到的8個字節(jié)依次為:0x00,0x00,0x00,0x22,0x7E,0x02,0x00,0x00。取模的方向無優(yōu)劣之分,根據(jù)軟件的實現(xiàn)自行選擇。例如,我們希望通過行掃描顯示,這時候應(yīng)該選用橫向取模。本示例程序使用的是列掃描顯示,故使用縱向取模。在LED數(shù)碼管動態(tài)顯示中,先選取位,然后給該位數(shù)碼管賦值。同理,在LED8×8點陣顯示中,先選擇列(行掃描選擇行),然后給該列賦值。讀者可能會有疑問,每次顯示圖形都要取模,操作是否太繁瑣?其實可以選擇取模軟件,如zimo221,imageToLCD等,只需輸入需要取模字符或圖形,設(shè)置好取模方向,軟件便能自動生成相應(yīng)的字模數(shù)據(jù)。LED8×8點陣屏足以應(yīng)付所有ASCII碼的顯示,但僅能顯示筆畫數(shù)較少的漢字。若讀者想顯示全漢字,需拓展成LED16×16點陣屏。顯示圖片的話,則需要更大的點陣屏。在這里提供ASCII碼可以打印的字符字模庫。按鍵模塊鍵盤是計算機(jī)系統(tǒng)中最常用的人機(jī)對話輸入部分。在單片機(jī)應(yīng)用系統(tǒng)中,為了控制系統(tǒng)的工作狀態(tài)以及向系統(tǒng)輸入數(shù)據(jù),一般均設(shè)有按鍵或鍵盤。例如復(fù)位用的復(fù)位鍵,功能轉(zhuǎn)換的命令鍵和數(shù)據(jù)輸入的數(shù)字鍵等,對某些單片機(jī)應(yīng)用系統(tǒng),如各種智能測量儀表,按鍵輸入功能幾乎是整個應(yīng)用程序的核心部分。鍵盤一般分為編碼鍵盤和非編碼鍵盤兩種。編碼鍵盤本身除了按鍵之外,還包括產(chǎn)生鍵碼的硬件電路。只要按下某一個按鍵,就能產(chǎn)生這個鍵的編碼,這種鍵盤使用比較方便,需要編寫的鍵盤輸入程序也比較簡單。但是,由于使用的硬件較復(fù)雜,在單片機(jī)應(yīng)用系統(tǒng)中使用得還不多。本書只介紹非編碼鍵盤,對編碼鍵盤感興趣的讀者可以自行查閱相關(guān)資料。非編碼鍵盤是由若干個按鍵組合的開關(guān)矩陣。按鍵的作用,只是簡單地實現(xiàn)接點的接通和斷開,非編碼鍵盤必須有一套相應(yīng)的程序與之配合,才能產(chǎn)生出相應(yīng)的鍵碼。由于非編碼鍵盤硬件上十分簡單,目前在單片機(jī)應(yīng)用系統(tǒng)中使用較為普遍。按鍵的處理步驟通常包括3個:按鍵的識別、抖動的消除、鍵位的編碼。所以信息要快速可靠地輸入單片機(jī),還有一些實際問題需要解決。按鍵模塊去抖動問題通常按鍵所用開關(guān)為機(jī)械彈性開關(guān),由于機(jī)械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,如圖5-9所示。抖動時間的長短由按鍵的機(jī)械特性決定,一般為5ms~10ms。按鍵穩(wěn)定閉合時間的長短則是由操作人員的按鍵動作決定的,一般為零點幾秒至數(shù)秒。鍵抖動會引起一次按鍵被誤讀多次。為確保CPU對按鍵的一次閉合僅作一次處理,必須去除鍵抖動。在鍵閉合穩(wěn)定時讀取鍵的狀態(tài),并且必須判別到鍵釋放穩(wěn)定后再作處理。去抖動的方法主要有兩種:硬件消抖和軟件消抖。圖5-9按鍵的結(jié)構(gòu)和電壓抖動波形按鍵模塊硬件消抖,一般采用RS觸發(fā)器來抵抗開關(guān)的抖動。為了消除開關(guān)的接觸抖動,可在機(jī)械開關(guān)與被驅(qū)動電路之間接入一個基本RS觸發(fā)器,如圖5-10所示。圖中兩個“與非”門,構(gòu)成一個RS觸發(fā)器。當(dāng)按鍵未按下時,輸出為“1”;當(dāng)按鍵被按下時,輸出為“0”。此時即使因為按鍵的機(jī)械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開,只要按鍵不返回原始狀態(tài),雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為“0”,不會產(chǎn)生抖動的波形。也就是說,即使電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點通過分析RS觸發(fā)器的工作過程很容易得到驗證。圖5-10硬件去抖動電路按鍵模塊現(xiàn)在單片機(jī)系統(tǒng)一般用軟件方法去除抖動。這種方法是在代碼編寫過程中,當(dāng)判斷有鍵按下時。加入一個10ms的延時子程序,然后再次確認(rèn)該按鍵是否被按下。如果再次確認(rèn)的結(jié)果仍然處于被按下的狀態(tài)。再做該鍵按下的相應(yīng)處理。這樣就可以避開抖動時間段,消除抖動影響。按鍵的編碼為使CPU識別出鍵入的信息。對不同的按鍵必須有不同的鍵人值或鍵盤編碼,以便轉(zhuǎn)入相應(yīng)的處理程序。鍵的編碼一般由按鍵的硬件連接方式?jīng)Q定。按鍵信息的邏輯處理在實際應(yīng)用設(shè)計中。應(yīng)用系統(tǒng)除對按鍵能作識別處理外,還要考慮到對人在操作時易產(chǎn)生的其他問題的邏輯處理,如多個按鍵同時被按下。在一個鍵功能正在處理的時候,另外按鍵被誤按下,按鍵時間長短的影響等。所有這些問題一般情況下都能通過軟件解決。目前在單片機(jī)應(yīng)用系統(tǒng)中常見的鍵盤形式有單鍵輸入式鍵盤和矩陣式鍵盤兩種。按鍵模塊單鍵輸入式鍵盤單鍵輸入式鍵盤是指直接用I/O端口線控制單個按鍵電路。每個單鍵輸入式按鍵單獨占用一根I/O線。每根I/O線上的按鍵工作狀態(tài)不會影響其他I/O線的工作狀態(tài)。單鍵輸入式按鍵電路如圖5-11所示,MSP430的P10~P13分別和4個按鍵相連,其中上拉電阻保證了按鍵斷開時P10~P13有確定的高電平。當(dāng)沒有按鍵按下時,P1端口的狀態(tài)為0xFF(高四位可忽略)。當(dāng)有按鍵按下的時候,相對應(yīng)的引腳會被拉低,例如按下S1時,P1端口的狀態(tài)應(yīng)為0xFE。通過程序分析P1端口狀態(tài),即可獲得按鍵信息。如例10。圖5-11單輸入4按鍵電路原理圖按鍵模塊矩陣式鍵盤矩陣鍵盤又叫行列式鍵盤。用I/O接口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行、列交叉點上。例如4×4的行、列結(jié)構(gòu)可組成16個鍵的鍵盤,比一個鍵位用一根I/O接口線的獨立式鍵盤少用了一半的I/O接口線。而且鍵位越多,情況越明顯。因此按鍵數(shù)量較多時,往往采用矩陣式鍵盤。矩陣鍵盤的連接方式有多種,可直接連接于單片機(jī)的I/O接口線;可利用擴(kuò)展的并行I/O接口連接;也可利用可編程的鍵盤、顯示接口芯片(如8279)進(jìn)行連接等。其中,利用擴(kuò)展的并行I/O接口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。按鍵設(shè)置在行、列線的交點上,行、列分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接+5V,沒有鍵位按下時,被鉗位在高電平狀態(tài)。矩陣鍵盤通常采用定時掃描方式和中斷查詢方式獲得按鍵信息。這里僅介紹定時掃描方式。定時掃描方式的外部電路圖如圖5-12所示,占用整個P1口。工作方式與單輸入方式類似,分兩次掃描。先進(jìn)行行掃描(P10~P13口),如果掃描到按鍵觸發(fā),再進(jìn)行列掃描(P14~P17),從而確定按鍵。圖5-12定時掃描方式矩陣鍵盤硬件電路按鍵模塊矩陣式鍵盤矩陣鍵盤又叫行列式鍵盤。用I/O接口線組成行、列結(jié)構(gòu),鍵位設(shè)置在行、列交叉點上。例如4×4的行、列結(jié)構(gòu)可組成16個鍵的鍵盤,比一個鍵位用一根I/O接口線的獨立式鍵盤少用了一半的I/O接口線。而且鍵位越多,情況越明顯。因此按鍵數(shù)量較多時,往往采用矩陣式鍵盤。矩陣鍵盤的連接方式有多種,可直接連接于單片機(jī)的I/O接口線;可利用擴(kuò)展的并行I/O接口連接;也可利用可編程的鍵盤、顯示接口芯片(如8279)進(jìn)行連接等。其中,利用擴(kuò)展的并行I/O接口連接方便靈活,在單片機(jī)應(yīng)用系統(tǒng)中比較常用。按鍵設(shè)置在行、列線的交點上,行、列分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接+5V,沒有鍵位按下時,被鉗位在高電平狀態(tài)。矩陣鍵盤通常采用定時掃描方式和中斷查詢方式獲得按鍵信息。這里僅介紹定時掃描方式。定時掃描方式的外部電路圖如圖5-12所示,占用整個P1口。工作方式與單輸入方式類似,分兩次掃描。先進(jìn)行行掃描(P10~P13口),如果掃描到按鍵觸發(fā),再進(jìn)行列掃描(P14~P17),從而確定按鍵。圖5-12定時掃描方式矩陣鍵盤硬件電路目錄5.2中斷系統(tǒng)應(yīng)用5.2.1外部中斷5.2.2內(nèi)部中斷5.2.3中斷總結(jié)外部中斷第5.1.4節(jié)中對鍵盤的操作采用定時掃描的方式完成。很多時候,CPU都在做無用功,一次次去查詢,一次次無功而返。我們可以利用外部中斷來避免CPU資源的浪費(fèi)。啟用I/O口的外部中斷通常需要以下幾個步驟: 設(shè)置相應(yīng)I/O口為輸入模式(限P1與P2) 設(shè)置中斷觸發(fā)沿 清空中斷請求寄存器 使能相應(yīng)I/O口中斷 開啟總中斷開關(guān) 編寫相應(yīng)中斷函數(shù)例10中的按鍵采用掃描查詢,例11中將使用中斷查詢。外部電路連接與例10相同。例11:按鍵選擇不同花式的LED閃爍效果。內(nèi)部中斷控制LED燈閃爍的時候,采用delay_ms(1000)進(jìn)行延時,實際上是CPU在原地進(jìn)行空操作,還可以采用定時器來計時,每當(dāng)計數(shù)器溢出的時候,更改LED的狀態(tài),避免CPU資源的浪費(fèi)。使用定時器中斷通常需要以下幾個步驟: 設(shè)置定時器模式,并使能定時器中斷 開啟總中斷 編寫相應(yīng)的中斷函數(shù)在編寫定時器的中斷函數(shù)時,由于定時器中斷的標(biāo)志位TAIV是多種中斷共有的,因此需要在程序內(nèi)判斷,產(chǎn)生的中斷是由哪種情況產(chǎn)生的。如例12.中斷總結(jié)MSP430系列單片機(jī)的中斷系統(tǒng)十分強(qiáng)大,上面的兩個例子僅僅作為演示,并不能代表中斷的全部。而且除了以上兩種中斷外,還有多種中斷方式。編寫程序的步驟一般都分為以下三步:(1)配置中斷相關(guān)的寄存器,使能該中斷(2)開啟總中斷(3)編寫相應(yīng)的中斷程序目錄5.3定時器模塊的應(yīng)用(1)利用定時器產(chǎn)生秒信號(2)使用四位數(shù)碼管,顯示時間(3)按鍵調(diào)時定時器模塊的應(yīng)用定時器模塊通常用于精確計時,本節(jié)將利用定時器產(chǎn)生秒信號,配合四位數(shù)碼管及按鍵,制作一個簡易的小時鐘。(1)利用定時器產(chǎn)生秒信號定時器計數(shù)的頻率與MSP430運(yùn)行頻率相關(guān)。采用8M的時鐘頻率,定時器采用八分頻,這樣定時器最多能計時,遠(yuǎn)遠(yuǎn)小于秒信號的1000ms。可以設(shè)置一個變量sec_flag,記錄產(chǎn)生的定時器中斷的次數(shù),并設(shè)置定時器每20ms產(chǎn)生一次中斷。這樣,當(dāng)sec_flag計滿50次,即為一個秒信號。那么如何設(shè)置定時器每20ms產(chǎn)生一次中斷呢?只需在啟動定時器計數(shù)前,給TAR寄存器設(shè)定初值,并且在每次中斷產(chǎn)生時,在中斷服務(wù)程序里再次給TAR寄存器填充初值就可以。而如何設(shè)置計數(shù)初值呢?假設(shè)現(xiàn)在需要定時器每t毫秒中斷一次(

),則填充的初值計算公式如下:

將20ms代入,我們制作小時鐘的初值為45536。定時器模塊的應(yīng)用(2)使用四位數(shù)碼管,顯示時間設(shè)置一個結(jié)構(gòu)體變量來保持當(dāng)前時間的信息struct{inthour;intminute;intsecond;charsec_flag;//控制小數(shù)點閃爍,表示秒的走時}Time;然后類似例6的程序,將Time通過數(shù)碼管顯示。如何控制小數(shù)點的閃爍表示秒走時呢?可以通過以下代碼來控制小數(shù)點的亮滅:DIGITAL=NUM[5]|0x80;//顯示數(shù)字5,并點亮小數(shù)點DIGITAL=NUM[4]|0x00;//顯示數(shù)碼4,不點亮小數(shù)點可以設(shè)置一個變量來代替后面的小尾巴(0x80,0x00),在不同的情況給這個變量賦相應(yīng)的值即可。Time.sec_flag就是充當(dāng)這個變量。(3)按鍵調(diào)時大部分代碼和例11類似,只需要在中斷服務(wù)程序中,根據(jù)不同的中斷,更新Time即可。以上三個步驟通過例13進(jìn)一步解讀。目錄5.4通用串行數(shù)據(jù)總線UART通信(1)硬件實現(xiàn)(2)軟件模擬通用串行數(shù)據(jù)總線UART通信串行通信是單片機(jī)系統(tǒng)與外界聯(lián)系的重要手段,MSP430系列單片機(jī)均具有串行通信的功能。串行通信可以通過兩種方式來實現(xiàn):硬件實現(xiàn)。既由串行同步/異步通信模塊直接實現(xiàn),通過配置相應(yīng)的寄存器,由硬件自動實現(xiàn)數(shù)據(jù)的移入和移出,實現(xiàn)串行通信的功能。采用這種方式完成串行通信具有系統(tǒng)穩(wěn)定可靠性,不需要占用CPU時間的優(yōu)點。軟件模擬。通過定時器模塊的支持,實現(xiàn)串行通信功能。采用這種方式的優(yōu)勢是成本低,實時性好,但是需要占用一定的CPU時間。采用軟件模擬,相當(dāng)于沒有郵政系統(tǒng)的原始社會,送信、收信等手續(xù)都需要自己親力親為。硬件實現(xiàn)相當(dāng)于郵局一樣,只需填寫好收寄地址、人員電話等信息(即配置相關(guān)寄存器),剩下的收發(fā)郵件(數(shù)據(jù)的傳輸)都可以交給郵局來完成。通用串行數(shù)據(jù)總線UART通信MSP430F169帶有硬件通信模塊(USCI),可以配置為UART、I2C、SPI模式。本節(jié)介紹UART模式。UART模式常被用于與微機(jī)的通信,配合微機(jī)端串口助手軟件,可以實現(xiàn)單片機(jī)與微機(jī)的數(shù)據(jù)通信。配置UART寄存器一般需要注意以下幾個問題:通信數(shù)據(jù)位數(shù)的選擇。不同的通信模式對數(shù)據(jù)位數(shù)要求不同,一對一通信一般采用8位數(shù)據(jù)幀。時鐘源及波特率的選擇。波特率與傳輸速度相關(guān),時鐘源的選擇與波特率的計算相關(guān),根據(jù)本書第三章中介紹的波特率計算方法,可用宏定義完成波特率的計算(BRCLK=CPU_F時),代碼如下:****************************************************************************#defineCPU_F((double)8000000)//cpu主頻#definebaud9600//設(shè)置波特率的大小#definebaud_setting(unsignedint)((unsignedlong)CPU_F/((unsignedlong)baud))//波特率計算公式#definebaud_h(unsignedchar)(baud_setting>>8)//提取高位#definebaud_l(unsignedchar)(baud_setting)//低位*****************************************************************************通用串行數(shù)據(jù)總線UART通信其他情況的宏定義讀者可模仿以上代碼自行完成。正確配置相關(guān)寄存器后,只需操作發(fā)送緩沖區(qū)TXBUF和接送緩沖區(qū)RXBUF即可。判斷數(shù)據(jù)是否發(fā)送完成(或者接收完成)的方法:如果沒有啟用中斷,采用查詢方式,需要反復(fù)去查看發(fā)送標(biāo)志(接送標(biāo)志)是否置位。如果啟用中斷,在數(shù)據(jù)發(fā)送完成(或者接收完成)時,則會產(chǎn)生中斷,進(jìn)入相應(yīng)的中斷服務(wù)程序。啟用中斷后如同郵局開啟的短信通知一樣,不要每天去郵局查看是否有自己的信件。通過例程,演示UART通信功能,如例14。程序下載成功后,將BSL_Config區(qū)設(shè)置為串口通信模式(開關(guān)BSL_1向下?lián)軇?,開關(guān)BSL_2向上撥動),開啟單片機(jī)后,利用微機(jī)端的串口調(diào)試助手軟件,向單片機(jī)發(fā)送01、02、03、04、05五個十六進(jìn)制數(shù),隨后可在接收區(qū)看到數(shù)據(jù)02、03、04、05、06。如圖5-13所示。圖5-13UART通信演示結(jié)果SPI通信5.5SPI通信SPI是USCI另一種通信模式,與I2C模式一樣,屬于同步串行通信。與I2C模式不同的是屬于三線串行通信,三線分別為:SDO(主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入)、SDI(主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出)、SCLK(時鐘信號,由主設(shè)備產(chǎn)生)。另外還有CS引腳,從設(shè)備使能信號,由主設(shè)備控制,一個從機(jī)對應(yīng)一個CS引腳(即CS引腳數(shù)量由從機(jī)數(shù)量決定)。本節(jié)將通過SPI通信控制一種儲存芯片——SST25V020芯片。SPI配置時需要注意以下幾個問題:

SPI模塊的使能; 數(shù)據(jù)位數(shù)的選擇; 時鐘源的選擇; 發(fā)送(接收)中斷的使能; 相關(guān)引腳的配置。與UART模式的配置類似。在SPI通信模式下,從機(jī)的選擇主要由CS信號決定,不再通過從機(jī)地址來選擇從機(jī)。因此,在SPI通信下的SST25V020單字節(jié)的寫入與讀出時序相比于I2C模式要來的簡單。具體時序如下:SPI通信SST25V020單字節(jié)寫入時序: 使能設(shè)備(拉低對應(yīng)的CS引腳); 發(fā)送寫入的地址; 發(fā)送寫入的數(shù)據(jù); 禁用設(shè)備(拉高對應(yīng)的CS引腳)。SST25V020單字節(jié)讀取時序; 使能設(shè)備 發(fā)送讀取的地址; 接收一個數(shù)據(jù); 禁用設(shè)備。本節(jié)實驗實現(xiàn)SPI通信的功能。如例15。I2C通信5.6I2C通信

本節(jié)介紹USCI模塊的另外一種模式——I2C模式。I2C模式與UART模式都為二線串行通信,不同的是,I2C為同步串行通信,UART為異步串行通信。I2C通信同樣也可以有硬件實現(xiàn)和軟件模擬,本節(jié)以硬件實現(xiàn)I2C通信,驅(qū)動AT24C02存儲芯片,進(jìn)行數(shù)據(jù)的存取。本節(jié)主要目的是介紹I2C通信,AT24C20詳細(xì)資料讀者可自行查閱數(shù)據(jù)手冊。I2C配置需要注意的問題: 設(shè)置P3.1與P3.3為I2C模式; 初始化I2C總線(拉低P3.1與P3.3); 設(shè)置USCI為I2C模式; 選擇合適的時鐘信號;配置完成后,只需寫入(或讀?。㊣2CDRB寄存器,就能完成數(shù)據(jù)的發(fā)送(或接收)。每次發(fā)送和接收前,都要檢查總線是否繁忙,只有在總線不忙的情況下才能進(jìn)行數(shù)據(jù)的發(fā)送(或接收)。和UART模式查詢發(fā)送(或接收)是否完成類似,I2C模式檢查總線是否繁忙,同樣可以通過硬件中斷和軟件查詢實現(xiàn)。硬件中斷每次在數(shù)據(jù)的發(fā)送(或接收)完成后,會進(jìn)入同一個中斷服務(wù)程序,通過對中斷向量寄存器的分析,判斷產(chǎn)生中斷的原因,從而進(jìn)行相應(yīng)的中斷服務(wù)程序(與TIMERA中斷類似)。軟件查詢是通過循環(huán)不斷查詢相應(yīng)的中斷標(biāo)志位,從而判斷總線是否繁忙。本節(jié)采用軟件查詢的方式實現(xiàn)I2C通信。I2C通信

AT24C02是2K位串行CMOSE2PROM,內(nèi)部含有256個8位字節(jié),該器件通過I2C總線接口進(jìn)行操作。這里介紹基礎(chǔ)的單字節(jié)寫入和單字節(jié)讀取。(1)AT24C02單字節(jié)寫入: 通過I2C總線發(fā)送從機(jī)寫地址; 通過I2C總線發(fā)送數(shù)據(jù)寫入的地址; 通過I2C總線發(fā)送一字節(jié)數(shù)據(jù)。(2)AT24C02當(dāng)單字節(jié)讀?。?通過I2C總線發(fā)送從機(jī)寫地址; 通過I2C總線發(fā)送讀取數(shù)據(jù)的地址; 通過I2C總線發(fā)送從機(jī)讀地址; 通過I2C總線接收一字節(jié)的數(shù)據(jù)。從機(jī)地址一般為7位,高四位為從機(jī)類型編碼,低三位為從機(jī)地址編碼(由芯片的地址引腳決定,詳見芯片數(shù)據(jù)手冊),本節(jié)實驗中的AT24C02從機(jī)地址為1010000B。將從機(jī)地址左移一位,最低位添“0”可得到從機(jī)寫地址(10100000B),最低位添“1”可得從機(jī)讀地址(10100001B)。如例16。比較器模塊的應(yīng)用5.7比較器模塊的應(yīng)用

多數(shù)傳感器以電壓的形式表示結(jié)果,通常要經(jīng)過ADC(模數(shù)轉(zhuǎn)換)得到數(shù)字量。但有些時候,我們并不需要知道具體量,只需知道是否大于或小于某個值。這時選用ADC太過大材小用,比較器就能滿足需求。下面利用比較器A,實現(xiàn)單輸入P23的電壓低于0.25Vcc時,使蜂鳴器鳴叫,否則關(guān)閉蜂鳴器。蜂鳴器的控制方法和LED燈類似,只要通過控制I/O口的高低電平即可。如圖5-14所示,為蜂鳴器常用的一種連接方式。由于I/O的驅(qū)動電流過小,不能直接驅(qū)動蜂鳴器,需要通過三極管放大電流。蜂鳴器分為兩類:有源蜂鳴器與無源蜂鳴器。有源蜂鳴器發(fā)出的聲音頻率固定,只需給高低電平即可鳴叫;無源蜂鳴器必須用2K~5K的方波去驅(qū)動它。圖5-14蜂鳴器電路圖(左邊為無源蜂鳴器,右邊為有源蜂鳴器)使用比較器時,需要注意比較器正負(fù)端的設(shè)定。關(guān)于比較器舉例,如例17。ADC125.8ADC12

在MSP430的實時控制和智能儀表等應(yīng)用系統(tǒng)中,控制或測量對象的有關(guān)變化量,往往是一些連續(xù)變化的量,如壓力,溫度,流量,速度等。利用傳感器把各種物理量測量出來,轉(zhuǎn)換為電信號,經(jīng)過模數(shù)轉(zhuǎn)換(AnalogtoDigitalConversion)轉(zhuǎn)變成數(shù)字量,這樣模擬量才能被MSP430處理和控制。MSP430F169自帶的ADC模塊為12位模數(shù)轉(zhuǎn)換模塊ADC12,如果基準(zhǔn)電壓Vref=2.5V,則分辨率為2.5V/4096=0.6mV。ADC12模塊一共提供了4種轉(zhuǎn)換模式: 單通道單次轉(zhuǎn)換 序列通道單次轉(zhuǎn)換 單通道多次轉(zhuǎn)換 序列通道多次轉(zhuǎn)換無論使用何種模式,都需要注意以下問題: 設(shè)置具體的轉(zhuǎn)換模式 輸入模擬信號 選擇啟動信號 關(guān)注結(jié)束信號 存放轉(zhuǎn)換數(shù)據(jù) 采用查詢或者中斷方式來讀取數(shù)據(jù)ADC12

本節(jié)利用鋸齒電位器分壓,將電壓信號送入通道0(P60),采用單通道多次轉(zhuǎn)換模式,利用中斷方式讀取數(shù)據(jù),通過四位數(shù)碼管顯示結(jié)果。使用ADC12一般需要以下幾個步驟: 根據(jù)選擇的轉(zhuǎn)換模式、參考電壓源、時鐘源等,正確配置相關(guān)寄存器; 正確選擇通道,并將相關(guān)引腳配置為第二功能模式; 若需要中斷,配置相關(guān)中斷寄存器,并編寫相關(guān)中斷服務(wù)程序。舉例如例18。DAC125.9DAC12

DAC為ADC的逆過程,MSP430帶有DAC12模塊,可以將運(yùn)算處理的結(jié)果轉(zhuǎn)換為模擬量,以便操作被控制對象的工作過程。DAC12使用的時候需要注意的問題: 參考電壓的選擇,如果使用內(nèi)部參考電壓則需要在ADC12模塊里面打開內(nèi)部參考電壓發(fā)生器,ADC12內(nèi)核不用開。 在MSP430F169單片機(jī)上,DAC12的0通道使用的是A6,1通道使用的是A7的引腳。注意如果使用了DAC12的2個通道,A6和A7就不能使用。

校正DAC12的偏移誤差。

設(shè)置DAC12的位數(shù)和滿量程電壓(滿量程電壓最高為AVcc)。

設(shè)置DAC12的觸發(fā)模式。DAC12

本節(jié)通過DAC0(P60)輸出1V電壓,成功燒入程序后,可用電壓表去觀察。使用DAC12一般需要以下幾個步驟: 選擇合適的參考電壓; 校驗DAC; 根據(jù)選擇的模式,正確配置相關(guān)寄存器; 根據(jù)輸出電壓VOUT計算出DAC12_xDAT的值。計算公式如表5-2所示:位數(shù)DAC12RESDAC12IR輸出電壓格式12位00VOUT=VREF×3×(DAC12_xDAT)/409612位01VOUT=VREF×1×(DAC12_xDAT)/40968位10VOUT=VREF×1×(DAC12_xDAT)/40968位11VOUT=VREF×1×(DAC12_xDAT)/256表5-2不同配置下輸出電壓計算公式目錄5.10LCD顯示5.10.1LCD12864概述5.10.2SYN12864K-ZK模塊接口說明5.10.3模塊主要硬件構(gòu)成說明5.10.4指令說明5.10.5LCD12864液晶8位并行數(shù)據(jù)傳輸時序5.10.6LCD12864液晶顯示代碼設(shè)計LCD12864概述

前面我們提到用LED燈、數(shù)碼管、LED點陣作為顯示,除了LED燈,后兩者都要不停地掃描才能完成顯示,對CUP資源的占用比較大。除此之外,顯示的內(nèi)容和長度都有限。如果需要顯示漢字或圖像,這時就需要用到LCD液晶屏,這里介紹常用的LCD12864液晶屏。LCD12864是一種具有4/8位并行、2/3線串行多種接口方式,分為帶字庫和不帶字庫兩種,帶字庫的內(nèi)部含有國標(biāo)一級、二級簡體中文字庫的點陣圖形液晶顯示模塊,被書采用帶字庫的LCD12864,型號為SYN12864K-ZK;其顯示分辨率為128×64,內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面。可以顯示8×4行16×16點陣的漢字。也可完成圖形顯示。低電壓低功耗是其又一顯著特點。SYN12864K-ZK模塊接口說明

SYN12864K-ZK模塊引腳功能說明如表5-3所示。管腳號管腳名稱電平管腳功能描述1VSS0V電源地2VCC3.0--5V電源正3V0--對比度(亮度)調(diào)整4RS(CS)H/LRS=“H”,表示DB7——DB0為顯示數(shù)據(jù)RS=“L”,表示DB7——DB0為顯示指令數(shù)據(jù)5R/W(SID)H/LR/W=“H”,E=“H”,數(shù)據(jù)被讀到DB7——DB0R/W=“L”,E=“H→L”,DB7——DB0的數(shù)據(jù)被寫到IR或DR6E(SCLK)H/L使能信號7DB0H/L三態(tài)數(shù)據(jù)線8DB1H/L三態(tài)數(shù)據(jù)線9DB2H/L三態(tài)數(shù)據(jù)線10DB3H/L三態(tài)數(shù)據(jù)線11DB4H/L三態(tài)數(shù)據(jù)線12DB5H/L三態(tài)數(shù)據(jù)線13DB6H/L三態(tài)數(shù)據(jù)線14DB7H/L三態(tài)數(shù)據(jù)線15PSBH/LH:8位并口方式,L:串口方式16NC--空腳17/RESETH/L復(fù)位端,低電平有效18VOUT--LCD驅(qū)動電壓輸出端19AVDD背光源正端(+5V)20KVSS背光源負(fù)端表5-3SYN12864K-ZK模塊引腳功能說明模塊主要硬件構(gòu)成說明

控制器接口信號說明:(1)RS,R/W的配合選擇決定控制界面的4種模式如表5-4所示表5-5E信號功能表RSR/W功能說明LLMPU寫指令到指令暫存器(IR)LH讀出忙標(biāo)志(BF)及地址記數(shù)器(AC)的狀態(tài)HLMPU寫入數(shù)據(jù)到數(shù)據(jù)暫存器(DR)HHMPU從數(shù)據(jù)暫存器(DR)中讀出數(shù)據(jù)表5-4RS,R/W的配合選擇決定控制界面4種模式表(2)E信號功能如表5-5所示E狀態(tài)執(zhí)行動作結(jié)果高——>低I/O緩沖——>DR配合/W進(jìn)行寫數(shù)據(jù)或指令高DR——>I/O緩沖配合R進(jìn)行讀數(shù)據(jù)或指令低/低——>高無動作--模塊主要硬件構(gòu)成說明

忙標(biāo)志:BFBF標(biāo)志提供內(nèi)部工作情況。BF=1表示模塊在進(jìn)行內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù)。BF=0時,模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù)。字型產(chǎn)生ROM(CGROM)字型產(chǎn)生ROM(CGROM)提供8192個此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示(DISPLAYON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAYOFF)。DFF的狀態(tài)是指令DISPLAYON/OFF和RST信號控制的。顯示數(shù)據(jù)RAM(DDRAM)模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個位元組的空間,最多可控制4行16字(64個字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù)RAM時,可分別顯示CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英文數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫入的編碼選擇,在0000H—0006H的編碼中(其代碼分別是0000、0002、0004、0006共4個)將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英文數(shù)字的字型,至于A1以上的編碼將自動的結(jié)合下一個位元組,組成兩個位元組的編碼形成中文字型的編碼BIG5(A140—D75F),GB(A1A0-F7FFH)。字型產(chǎn)生RAM(CGRAM)字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過DDRAM顯示在屏幕中。地址計數(shù)器AC地址計數(shù)器是用來貯存DDRAM/CGRAM之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM的值時,地址計數(shù)器的值就會自動加一,當(dāng)RS為“0”時而R/W為“1”時,地址計數(shù)器的值會被讀取到DB6——DB0中。光標(biāo)/閃爍控制電路此模塊提供硬體光標(biāo)及閃爍控制電路,由地址計數(shù)器的值來指定DDRAM中的光標(biāo)或閃爍位置。指令說明

模塊控制芯片提供兩套控制命令,基本指令和擴(kuò)充指令如表5-6所示:

指令碼功能指令RSR/WD7D6D5D4D3D2D1D0--清除顯示0000000001將DDRAM填滿"20H",并且設(shè)定DDRAM的地址計數(shù)器(AC)到"00H"地址歸位000000001X設(shè)定DDRAM的地址計數(shù)器(AC)到"00H",且將游標(biāo)移到開頭原點位置;這個指令不改變DDRAM的內(nèi)容顯示狀態(tài)開/關(guān)0000001DCBD=1:整體顯示

ONC=1:游標(biāo)

ONB=1:游標(biāo)位置反白允許進(jìn)入點設(shè)定00000001I/DS指定在數(shù)據(jù)的讀取與寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位游標(biāo)或顯示移位控制000001S/CR/LXX設(shè)定游標(biāo)的移動與顯示的移位控制位;這個指令不改變DDRAM的內(nèi)容功能設(shè)定00001DLXREXXDL=0/1:4/8位數(shù)據(jù)

RE=1:擴(kuò)充指令操作RE=0:基本指令操作設(shè)定CGRAM地址0001AC5AC4AC3AC2AC1AC0設(shè)定CGRAM地址設(shè)定DDRAM地址0010AC5AC4AC3AC2AC1AC0設(shè)定DDRAM地址(顯示位址)

第一行:80H-87H第二行:90H-97H讀取忙標(biāo)志和地址01BFAC6AC5AC4AC3AC2AC1AC0讀取忙標(biāo)志(BF)可以確認(rèn)內(nèi)部動作是否完成,同時可以讀出地址計數(shù)器(AC)的值寫數(shù)據(jù)到RAM10數(shù)據(jù)將數(shù)據(jù)D7——D0寫入到內(nèi)部的RAM(DDRAM/CGRAM/IRAM/GRAM)讀出RAM的值

1

1

數(shù)據(jù)從內(nèi)部RAM讀取數(shù)據(jù)D7——D0(DDRAM/CGRAM/IRAM/GRAM)表5-6基本指令表指令說明

模塊控制芯片提供兩套控制命令,基本指令和擴(kuò)充指令如表5-6所示:表5-7擴(kuò)充指令表

指令碼功能指令RSR/WD7D6D5D4D3D2D1D0--待命模式0000000001進(jìn)入待命模式,執(zhí)行其他指令都終止待命模式卷動地址開關(guān)開啟000000001SRSR=1:允許輸入垂直卷動地址SR=0:允許輸入IRAM和CGRAM地址

反白選擇00000001R1R0選擇2行中的任一行作反白顯示,并可決定反白與否。初始值R1R0=00,第一次設(shè)定為反白顯示,再次設(shè)定變回正常睡眠模式0000001SLXXSL=0:進(jìn)入睡眠模式SL=1:脫離睡眠模式擴(kuò)充功能設(shè)定00001CLXREG0CL=0/1:4/8位數(shù)據(jù)RE=1:擴(kuò)充指令操作RE=0:基本指令操作G=1/0:繪圖開關(guān)設(shè)定繪圖RAM地址0010AC60AC50AC4AC3AC3AC2AC2AC1AC1AC0AC0設(shè)定繪圖RAM先設(shè)定垂直(列)地址AC6AC5…AC0再設(shè)定水平(行)地址AC3AC2AC1AC0將以上16位地址連續(xù)寫入即可備注:IC1在接受指令前,微處理器必須先確認(rèn)其內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時,BF需為零,方可接受新的指令;如果在送出一個指令前并不檢查BF標(biāo)志,那么在前一個指令和這個指令中間必須延長一段較長的時間,即是等待前一個指令確實執(zhí)行完成。LCD12864液晶8位并行數(shù)據(jù)傳輸時序

LCD12864液晶8位并行數(shù)據(jù)傳輸時序如圖5-15和圖5-16所示。圖5-15MCU寫數(shù)據(jù)到LCD時序圖圖5-16MCU從LCD讀數(shù)據(jù)時序圖LCD12864液晶8位并行數(shù)據(jù)傳輸時序

在本書采用型號為SYN12864K-ZK液晶顯示屏,是一種具有4/8位并行、2線或3線串行多種接口方式,低電壓低功耗是其又一顯著特點,基本特性:

低電源電壓(VDD:+3.0--+5.5V)內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)

內(nèi)置128個16×8點陣字符2MHZ時鐘頻率 背光方式:側(cè)部高亮黃色LED通訊方式:串行、并口可選 內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負(fù)壓無需片選信號,簡化軟件設(shè)計 工作溫度:0℃-+55℃存儲溫度:-20℃-+60℃單片機(jī)與液晶顯示器接口電路圖如圖5-17所示。SYN12864K-ZK的DB0~DB7接單片機(jī)的P1口進(jìn)行數(shù)據(jù)傳輸。引腳RS,RW,EN分別接單片機(jī)的P2.0P2.1P2.2口,PSB接高,設(shè)置為并行傳輸數(shù)據(jù)。圖5-17單片機(jī)與LCD12864液晶顯示器接口電路圖LCD12864液晶8位并行數(shù)據(jù)傳輸時序

SYN12864K-ZK型的LCD液晶屏顯示器軟件設(shè)計從底層寫起,逐步提高,最后完成顯示一個code區(qū)域的數(shù)據(jù)功能。既先往LCD液晶顯示器發(fā)送以字節(jié)的數(shù)據(jù)或指令寫起,逐步上升,最后到畫一個圖,指定開始列,上下層,圖形的寬度,圖形指針固定高度為16的圖。漢字和數(shù)字字符都是通過調(diào)用字庫來得到。往LCD液晶顯示器發(fā)送以字節(jié)的數(shù)據(jù)或指令子程序調(diào)用方式:voidLCD12864_write_com(unsignedcharcom);函數(shù)說明:發(fā)送指令com到LCD。調(diào)用方式:voidLCD12864_write_data(unsignedchardata);函數(shù)說明:發(fā)送指令data到LCD。先判斷芯片是否忙,忙則等待,不忙則可以發(fā)數(shù)據(jù)或指令。其流程圖如圖5-18所示。圖5-18LCD液晶指令(左)、數(shù)據(jù)(右)發(fā)送流程圖LCD12864液晶8位并行數(shù)據(jù)傳輸時序

如果LCD屏幕信息刷新速率不快,可以用延時來代替。LCD液晶屏初始化子程序調(diào)用方式:voidLCD12864_init(void);函數(shù)說明:LCD液晶屏初始化,開機(jī)后僅調(diào)用一次。主要負(fù)責(zé)設(shè)置LCD屏的一些狀態(tài),包括芯片復(fù)位,選擇通信方式為并口,關(guān)芯片顯示,設(shè)置8位數(shù)據(jù)且為基本指令集,設(shè)置芯片顯示關(guān),清除顯示,指定在數(shù)據(jù)的讀取與寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位。LCD初始化完成后就可以顯示各種圖形和字符了,即進(jìn)入正常的工作狀態(tài)。清屏子程序調(diào)用方式:voidLCD12864_clear(void);函數(shù)說明:清屏。清屏子程序是在整個畫面上畫一個空白的圖片。顯示單個字符程序調(diào)用方式:voidLCD12864_putchar(intx,inty,charch);函數(shù)說明:在屏幕x行y列開始輸出ch這個字符。顯示字符串程序調(diào)用方式:voidLCD12864_puts(intx,inty,unsignedchar*str);函數(shù)說明:在屏幕x行y列開始輸出str這個字符串,不支持自動換行。顯示整型程序調(diào)用方式:voidLCD12864_putnum(intx,inty

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論