在P87LPC764單片機(jī)I2C總線系統(tǒng)中擴(kuò)展LCD顯示器
1 引言
i2c總線是philips公司推出的芯片間串行傳輸總線。它僅用串行數(shù)據(jù)線(sda)和串行時(shí)鐘線(scl)兩根連線便實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,并可很方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。
本文介紹在p87lpc764單片機(jī)中利用i2c總線系統(tǒng)中典型的lcd驅(qū)動(dòng)控制器件pcf8577c來(lái)擴(kuò)展256段靜態(tài)lcd的電路設(shè)計(jì)方法。
2 硬件電路設(shè)計(jì)
2.1 p87lpc764單片機(jī)的i2c總線接口
p87lpc764是philips公司生產(chǎn)的一種小封裝、低成本、高性能的單片機(jī)(具體內(nèi)容見參考文獻(xiàn)2)。它采用80c51加速處理器結(jié)構(gòu),片內(nèi)帶有支持i2c總線的硬件接口。當(dāng)激活i2c總線時(shí),p87lpc764端口1中的p1.2與p1.3可分別用作scl和sda總線功能。其i2c總線由3個(gè)特殊功能寄存器控制,即i2c控制寄存器i2con、i2c配置寄存器i2cfg、i2c數(shù)據(jù)寄存器i2dat。各寄存器格式及位含義如下。
a.i2con寄存器
i2con寄存器各位的含義在進(jìn)行讀寫操作時(shí)完全不同。下面分別介紹其讀、寫操作格式。
各位功能如下:
rdat:數(shù)據(jù)接收位。在scl線的上升沿時(shí)由sda線上獲取。讀rdat位時(shí)不清除drdy,也不釋放scl線。
atn:當(dāng)drdy、arl、str或stp中任意一個(gè)為1時(shí),atn置1。通過(guò)測(cè)試atn位可判斷總線上是否發(fā)生某類事件。
drdy:數(shù)據(jù)準(zhǔn)備好標(biāo)志位。在scl上升沿時(shí)置位,讀寫i2dat寄存器或向cdr寫入1時(shí)清0。 arl:總線仲裁失敗標(biāo)志位。
str:?jiǎn)?dòng)標(biāo)志位。當(dāng)檢測(cè)到啟動(dòng)條件時(shí)置1。
stp:停止標(biāo)志位。當(dāng)檢測(cè)到停止條件時(shí)置1。 master:當(dāng)本器件成為i2c總線主控器時(shí)置1。
其中:
cxa:寫入1,清除數(shù)據(jù)發(fā)送狀態(tài)。
idle:寫入1,則被控制要檢測(cè)到下一位啟動(dòng)位時(shí)才接收總線信息。
cdr:寫入1,清除drdy。
carl:寫入1,清除arl。
cstr:寫入1,清除str。
cstp:寫入1,清除stp。
xstr:當(dāng)裝置為主控制器時(shí),向xstr和cdr寫入1,使i2c總線發(fā)送重復(fù)啟動(dòng)位。
xstp:當(dāng)裝置為主控制器時(shí),向xstp和cdr寫入1,使i2c總線發(fā)送停止位。
b.i2cfg寄存器
sla:寫入1,本裝置成為i2c總線被控器。
mastrq:寫入1,本裝置成為i2c總線主控器。
cti:寫入1,清除定時(shí)器1溢出標(biāo)志。
tirun:寫入1,定時(shí)器1開始運(yùn)行;寫入0,停止定時(shí)器1運(yùn)行并將定時(shí)器清0。
ct1和ct0用來(lái)決定scl線上高低電平的最小時(shí)間。
c.i2dat寄存器
i2dat寄存器的讀、寫格式是不同的。
其中rdat為數(shù)據(jù)接收位。在scl線的上升沿時(shí)從sda中獲取。在從i2dat的rdat中讀數(shù)據(jù)的同時(shí),可清除drdy和設(shè)置發(fā)送激活狀態(tài)。
其中xdat為數(shù)據(jù)發(fā)送位。下一個(gè)要發(fā)送的數(shù)據(jù)寫入此位。寫xdat時(shí),應(yīng)清除drdy和設(shè)置發(fā)送激活狀態(tài)。
2.2 i2c總線顯示器件pcf8577c
a.引腳功能
pcf8577c是i2c總線系統(tǒng)中典型的lcd驅(qū)動(dòng)控制器件,在靜態(tài)方式時(shí)可驅(qū)動(dòng)32段lcd;在雙級(jí)方式時(shí)可驅(qū)動(dòng)64段lcd。若采用多片級(jí)聯(lián),則最大可構(gòu)成256段lcd顯示系統(tǒng)。另外,pcf8577c還具有顯示數(shù)據(jù)自動(dòng)增量寫入功能,而且編程十分簡(jiǎn)單。pcf8577的引腳排列如圖1所示。各引腳功能如下:
s32~s1:段輸出端口。
bp1:背極輸出。級(jí)聯(lián)時(shí)可作為同步輸入端,接第一級(jí)的bp1信號(hào)作為同步信號(hào)。
a2/bp2:在靜態(tài)驅(qū)動(dòng)方式下,該端作為硬件地址線a2,用于設(shè)定8577c的硬件子地址。在雙級(jí)驅(qū)動(dòng)方式下,該腳用作第二背極輸出bp2。級(jí)聯(lián)時(shí)則作為同步輸入端,接第一級(jí)的bp2信號(hào)作為同步信號(hào)。在雙極方式下,其硬件子地址僅由a1和a0來(lái)決定。
a1:硬件地址線。片內(nèi)無(wú)下拉電路,不可懸空。
a0/osc:該腳需外接電阻電容來(lái)構(gòu)成振蕩器,此時(shí)a0被規(guī)定為邏輯0,用作硬件地址線。級(jí)聯(lián)時(shí),除第一級(jí)之外,其它各級(jí)均不外接電阻電容構(gòu)成的振蕩器,而應(yīng)接vdd或vss來(lái)設(shè)置器件子地址。
vdd和vss:分別為電源正、負(fù)極。
scl和sda:分別為i2c總線的時(shí)鐘和數(shù)據(jù)線。
b.?dāng)?shù)據(jù)操作格式
8577c有九個(gè)寄存器,其操作格式如圖2所示。下面就控制寄存器和段字節(jié)寄存器加以說(shuō)明。
●控制寄存器
控制寄存器用于在微處理機(jī)對(duì)8577c的一次數(shù)據(jù)傳送過(guò)程中裝入第二字節(jié)(控制字節(jié))??刂谱指魑缓x如下:
mode:驅(qū)動(dòng)方式選擇位,“0”為選擇靜態(tài)驅(qū)動(dòng)方式;“1”為選擇雙極驅(qū)動(dòng)方式。
bank:數(shù)據(jù)選擇位,“0”為選擇顯示a體數(shù)據(jù),“1”為選擇顯示b體數(shù)據(jù)。
v5v4v3:這三位與硬件子地址相對(duì)應(yīng)。若器件的從地址與i2c總線上的從地址相符,且v5v4v3=a2a1a0,則該器件被選中,此時(shí)即可接收總線上送來(lái)的數(shù)據(jù),并將其裝入段字節(jié)寄存器,否則不予理睬。在雙極驅(qū)動(dòng)方式下,由于a2作bp2,故v5無(wú)效。
v2v1v0:段字節(jié)寄存器sbr的地址位,用來(lái)決定將段數(shù)據(jù)寫入哪一個(gè)sbr。
用v5~v0可組成段字節(jié)向量sbv,它具有自動(dòng)增量功能。若需一次傳送多個(gè)段字節(jié)數(shù)據(jù),可在每裝入一個(gè)段字節(jié)數(shù)據(jù)后便sbv自動(dòng)加2(靜態(tài)方式)或加1(雙級(jí)方式),以便裝入下一個(gè)數(shù)據(jù);級(jí)聯(lián)時(shí),當(dāng)一片8577c裝滿后,sbv自動(dòng)增量,并指向硬件子地址與之相鄰的下一個(gè)8577c的sbr。sbv的值可以在111111~000000之間循環(huán)滾動(dòng)。
●段字節(jié)寄存器sbr
八個(gè)sbr可分成兩組,地址為偶數(shù)的一組稱為a體,奇數(shù)組稱為b體。在靜態(tài)方式下,要么顯示a體數(shù)據(jù),要么顯示b體數(shù)據(jù)。可以通過(guò)改變bank位的值來(lái)切換顯示內(nèi)容。在雙極方式下,八個(gè)sbr將同時(shí)使用,這時(shí)bank為不關(guān)心碼,a體對(duì)應(yīng)于bp1,b體對(duì)應(yīng)于bp2。
c.總線操作
pcf8577c的總線操作包括從地址和硬件子地址,其中從地址固定為0111010,共七位,是i2c總線委員會(huì)分配的。此外,還有三位硬件子地址(a2a1a0)待設(shè)定。若應(yīng)用系統(tǒng)中有多片8577c,則需分別設(shè)定不同的硬件子地址來(lái)加以區(qū)別。選中8577c指的是它的從地址和硬件子地址都被選中。
其中:起始信號(hào)s之后的第一個(gè)字節(jié)中的最低位是方向位,因8577c只能接收數(shù)據(jù),所以該位必須為0;其余七位是從地址。若系統(tǒng)含多片8577c,則每片都會(huì)對(duì)第一和第二字節(jié)作出應(yīng)答;而段數(shù)據(jù)字節(jié)后的應(yīng)答信號(hào)僅由被選中的芯片產(chǎn)生。數(shù)據(jù)字節(jié)可連續(xù)多個(gè)。如果僅改變bank值,而不改變sbr中的內(nèi)容,則應(yīng)在控制字節(jié)的應(yīng)答位之后發(fā)送停止信號(hào)p,這時(shí)被選中的芯片將更新bank。
2.3 顯示電路設(shè)計(jì)
利用p87lpc764擴(kuò)展lcd的接口電路如圖3所示。該電路采用靜態(tài)驅(qū)動(dòng)方式,由p87lpc764單片機(jī)訪問(wèn)8片8577c以組成最大級(jí)聯(lián)系統(tǒng)。每片8577c可驅(qū)動(dòng)32段lcd,因此,共可擴(kuò)展256段lcd。而在級(jí)聯(lián)應(yīng)用時(shí),只由第一級(jí)構(gòu)成振蕩器,以輸出背極信號(hào),并對(duì)后級(jí)進(jìn)行同步。
3 軟件設(shè)計(jì)
該應(yīng)用電路是一個(gè)單主i2c總線系統(tǒng),數(shù)據(jù)傳送操作只有主發(fā)送方式,因而在編程過(guò)程中沒(méi)有檢測(cè)總線錯(cuò)誤。數(shù)據(jù)發(fā)送時(shí),每發(fā)送1個(gè)字節(jié),都應(yīng)檢測(cè)應(yīng)答信號(hào),如無(wú)應(yīng)答信號(hào),建立標(biāo)志位f0以重發(fā)數(shù)據(jù)。該電路采用靜態(tài)方式,顯示為a體數(shù)據(jù)。
如果程序中的顯示緩沖區(qū)30h到7fh單元用來(lái)存放字形碼,則該i2c總線顯示電路的程序清單如下:
4 結(jié)束語(yǔ)
本文介紹了i2c總線系統(tǒng)中利用典型的lcd驅(qū)動(dòng)控制器件pcf8577c擴(kuò)展lcd顯示器的電路及程序設(shè)計(jì)。參考本文思路,也可實(shí)現(xiàn)動(dòng)態(tài)lcd顯示器的擴(kuò)展。該方法在i2c總線系統(tǒng)中進(jìn)行人機(jī)接口電路設(shè)計(jì)時(shí)具有較好的參考價(jià)值。
評(píng)論