單片微型計(jì)算機(jī)原理及接口技術(shù)-人機(jī)交互接口_第1頁
單片微型計(jì)算機(jī)原理及接口技術(shù)-人機(jī)交互接口_第2頁
單片微型計(jì)算機(jī)原理及接口技術(shù)-人機(jī)交互接口_第3頁
單片微型計(jì)算機(jī)原理及接口技術(shù)-人機(jī)交互接口_第4頁
單片微型計(jì)算機(jī)原理及接口技術(shù)-人機(jī)交互接口_第5頁
已閱讀5頁,還剩154頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1/159人機(jī)交互接口本章學(xué)習(xí)目標(biāo)掌握鍵盤接口技術(shù)掌握數(shù)碼、液晶顯示技術(shù)了解數(shù)碼管顯示驅(qū)動(dòng)和鍵盤掃描控制專用芯片2/159人機(jī)交互接口是指人與計(jì)算機(jī)之間建立聯(lián)系、交換信息的輸入/輸出設(shè)備的接口,這些設(shè)備包括鍵盤、顯示器、打印機(jī)、鼠標(biāo)器等。本章主要介紹鍵盤輸入接口設(shè)計(jì)、顯示原理及接口技術(shù)。3/159非編碼鍵盤和編碼鍵盤非編碼鍵盤:直接利用口線連接按鍵開關(guān)或開關(guān)型傳感器來實(shí)現(xiàn),通過程序判斷口線的電平就能夠確定輸入的鍵值。優(yōu)缺點(diǎn):設(shè)計(jì)簡(jiǎn)單,使用方便,且因?yàn)榫哂泄灿枚?,容易直接同開關(guān)電路或開關(guān)型傳感器連接。但是這種方式的口線利用率較低,受單片機(jī)口線數(shù)量的限制,其鍵盤規(guī)模無法做大?!?0.1鍵盤接口技術(shù)4/159編碼鍵盤:將口線與按鍵開關(guān)連接成矩陣電路,通過軟件掃描、識(shí)別I/O口上的編碼,按編碼規(guī)則識(shí)別輸入鍵值。優(yōu)點(diǎn):口線利用率高,鍵盤規(guī)??梢宰龅幂^大。具體采用哪一種形式的鍵盤可以根據(jù)控制系統(tǒng)的規(guī)模及用途決定。5/159一、簡(jiǎn)易鍵盤接口的實(shí)現(xiàn)簡(jiǎn)易鍵盤接口采用非編碼形式,典型應(yīng)用電路如圖所示。圖10-1簡(jiǎn)易鍵盤接口電路6/159鍵盤在使用中考慮到人員操作或機(jī)械特性在接觸時(shí)產(chǎn)生的抖動(dòng)問題,即按鍵開關(guān)在接通或斷開瞬間并非完全可靠接觸,而是存在一個(gè)抖動(dòng)期,在此期間的電平變化波形如圖所示。圖10-2按鍵閉合時(shí)的電平變化波形7/159抖動(dòng)期一般不超過10ms。在口線電平抖動(dòng)期間,單片機(jī)無法準(zhǔn)確檢測(cè)出口線電平的正確值,必須采取一定的措施進(jìn)行鑒別。常用的方法是延時(shí)消抖法,例如遇到由高向低的電平轉(zhuǎn)換后先不急于讀取口線鍵值,而是在中斷服務(wù)程序的開始執(zhí)行一段10~20ms的延時(shí)程序。若延時(shí)程序后再次判斷口線仍為低電平則進(jìn)入口線的鍵值讀取程序,否則放棄鍵值讀取操作。8/159示例代碼如下:

ORG 0000H LJMP MAIN ORG 0003H LJMP

KRD ORG 0100HMAIN:

MOV SP,#70H… ;其他初始化代碼MAINLOOP: ;主循環(huán)

…LJMP MAINLOOP9/159KRD:LCALL

DEL20

;調(diào)20ms延時(shí)子程序

MOVA,P2;讀P2口鍵值

JNB ACC.0,KPR0 ;判斷P2.0~P2.7是否有鍵按下

JNB ACC.1,KPR1JNB ACC.2,KPR2JNB ACC.3,KPR3JNBACC.4,KPR4JNB ACC.5,KPR5JNB ACC.6,KPR6JNB ACC.7,KPR7RETI10/159KPR0:

;P2.0口線按鍵處理程序

MOV A,P2 ;讀P2口鍵值

JNB ACC.0,KPR0;判斷P2.0口線電平是否變高KP01:CALL DELAY20 ;調(diào)20ms延時(shí)子程序

MOV A,P2 ;讀P2口鍵值

JNB ACC.0,KP01;證實(shí)P2.0口線一直保持低電平

… ;按鍵處理程序。由低電平變?yōu)楦唠娖秸J(rèn)為按鍵按下RETIKPR1:… ;P2.1口線按鍵處理程序

RETIKPR7:… ;P2.7口線按鍵處理程序

RETIDEL20:… ;20ms延時(shí)子程序

RETEND11/159二、矩陣鍵盤接口的實(shí)現(xiàn)簡(jiǎn)易鍵盤電路中每一個(gè)按鍵占用一根I/O口線,口線利用率較低。如果將口線按照行、列排成矩陣形式,則可在相同口線數(shù)量的條件下增大鍵盤的規(guī)模。12/159例如,可以將P2口的8根I/O線排列成4?×?4矩陣形式,連接16只按鍵。如圖所示。圖10-34?×?4矩陣式鍵盤電路13/1591、電路結(jié)構(gòu)及設(shè)計(jì)思路矩陣式鍵盤將P2口的8根I/O口線分成行、列線連接,圖中P2.0~P2.3為行線,P2.4~P2.7為列線。16只按鍵分別跨接在對(duì)應(yīng)的行、列線節(jié)點(diǎn)上。如果單片機(jī)在行線對(duì)應(yīng)的I/O口線上有數(shù)據(jù)輸出,當(dāng)有鍵按下時(shí),行、列線短路,單片機(jī)在列線對(duì)應(yīng)的I/O口線上的輸入數(shù)據(jù)將由行線上的電平?jīng)Q定。14/159行線特定的4位數(shù)據(jù)輸出和列線對(duì)應(yīng)的4位數(shù)據(jù)輸入可以組成一個(gè)8位的特征字,該特征字即為鍵值,代表了按下的鍵所在的位置。15/1592、鍵值產(chǎn)生的原理1)掃描法產(chǎn)生鍵值以行線作為掃描輸出,以列線作為接收輸入,依次將各個(gè)行線置為低電平,并在列線上逐次接收數(shù)據(jù)。掃描完成后,如果發(fā)現(xiàn)接收到的某一列線有低電平,則表示該列線與行線連接的按鍵已經(jīng)閉合。在接收到低電平的那次掃描中,行線數(shù)據(jù)與列線數(shù)據(jù)的組合便是所期望的鍵值,由該鍵值可確定閉合鍵在矩陣連接中的連接位置。16/1592)線反轉(zhuǎn)識(shí)別法產(chǎn)生鍵值先將行線全部置為低電平,列線全部置為高電平,從列線對(duì)應(yīng)的I/O口線接收數(shù)據(jù),如果發(fā)現(xiàn)有口線變低,則證明該列線與閉合的按鍵連接。將列線全部置為低電平,行線全部置為高電平,從行線對(duì)應(yīng)的I/O口線接收數(shù)據(jù),如果發(fā)現(xiàn)有口線變低,則證明該行線與閉合的按鍵連接。對(duì)上述兩次操作的結(jié)果所獲得的兩個(gè)8位數(shù)據(jù)進(jìn)行綜合分析,便可確定閉合的按鍵所在位置。17/1593、鍵盤識(shí)別原理在進(jìn)行鍵盤掃描產(chǎn)生鍵值之前,為避免無鍵按下的空掃描,浪費(fèi)CPU執(zhí)行時(shí)間,應(yīng)該首先進(jìn)行一次鍵盤識(shí)別,具體方法有兩種。18/1591)硬件中斷識(shí)別法將矩陣式鍵盤電路的所有列線連接至“與”門電路的輸入端,“與”門電路的輸出端與單片機(jī)外部中斷連接。把全部行線置為低電平,全部列線置為高電平,當(dāng)有鍵按下時(shí)列線上出現(xiàn)低電平,對(duì)應(yīng)“與”門的輸出電平出現(xiàn)由高向低的跳變,經(jīng)引腳進(jìn)入單片機(jī)產(chǎn)生中斷,在中斷服務(wù)程序中開始掃描鍵盤。19/1592)軟件查詢識(shí)別法將全部行線置為低電平,全部列線置為高電平,定時(shí)從列線對(duì)應(yīng)的I/O口線輸入數(shù)據(jù),如果判定接收的數(shù)據(jù)中有低電平存在,則說明有按鍵按下,開始執(zhí)行鍵盤掃描程序。這種方法無需在矩陣鍵盤中連接“與”門電路,硬件電路簡(jiǎn)潔。上述兩種識(shí)別方法中,采用硬件中斷識(shí)別方式可以隨時(shí)響應(yīng)鍵盤動(dòng)作,具有較強(qiáng)的實(shí)時(shí)性,而采用軟件查詢方式則可以簡(jiǎn)化電路。具體實(shí)施應(yīng)根據(jù)實(shí)際要求設(shè)計(jì)。20/1594、按鍵操作的抖動(dòng)處理與簡(jiǎn)易鍵盤電路相同,矩陣鍵盤同樣要考慮按鍵觸點(diǎn)閉合或斷開時(shí)存在的抖動(dòng)期,一般在取回鍵值后進(jìn)行5~10ms的延時(shí),判斷原鍵值是否存在,以決定是否存在按鍵的誤動(dòng)作。21/1595、矩陣鍵盤處理程序下面設(shè)計(jì)可供調(diào)用的鍵盤掃描子程序。程序可以讀入4?×?4鍵盤狀態(tài),然后將鍵值送往內(nèi)部數(shù)據(jù)存儲(chǔ)器的RAM30H~33H單元。具體方法是,利用單片機(jī)P2口的P2.0~P2.3口線輪流向行掃描線送低電平,將每次掃描中由P2.4~P2.7返回的數(shù)據(jù)與當(dāng)時(shí)行掃描送出的數(shù)據(jù)組合后作為鍵值送內(nèi)部RAM的30H~33H單元,鍵值內(nèi)容為8位,低4位中的“0”對(duì)應(yīng)于行掃描輸出線,高4位中的“0”對(duì)應(yīng)于閉合按鍵連接的列線。22/159鍵盤掃描程序清單如下:KEY-SCAN: MOVR0,#30H;設(shè)置鍵值存儲(chǔ)單元地址指針

MOV A,#0FEH ;設(shè)置行掃描初始狀態(tài)SCAN:

MOVP2,A;輸出至行掃描線

MOV R1,A ;保存行掃描線狀態(tài)

MOV A,P2 ;讀回列線數(shù)據(jù)

AND A,#0F0H ;保留讀回?cái)?shù)據(jù)的高4位

ORL A,R1 ;組合鍵值

MOV @R0,A ;鍵值送存儲(chǔ)單元

RET23/159§10.2顯示技術(shù)一、數(shù)碼LED顯示技術(shù)1、顯示元件概述主要顯示元件:LED(發(fā)光二極管顯示器)或LCD(液晶顯示器)。顯示形式:筆畫式和點(diǎn)陣式。筆畫式顯示元件大多為L(zhǎng)ED數(shù)碼管,用于顯示數(shù)字或簡(jiǎn)單字母信息,適合于規(guī)模較小的單片機(jī)系統(tǒng)。如果考慮到單片機(jī)系統(tǒng)功耗因素,也有筆畫式LCD數(shù)碼管可供選用,但在控制和連接上要稍微復(fù)雜一些。24/159顯示大信息量或圖形時(shí),一般使用點(diǎn)陣式LCD顯示器。這種顯示器結(jié)構(gòu)比較復(fù)雜,需要考慮灰度調(diào)節(jié)、高壓背光的配合,電路連接及程序操作都比較繁瑣。使用點(diǎn)陣式LCD顯示器最好采用內(nèi)置控制器的模塊形式,在這種情況下,單片機(jī)與點(diǎn)陣式LCD的接口實(shí)際上變成了單片機(jī)與單片機(jī)之間的數(shù)據(jù)通信。本節(jié)內(nèi)容主要介紹筆畫式LED和點(diǎn)陣式LCD的應(yīng)用。25/1592、七段碼LED顯示器LED數(shù)碼管由8只LED發(fā)光二極管構(gòu)成,8只LED發(fā)光二極管分別代表組成數(shù)碼的筆畫(稱為段)和該位數(shù)碼的小數(shù)點(diǎn)。由于顯示的數(shù)字由7個(gè)顯示段組合而成,所以也稱為七段碼。26/159LED七段數(shù)碼管顯示器的結(jié)構(gòu)如圖所示。在七段數(shù)碼管顯示器中為簡(jiǎn)化電路引出線,通常將8只發(fā)光二極管的陰極或陽極連接在一起作為電路的公共端,由此便出現(xiàn)了共陰極或共陽極顯示器的名稱,實(shí)際使用時(shí)采用高電平或低電平驅(qū)動(dòng)。圖10-4LED七段數(shù)碼管顯示器的結(jié)構(gòu)27/159注意如圖電路結(jié)構(gòu)所示,對(duì)于七段數(shù)碼管的驅(qū)動(dòng)電流應(yīng)加以限制,在保證不超過單片機(jī)或其他驅(qū)動(dòng)芯片功耗的前提下維持正常的發(fā)光亮度。28/1593、七段碼LED顯示器的顯示方式及接口七段碼LED顯示器可以采用靜態(tài)顯示和動(dòng)態(tài)顯示兩種形式。靜態(tài)顯示是指在顯示時(shí)段內(nèi)對(duì)組成字型的發(fā)光二極管保持恒定的導(dǎo)通或截止;動(dòng)態(tài)顯示是指在顯示時(shí)段內(nèi)對(duì)組成字形的發(fā)光二極管實(shí)行間斷或輪流(多字符顯示)點(diǎn)亮。其中前一種形式程序操作簡(jiǎn)單,CPU送出字形碼后可以不再管理。而后一種顯示形式則可最大限度地降低顯示功耗,但是占用了CPU的執(zhí)行程序時(shí)間。29/1591)靜態(tài)顯示接口由單片機(jī)串行口與移位寄存器芯片CD4094組成的共陰極七段碼LED靜態(tài)顯示接口電路如圖所示。圖10-5LED靜態(tài)顯示接口電路30/159電路說明單片機(jī)工作在串口方式“0”狀態(tài),要顯示的字形以七段碼形式由單片機(jī)的RXD輸出至CD4094的數(shù)據(jù)輸入端D,每次輸出1個(gè)字節(jié),對(duì)應(yīng)1位顯示數(shù)字。多位顯示時(shí)需要輸出多個(gè)字節(jié)的顯示數(shù)據(jù),同時(shí)也需要多個(gè)CD4094級(jí)聯(lián),即前級(jí)CD4094的數(shù)據(jù)輸出端QS與后級(jí)CD4094的數(shù)據(jù)輸入端D連接。31/159單片機(jī)的TXD與每個(gè)CD4094的時(shí)鐘輸入端CP連接,在串行數(shù)據(jù)輸出過程中TXD發(fā)出移位脈沖,驅(qū)動(dòng)數(shù)據(jù)依次逐位在CD4094芯片中移動(dòng)。當(dāng)所有要顯示的數(shù)據(jù)全部送出后,單片機(jī)可以將P1.0控制口線由低置高,通過CD4094的ST引腳控制,使所有送入CD4094的數(shù)據(jù)由串行轉(zhuǎn)為并行輸出,在LED數(shù)碼管上顯示出對(duì)應(yīng)位的數(shù)字內(nèi)容。32/159靜態(tài)顯示的主要特點(diǎn):是占用CPU處理時(shí)間少,顯示穩(wěn)定、亮度高,使用口線少。但在使用中應(yīng)注意串口數(shù)據(jù)傳送的格式及字符排位順序。串行靜態(tài)顯示的位數(shù)主要由TXD、P1.0口線的帶負(fù)載能力決定。33/159實(shí)際使用中也可不用P1.0,將CD4094的ST端引腳始終接高電平,進(jìn)入CD4094的串行數(shù)據(jù)會(huì)自動(dòng)轉(zhuǎn)為并行輸出。這樣做的缺點(diǎn)是在單片機(jī)送出顯示數(shù)據(jù)的過程中LED數(shù)碼管會(huì)顯示亂碼。但是數(shù)據(jù)傳送過程很短,在不頻繁更換顯示數(shù)據(jù)的場(chǎng)合還是可以接受的。34/159應(yīng)用實(shí)踐證明,CD4094的輸出與LED數(shù)碼管之間可以不加限流電阻。當(dāng)CD4094輸出電流過大時(shí)會(huì)引起輸出電壓下降,從而自動(dòng)限制了流過LED的電流。另外,如果STC5A60S2單片機(jī)的串行口1在系統(tǒng)中另有用途,則可以其串口2輸出數(shù)據(jù)。35/1592)動(dòng)態(tài)顯示接口采用多位LED數(shù)碼管顯示時(shí),可以逐位點(diǎn)亮數(shù)碼管,雖然在顯示過程中有些數(shù)碼管有熄滅時(shí)間,但是利用人眼的視覺暫留效應(yīng)和LED發(fā)光二極管的余輝,只要點(diǎn)亮與熄滅時(shí)間分配適當(dāng),仍能夠感覺到所有數(shù)碼管始終處于顯示狀態(tài)。36/159動(dòng)態(tài)顯示形式時(shí)CPU需要經(jīng)常執(zhí)行相關(guān)程序進(jìn)行顯示刷新,這樣可能占用較多的CPU執(zhí)行時(shí)間,對(duì)需要快速運(yùn)算或?qū)崟r(shí)控制的用途會(huì)增加編程難度。但是,在實(shí)際編程中可以融入一些編程技巧減輕CPU刷新顯示的負(fù)擔(dān)。例如,將逐位顯示程序編入經(jīng)常調(diào)用的延時(shí)子程序中,就可以在執(zhí)行正常程序的過程中滿足動(dòng)態(tài)顯示的需求。37/159動(dòng)態(tài)顯示可以提高單片機(jī)顯示口線的利用率,簡(jiǎn)化硬件電路的接線。LED動(dòng)態(tài)顯示接口的具體電路如圖所示。圖10-6LED動(dòng)態(tài)顯示接口電路38/159設(shè)需要顯示的4位字形七段碼存放在單片機(jī)內(nèi)部RAM的60H開始的4個(gè)單元中,動(dòng)態(tài)掃描顯示子程序如下:39/159SDIS: MOV R0,#60H ;設(shè)顯示數(shù)據(jù)存儲(chǔ)區(qū)指針

MOV DPTR,#DSEG ;設(shè)置七段碼表首地址

MOV R7,#0FEH ;設(shè)置顯示位指針,指向最右邊一位

MOV A,R7 ;顯示指針內(nèi)容送累加器LD0: MOV P2,A

;選通顯示位

RL

A

;顯示指向下一位

MOV R7,A

;存顯示指針內(nèi)容

MOV A,@R0;取顯示內(nèi)容

MOVCA,@A+DPTR;查顯示內(nèi)容的字形碼

MOV P0,A ;送出顯示字形碼

CALL DEL1

;調(diào)延時(shí)子程序

INC R0 ;指向下一顯示存儲(chǔ)單元

MOV A,R7

;取顯示指針內(nèi)容

JB ACC.4,LD0

;未掃描完4位循環(huán)RET40/159;下面是0~9,A~F共陽極字形七段碼DSEG:DBC0H,F(xiàn)9H,A4H,B0H,99H,92H,82H,F(xiàn)8H80H;DSEG2:DB90H,88H,83H,C6H,A1H,86H,8EH

請(qǐng)讀者自行補(bǔ)充完整其中的延時(shí)子程序和對(duì)應(yīng)的C語言程序。41/159二、液晶顯示技術(shù)液晶顯示器件(簡(jiǎn)稱LCD顯示器)由于具有顯示信息豐富、功耗低、體積小、無輻射等優(yōu)點(diǎn),得到了廣泛的應(yīng)用。LCD顯示器有筆畫分段、分割顯示、字符點(diǎn)陣顯示和圖形點(diǎn)陣LCD顯示形式之分,對(duì)于比較豐富的顯示內(nèi)容通常采用圖形點(diǎn)陣顯示形式,但是這種顯示形式的電路結(jié)構(gòu)及控制方式比較復(fù)雜。42/159為了便于使用,LCD圖形點(diǎn)陣顯示器通常以LCM(液晶顯示模塊)形式出現(xiàn),模塊中封裝了顯示器、驅(qū)動(dòng)電路、控制電路及背光調(diào)節(jié)電路等。本節(jié)以128×64點(diǎn)陣的漢字圖形型液晶顯示模塊OCMJ4X8C為例介紹圖形點(diǎn)陣LCD顯示接口的應(yīng)用。43/1591、OCMJ4X8C液晶顯示模塊概述OCMJ4X8C的液晶顯示屏為128×64點(diǎn)陣,可顯示4行、每行8個(gè)漢字。OCMJ4X8C可實(shí)現(xiàn)漢字、ASCII碼、點(diǎn)陣圖形、自造字體的同屏顯示。該模塊具有2MB的中文字形CGROM,其中含有8192個(gè)16×16點(diǎn)陣中文字庫;具有16KB的16×8點(diǎn)陣的ASCII字符庫;提供了一個(gè)64×256點(diǎn)陣的GDRAM繪圖區(qū)域;提供了4組16×16點(diǎn)陣的造字空間。44/159為了便于和多種微處理器、單片機(jī)接口,模塊提供了8位并行、2線串行、3線串行三種接口方式。OCMJ4X8C的2線串行接口方式符合SPI時(shí)序標(biāo)準(zhǔn),大大簡(jiǎn)化了液晶顯示模塊與單片機(jī)之間的接口設(shè)計(jì)。OCMJ4X8C模塊的工作電壓為4.5~5.5V,具有睡眠、正常及低功耗工作模式,可滿足系統(tǒng)各種工作電壓及便攜式儀器低功耗的要求。45/1592、模塊引腳OCMJ4X8C模塊引腳及對(duì)應(yīng)說明如表所示。引腳名稱方向說明引腳名稱方向說明1VSS-GND(0V)11DB4I/O數(shù)據(jù)42VDD-邏輯電源(+5v)12DB5I/O數(shù)據(jù)53VO-LCD電源(懸空)13DB6I/O數(shù)據(jù)64RS(CS)H/LH:數(shù)據(jù)L:指令碼14DB7I/O數(shù)據(jù)75R/W(STD)H/LH:讀L:寫15PSBH/LH:并行模式L:串行模式6E(SCLK)H,H/L使能16NC-空腳7DB0I/O數(shù)據(jù)017/RSTH/L復(fù)位(低電平有效)8DB1I/O數(shù)據(jù)118NC-空腳9DB2I/O數(shù)據(jù)219LEDA-背光源正極(LED+5V)10DB3I/O數(shù)據(jù)320LEDK-背光源負(fù)極(LED-OV)表10-1OCMJ4X8C模塊的引腳及對(duì)應(yīng)的說明46/1593、信息傳輸與接口時(shí)序(1)并行接口方式當(dāng)PSB腳接高電位時(shí),模塊將進(jìn)入并行傳輸模式,單片機(jī)與液晶模塊通過RS、RW、E、D7~D0完成信息傳輸。47/159并行接口方式時(shí),單片機(jī)寫數(shù)據(jù)到模塊的時(shí)序圖如圖所示。(a)單片機(jī)寫數(shù)據(jù)到模塊時(shí)序圖48/159并行接口方式時(shí),單片機(jī)從模塊中讀取數(shù)據(jù)的時(shí)序圖如圖所示。(b)單片機(jī)從模塊讀取數(shù)據(jù)時(shí)序圖49/159(2)串行接口方式當(dāng)PSB腳接低電位時(shí),模塊將進(jìn)入串行模式。串行傳輸流程首先傳輸起始字節(jié)(五個(gè)連續(xù)的“1”),起始字節(jié)也稱為同步字符串。在傳輸起始字節(jié)時(shí),傳輸計(jì)數(shù)將被重置并且串行傳輸將被同步,再跟隨的兩個(gè)位字符串分別指定傳輸方向位(RW)及寄存器選擇位(RS),最后第八的位則為“0”。在接收到同步位及RW和RS資料的起始字節(jié)后,每一個(gè)8位的指令將被分為兩個(gè)字節(jié)接收到:高4位(D7~D4)的指令資料將會(huì)被放在第一個(gè)字節(jié)的LSB部分,而低4位(D3~D0)的指令資料則被放在第二個(gè)字節(jié)的LSB部分,至于相關(guān)的另四位則都為0。50/159串行接口方式時(shí)的時(shí)序圖如圖所示。圖10-8串行接口方式的時(shí)序圖51/1594、編程指令集(1)清除顯示(指令代碼為01H)功能:將DDRAM填滿“20H”(空格),把DDRAM地址計(jì)數(shù)器調(diào)整為“00H”,重新進(jìn)入點(diǎn)設(shè)定將I/D設(shè)為“1”,光標(biāo)右移AC加1。RWRSD7D6D5D4D3D2D1D0000000000152/159(2)地址歸位(指令代碼為02H)功能:把DDRAM地址計(jì)數(shù)器調(diào)整為“00H”,光標(biāo)回原點(diǎn),該功能不影響顯示DDRAM。RWRSD7D6D5D4D3D2D1D0000000001X53/159(3)點(diǎn)設(shè)定(指令代碼為07H/04H/05H/06H)功能:設(shè)定光標(biāo)移動(dòng)方向并指定整體顯示是否移動(dòng)。I/D=1光標(biāo)右移,AC自動(dòng)加1;I/D=0光標(biāo)左移,AC自動(dòng)減1。SH=1且DDRAM為寫狀態(tài):整體顯示移動(dòng),方向由I/D決定(I/D=1左移,I/D=0右移)。SH=0或DDRAM為讀狀態(tài):整體顯示不移動(dòng)。RWRSD7D6D5D4D3D2D1D000000001I/DS54/159(4)顯示狀態(tài)開/關(guān)(指令代碼為08H/0C0H/0E0H/0F0H)功能:D=1:整體顯示ON;D=0:整體顯示OFF。C=1:光標(biāo)顯示ON;C=0:光標(biāo)顯示OFF。B=1:光標(biāo)位置反白且閃爍;B=0:光標(biāo)位置不反白閃爍。RWRSD7D6D5D4D3D2D1D00000001DCB55/159(5)光標(biāo)或顯示移位控制(指令代碼為10H/14H/18H/1CH)功能:10H/14H:光標(biāo)左/右移動(dòng),AC減/加118H/1CH:整體顯示左/右移動(dòng),光標(biāo)跟隨移動(dòng),AC值不變。RWRSD7D6D5D4D3D2D1D0000001S/CR/LXX56/159(6)功能設(shè)定(指令代碼為36H/30H/34H)功能:DL=1:8-BIT控制接口;DL=0:4-BIT控制接口。RE=1:擴(kuò)充指令集動(dòng)作;RE=0:基本指令集動(dòng)作。RWRSD7D6D5D4D3D2D1D000001DLXREXX57/159(7)設(shè)定CGRAM位址(指令代碼為40H-7FH)功能:設(shè)定CGRAM地址到地址計(jì)數(shù)器(AC),需確定擴(kuò)充指令中SR=0(卷動(dòng)地址或RAM地址選擇)。RWRSD7D6D5D4D3D2D1D00001AC5AC4AC3AC2AC1AC058/159(8)設(shè)定DDRAM位址(指令代碼為80H-9FH)功能:設(shè)定DDRAM地址到地址計(jì)數(shù)器(AC)RWRSD7D6D5D4D3D2D1D0001AC6AC5AC4AC3AC2AC1AC059/159(9)讀取忙碌狀態(tài)(BF)和地址功能:讀取忙碌狀態(tài)(BF)可以確認(rèn)內(nèi)部動(dòng)作是否完成,同時(shí)可以讀出地址計(jì)數(shù)器(AC)的值。BF=1時(shí),表示內(nèi)部忙碌中,此時(shí)不可寫入指令.BF=0才可寫入新指令。RWRSD7D6D5D4D3D2D1D010BFAC6AC5AC4AC3AC2AC1AC060/159(10)寫數(shù)據(jù)到RAM功能:寫入數(shù)據(jù)到內(nèi)部的RAM(DDRAM/CGRAM/TRAM/GDRAM),每個(gè)RAM地址都要連續(xù)寫入兩個(gè)字節(jié)的數(shù)據(jù)。RWRSD7D6D5D4D3D2D1D001D7D6D5D4D3D2D1D061/159(11)讀出RAM的值功能:從內(nèi)部RAM讀取數(shù)據(jù)(DDRAM/CGRAM/GDRAM),當(dāng)設(shè)定地址指令后,若需讀取數(shù)據(jù)時(shí),需先執(zhí)行一次空的讀數(shù)據(jù),才會(huì)讀取到正確數(shù)據(jù),第二次讀取時(shí)則不需要,除非又使用設(shè)定地址指令。RWRSD7D6D5D4D3D2D1D011D7D6D5D4D3D2D1D062/159(12)待機(jī)模式(指令代碼為01H)

功能:進(jìn)入待命模式,執(zhí)行其他命令都可終止待機(jī)模式。RWRSD7D6D5D4D3D2D1D0000000000163/159(13)卷動(dòng)地址或RAM地址選擇(指令代碼為02H/03H)功能:SR=1:允許輸入卷動(dòng)地址;SR=0:允許設(shè)定CGRAM地址(基本指令)。RWRSD7D6D5D4D3D2D1D000000000HSR64/159(14)反白選擇(指令代碼為04H-07H)功能:選擇4行中的任一行作反白顯示,并可決定反白與否。RWRSD7D6D5D4D3D2D1D000000001R1R065/159(15)睡眠模式(指令代碼為08H/0CH)功能:SL=1:脫離睡眠模式;SL=0:進(jìn)入睡眠模式。RWRSD7D6D5D4D3D2D1D00000001SLXX66/159(16)擴(kuò)充功能設(shè)定(指令代碼為20H/24H/26H/30H/34H/36H)功能:DL=1:8-BIT控制接口;DL=0:4-BIT控制接口。RE=1:擴(kuò)充指令集動(dòng)作;RE=0:基本指令集動(dòng)作。G=1:繪圖顯示ON;G=0:繪圖顯示OFF。RWRSD7D6D5D4D3D2D1D000001DLXREGL67/159(17)設(shè)定卷動(dòng)地址(指令代碼為40H~7FH)功能:SR=1:AC5~AC0為垂直卷動(dòng)地址;SR=0:AC3~AC0寫ICONRAM地址。RWRSD7D6D5D4D3D2D1D00001AC5AC4AC3AC2AC1AC068/159(18)設(shè)定繪圖RAM位址(指令代碼為80H~FFH)功能:設(shè)定GDRAM地址到地址計(jì)數(shù)器(AC)。RWRSD7D6D5D4D3D2D1D0001AC6AC5AC4AC3AC2AC1AC069/1595、顯示步驟(1)顯示數(shù)據(jù)RAM(DDRAM)顯示數(shù)據(jù)RAM提供64×2個(gè)字節(jié)的空間,最多可以控制4行16字(64個(gè)字)的中文字型顯示。當(dāng)寫入顯示數(shù)據(jù)RAM時(shí),可以分別顯示CGROM、HCGROM與CGRAM的字型。70/159ST7920A可以顯示三種字型半寬的HCGROM字型CGRAM字型中文CGROM字型。三種字型的選擇,由在DDRAM中寫入的編碼選擇,部0000H~0006H的編碼中將選擇CGRAM的自定字型02H~7FH的編碼中將選擇半寬英文數(shù)字的字型A1H以上的編碼將自動(dòng)結(jié)合下一個(gè)字節(jié),組成兩個(gè)字節(jié)的中文字型編碼:BIG5(A140H~D75FH)、GB(A1A0H~F7FFH)71/1591)顯示半寬字型:將8位二進(jìn)制數(shù)據(jù)寫入DDRAM中,范圍為02H~7FH的編碼。2)顯示CGRAM字型:將16位二進(jìn)制數(shù)據(jù)寫入DDRAM中,共有0000H,0002H,0004H,0006H四種編碼。3)顯示中文字形:將16位二進(jìn)制數(shù)據(jù)寫入DDRAM中,范圍為A140H~D75FH的編碼(BIG5),A1A0H~F7FFH的編碼(GB)。數(shù)據(jù)寫入DDRAM時(shí),連續(xù)寫入兩個(gè)字節(jié),先寫入高字節(jié)(D15~D8),再寫入低字節(jié)(D7~D0)。72/159(2)繪圖RAM(GDRAM)繪圖顯示RAM提供64×32位的存儲(chǔ)空間,最多可以控制256×64點(diǎn)的二維繪圖緩沖空間在更改繪圖RAM內(nèi)容時(shí),由擴(kuò)充指令設(shè)定繪圖GDRAM地址,先設(shè)垂直地址,再設(shè)水平地址(連續(xù)寫入兩個(gè)字節(jié)的數(shù)據(jù)到繪圖RAM),地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一。在寫入繪圖RAM期間,繪圖顯示必須關(guān)閉。73/159寫入繪圖RAM的步驟如下:關(guān)閉繪圖顯示功能;先將垂直的坐標(biāo)(Y)寫入繪圖RAM地址;再將水平的坐標(biāo)(X)寫入繪圖RAM地址;將D15~D8寫入到RAM中(寫入第一個(gè)字節(jié));將D7~D0寫入到RAM中(寫入第二個(gè)字節(jié));打開繪圖顯示功能。74/159(3)光標(biāo)/閃爍控制ST7920A提供硬件光標(biāo)及閃爍控制電路,由地址計(jì)數(shù)器(addresscounter)的值來指定DDRAM中的光標(biāo)或閃爍位置。漢字字符顯示坐標(biāo)在晶模塊中的地址80H~9FH。75/159字符顯示的RAM地址與32個(gè)字符顯示區(qū)域有著一一對(duì)應(yīng)的關(guān)系,其對(duì)應(yīng)關(guān)系如圖所示。X坐標(biāo)Line180H81H82H83H84H85H86H87HLine290H91H92H93H94H95H96H97HLine388H89H8AH8BH8CH8DH8EH8FHLine498H99H9AH9BH9CH9DH9EH9FH圖10-9字符顯示的RAM地址與32個(gè)字符顯示區(qū)域的對(duì)應(yīng)關(guān)系76/159使用OCMJ4X8C顯示模塊時(shí)應(yīng)注意以下幾點(diǎn):①欲在某一個(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫入中文字符編碼。77/159②顯示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示地址,由模塊自動(dòng)對(duì)地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。③當(dāng)字符編碼為2字節(jié)時(shí),應(yīng)先寫入高位字節(jié),再寫入低位字節(jié)。78/159④模塊在接收指令前,處理器必須先確認(rèn)模塊內(nèi)部處于非忙狀態(tài)(BF=0),方可接受新的指令。如果在送出指令前不檢查BF標(biāo)志,則在送出本指令之前必須等待前一個(gè)指令執(zhí)行完成。指令執(zhí)行時(shí)間請(qǐng)參考指令表中的指令執(zhí)行時(shí)間說明。⑤“RE”為基本指令集與擴(kuò)充指令集的選擇控制位。當(dāng)改變“RE”后,以后的指令集將維持在最后的狀態(tài),除非再次改變“RE”位,否則使用相同指令集時(shí),無需每次均重設(shè)“RE”位。79/159【例10-1】以SPI接口連接為例,說明LCD模塊的使用方法。當(dāng)液晶模塊的PSB引腳接低電平時(shí),即進(jìn)入串行接口模式。串行模式使用串行數(shù)據(jù)線SID和串行時(shí)鐘線SCLK來傳送數(shù)據(jù),即構(gòu)成2線串行模式。OCMJ4X8C還允許同時(shí)接入多個(gè)液晶顯示模塊以完成多路信息顯示功能。此時(shí),要利用片選信號(hào)CS(與RS共用引腳)構(gòu)成3線串行接口方式。當(dāng)CS接高電平時(shí),模塊可正常接收并顯示數(shù)據(jù),否則,模塊將被禁止。當(dāng)系統(tǒng)僅使用一個(gè)液晶顯示模塊時(shí),CS引腳可以接固定的高電平。80/159電路連接如圖所示。圖10-10OCMJ4X8C液晶模塊與單片機(jī)的連接電路圖81/159示例程序如下:#include"stc15.h"typedefunsignedcharBYTE; //該聲明以后就可以在程序中用BYTE代替unsignedchar了sbitBLED=P2^2; //背光控制voidspi_init(void);//SPI初始化子程序voiddelay(unsignedintus10);//延時(shí)子程序voidsendspi(BYTEspidata,BYTEread,BYTEdat);

//顯示數(shù)據(jù)發(fā)送子程序voidlcd_init_usual(void);//液晶初始化子程序voidset_position(BYTEposition);//確定光標(biāo)位置子程序voiddata_write(BYTEdata1);//顯示單個(gè)字符子程序voidchinese_series(BYTE*series);//顯示漢字字符串子程序82/159voidmain(void){ spi_init();

lcd_init_usual();BLED=0; set_position(0x82); chinese_series("單片機(jī)"); data_write('0'); data_write('1'); while(1);}83/159voidspi_init(void)//SPI初始化子程序{ AUXR1=0x08; //將SPI轉(zhuǎn)移到P4口 SPI初始化

SPCTL=0xd3;//SPI使能,主機(jī)模式,/SS無關(guān),先發(fā)高

SPSTAT=0xC0; //清傳輸完成標(biāo)志和寫沖突標(biāo)志}voiddelay(unsignedintus10)//延時(shí)子程序{ while(us10--);}84/159//顯示數(shù)據(jù)發(fā)送子程序voidsendspi(BYTEspidata,BYTEread,BYTEdat){ BYTEcmd,dat1,dat2,spi1_status=0; cmd=(0xf8|read|(dat<<1)); SPDAT=cmd; while(spi1_status==0) //等起始命令傳輸完畢

{ spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0;//寫1清SPIF標(biāo)志位

spi1_status=0; dat1=spidata&0xf0; SPDAT=dat1;85/159 while(spi1_status==0) //等高4位數(shù)據(jù)傳輸完畢

{ spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //寫1清SPIF標(biāo)志位

spi1_status=0; dat2=(spidata<<4)&0xf0; SPDAT=dat2; while(spi1_status==0) //等低4位傳輸完畢

{ spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //寫1清SPIF標(biāo)志位

}86/159voidlcd_init_usual(void)//液晶初始化子程序{ sendspi(0x30,0,0);//基本指令集

sendspi(0x01,0,0);//清顯示,地址復(fù)位

delay(2000); sendspi(0x0e,0,0);//整體顯示,開游標(biāo),關(guān)位置

sendspi(0x06,0,0);//游標(biāo)方向及移位}87/159voidset_position(BYTEposition)//確定光標(biāo)位置子程序{ sendspi(position,0,0);}voiddata_write(BYTEdata1)//顯示單個(gè)字符子程序{ sendspi(data1,0,1);}voidchinese_series(BYTE*series)//顯示漢字字符串子程序{ for(series;*series!=0;series++) data_write(*series);}88/159三、數(shù)碼管顯示驅(qū)動(dòng)和鍵盤掃描控制專用芯片在實(shí)際單片機(jī)應(yīng)用系統(tǒng)開發(fā)過程中,為了節(jié)省寶貴的I/O口線資源,提高CPU的處理效率,在鍵盤和顯示接口設(shè)計(jì)方面,常常使用專用的數(shù)碼管顯示驅(qū)動(dòng)和鍵盤掃描專用芯片(簡(jiǎn)稱鍵盤/顯示擴(kuò)展芯片)。常見的鍵盤/顯示擴(kuò)展芯片有CH451、ZLG7289A等。下面以CH451為例說明這類芯片的使用方法。89/1591、CH451簡(jiǎn)介CH451是一個(gè)整合了數(shù)碼管顯示驅(qū)動(dòng)、鍵盤掃描控制以及微處理器監(jiān)控的多功能外圍芯片。三個(gè)功能之間相互獨(dú)立,單片機(jī)可以通過操作命令分別啟用、關(guān)閉、設(shè)定CH451的任何一個(gè)功能。90/159CH451內(nèi)置RC振蕩電路,可以動(dòng)態(tài)驅(qū)動(dòng)8位數(shù)碼管或者64只LED發(fā)光管,具有BCD譯碼、閃爍、移位等功能;還可以進(jìn)行64鍵的鍵盤掃描;CH451通過可以級(jí)聯(lián)的串行接口與單片機(jī)等交換數(shù)據(jù),其串行接口是由硬件實(shí)現(xiàn)的,單片機(jī)可以頻繁地通過串行接口進(jìn)行高速操作,而不會(huì)降低CH451的工作效率。91/1592、特點(diǎn)(1)顯示驅(qū)動(dòng)內(nèi)置大電流驅(qū)動(dòng)級(jí),段電流不小于25mA,字電流不小于150mA。動(dòng)態(tài)顯示掃描控制,直接驅(qū)動(dòng)8位數(shù)碼管或者64只發(fā)光管LED??蛇x數(shù)碼管的段與數(shù)據(jù)位相對(duì)應(yīng)的不譯碼方式或者BCD譯碼方式。數(shù)碼管的字?jǐn)?shù)據(jù)左移、右移、左循環(huán)、右循環(huán)。92/159各數(shù)碼管數(shù)字獨(dú)立閃爍控制。任意段位尋址,獨(dú)立控制各個(gè)LED或者各數(shù)碼管的各個(gè)段的亮與滅。通過占空比設(shè)定提供16級(jí)亮度控制。支持段電流上限調(diào)整,可以省去所有限流電阻。掃描極限控制,支持1到8個(gè)數(shù)碼管,只為有效數(shù)碼管分配掃描時(shí)間。93/159(2)鍵盤控制內(nèi)置64鍵鍵盤控制器,基于8×8矩陣鍵盤掃描。內(nèi)置按鍵狀態(tài)輸入的下拉電阻,內(nèi)置去抖動(dòng)電路。鍵盤中斷,低電平有效輸出。提供按鍵釋放標(biāo)志位,可供查詢按鍵按下與釋放。94/159(3)其它高速的4線串行接口,支持多片級(jí)聯(lián),時(shí)鐘速度從0到10MHz。串行接口中的DIN和DCLK信號(hào)線可以與其它接口電路共用,節(jié)約引腳。完全內(nèi)置時(shí)鐘振蕩電路,不需要外接晶體或者阻容振蕩。內(nèi)置上電復(fù)位和看門狗Watch-Dog,提供高電平有效和低電平有效復(fù)位輸出。支持低功耗睡眠,節(jié)約電能,可以被按鍵喚醒或者被命令操作喚醒。支持3V~5V電源電壓。提供SOP28和DIP24S兩種無鉛封裝,兼容RoHS。95/1593、封裝提供SOP28和DIP24S兩種封裝分別如圖(a)和圖(b)所示圖10-11CH451的兩種封裝形式96/1594、引腳SOP28的引腳號(hào)DIP24S的引腳號(hào)引腳名稱類型引腳說明232VCC電源正電源端,持續(xù)電流不小于200mA915GND電源公共接地端,持續(xù)電流不小于200mA254LOAD輸入串行接口的數(shù)據(jù)加載,內(nèi)置上拉電阻265DIN輸入串行接口的數(shù)據(jù)輸入,內(nèi)置上拉電阻276DCLK輸入串行接口的數(shù)據(jù)時(shí)鐘,內(nèi)置上拉電阻同時(shí)用于看門狗的清除輸入243DOUT輸出串行接口的數(shù)據(jù)輸出和鍵盤中斷22~151、24~18SEG7~SEG0三態(tài)輸出及輸入數(shù)碼管的段驅(qū)動(dòng),高電平有效,鍵盤掃描輸入,高電平有效,內(nèi)置下拉1~87~14DIG7~DIG0輸出數(shù)碼管的字驅(qū)動(dòng),低電平有效,鍵盤掃描輸出,高電平有效1216RST輸出上電復(fù)位和看門狗復(fù)位,高電平有效13不支持RST#輸出上電復(fù)位和看門狗復(fù)位,低電平有效28不支持RST1輸入外部手工復(fù)位輸入,高電平有效,內(nèi)置下拉電阻14不支持ADJ輸入段電流上限調(diào)整,內(nèi)置強(qiáng)下拉電阻11不支持CLKO輸出內(nèi)部系統(tǒng)時(shí)鐘輸出10不支持GND電源建議接GND不支持17NC.空腳未使用,禁止連接表10-4CH451兩種封裝形式的引腳及引腳說明97/1595、功能說明(1)顯示驅(qū)動(dòng)CH451對(duì)數(shù)碼管和發(fā)光管采用動(dòng)態(tài)掃描驅(qū)動(dòng),順序?yàn)镈IG0至DIG7,當(dāng)其中一個(gè)引腳吸入電流時(shí),其它引腳則不吸入電流。98/159CH451內(nèi)部具有大電流驅(qū)動(dòng)級(jí),可以直接驅(qū)動(dòng)0.5~2in的共陰數(shù)碼管,段驅(qū)動(dòng)引腳SEG6~SEG0分別對(duì)應(yīng)數(shù)碼管的段G~段A段驅(qū)動(dòng)引腳SEG7對(duì)應(yīng)數(shù)碼管的小數(shù)點(diǎn)字驅(qū)動(dòng)引腳DIG7~DIG0分別連接8個(gè)數(shù)碼管的陰極99/159CH451也可以連接8×8矩陣的發(fā)光二級(jí)管LED陣列或者64個(gè)獨(dú)立發(fā)光管;CH451還可以通過外接反相驅(qū)動(dòng)器支持共陽數(shù)碼管,或者外接大功率管支持大尺寸的數(shù)碼管。100/159CH451支持掃描極限控制,并且只為有效數(shù)碼管分配掃描時(shí)間。當(dāng)掃描極限設(shè)定為1時(shí),唯一的數(shù)碼管DIG0將得到所有的動(dòng)態(tài)驅(qū)動(dòng)時(shí)間,從而等同于靜態(tài)驅(qū)動(dòng);當(dāng)掃描極限設(shè)定為8時(shí),8個(gè)數(shù)碼管DIG7~DIG0各得到1/8的動(dòng)態(tài)驅(qū)動(dòng)時(shí)間;當(dāng)掃描極限設(shè)定為4時(shí),4個(gè)數(shù)碼管DIG3~DIG0各得到1/4的動(dòng)態(tài)驅(qū)動(dòng)時(shí)間,此時(shí)各數(shù)碼管的平均驅(qū)動(dòng)電流將比掃描極限為8時(shí)增加一倍,所以降低掃描極限可以提高數(shù)碼管的顯示亮度。101/159CH451將分配給每個(gè)數(shù)碼管的顯示驅(qū)動(dòng)時(shí)間進(jìn)一步細(xì)分為16等份,通過設(shè)定顯示占空比支持16級(jí)亮度控制。占空比的值從1/16至16/16,占空比越大,數(shù)碼管的平均驅(qū)動(dòng)電流越大,顯示亮度也就越高,但占空比與顯示亮度之間是非線性關(guān)系。102/159CH451內(nèi)部具有8個(gè)8位的數(shù)據(jù)寄存器,用于保存8個(gè)字?jǐn)?shù)據(jù),分別對(duì)應(yīng)于CH451所驅(qū)動(dòng)的8個(gè)數(shù)碼管或者8組每組8個(gè)的發(fā)光二極管。CH451支持?jǐn)?shù)據(jù)寄存器中的字?jǐn)?shù)據(jù)左移、右移、左循環(huán)、右循環(huán),并且支持各數(shù)碼管的獨(dú)立閃爍控制,在字?jǐn)?shù)據(jù)左右移動(dòng)或者左右循環(huán)移動(dòng)的過程中,閃爍控制的屬性不會(huì)隨數(shù)據(jù)移動(dòng)。103/159CH451默認(rèn)情況下工作于不譯碼方式8個(gè)數(shù)據(jù)寄存器中字?jǐn)?shù)據(jù)的位7~位0分別對(duì)應(yīng)8個(gè)數(shù)碼管的小數(shù)點(diǎn)和段G~段A,對(duì)于發(fā)光二極管陣列,則每個(gè)字?jǐn)?shù)據(jù)的數(shù)據(jù)位唯一地對(duì)應(yīng)一個(gè)發(fā)光二級(jí)管。當(dāng)數(shù)據(jù)位為1時(shí),對(duì)應(yīng)的數(shù)碼管的段或者發(fā)光管就會(huì)點(diǎn)亮;當(dāng)數(shù)據(jù)位為0時(shí),則對(duì)應(yīng)的數(shù)碼管的段或者發(fā)光管就會(huì)熄滅。例如,第三個(gè)數(shù)據(jù)寄存器的位0為1,所以對(duì)應(yīng)的第三個(gè)數(shù)碼管的段A點(diǎn)亮。104/159通過設(shè)定,CH451可以工作于BCD譯碼方式該方式主要應(yīng)用于數(shù)碼管驅(qū)動(dòng),單片機(jī)只要給出二進(jìn)制數(shù)BCD碼,由CH451將其譯碼后直接驅(qū)動(dòng)數(shù)碼管顯示對(duì)應(yīng)的字符。BCD譯碼方式是指對(duì)數(shù)據(jù)寄存器中字?jǐn)?shù)據(jù)的位4~位0進(jìn)行BCD譯碼,控制段驅(qū)動(dòng)引腳SEG6~SEG0的輸出,對(duì)應(yīng)于數(shù)碼管的段G~段A,同時(shí)用字?jǐn)?shù)據(jù)的位7控制段驅(qū)動(dòng)引腳SEG7的輸出,對(duì)應(yīng)于數(shù)碼管的小數(shù)點(diǎn),字?jǐn)?shù)據(jù)的位6和位5不影響B(tài)CD譯碼。105/159數(shù)據(jù)寄存器中字?jǐn)?shù)據(jù)的位4~位0進(jìn)行BCD譯碼后,所對(duì)應(yīng)的段G~段A以及數(shù)碼管顯示的字符如表所示。106/159參考表,如果需要在數(shù)碼管上顯示字符0,只要置入數(shù)據(jù)0xx00000B或者00H;需要顯示字符0.(0帶小數(shù)點(diǎn)),只要置入數(shù)據(jù)1xx00000B或者80H;類似1xx01000B或者88H對(duì)應(yīng)于字符8.(8帶小數(shù)點(diǎn));數(shù)據(jù)0xx10011B或者13H對(duì)應(yīng)于字符=;數(shù)據(jù)0xx11010B或者1AH對(duì)應(yīng)于字符.(小數(shù)點(diǎn));數(shù)據(jù)0xx10000B或者10H對(duì)應(yīng)于字符(空格,數(shù)碼管沒有顯示)。107/159CH451的段驅(qū)動(dòng)引腳SEG7~SEG0的內(nèi)部電路簡(jiǎn)圖如圖所示。SEGMENT-DATASEGA與非與按鍵編碼或非非非50mA@2V25mA@3V.1mA@4V15mAADJBCD-DECODEKEYB-SCANDISPLAY-ENABLE100K用電壓控制電流VCC2×15mA圖10-12CH451的段驅(qū)動(dòng)引腳SEG7~SEG0的內(nèi)部電路簡(jiǎn)圖108/159CH451的字驅(qū)動(dòng)引腳DIG7~DIG0的內(nèi)部電路簡(jiǎn)圖如圖所示。非非非DIGKEYB-SCANDISP-SCANDISP-ENABLEINTENSITYSPARKLINGVCC5mA8×20mA圖10-13CH451的字驅(qū)動(dòng)引腳DIG7~DIG0的內(nèi)部電路簡(jiǎn)圖109/159(2)鍵盤掃描CH451的鍵盤掃描功能支持8×8矩陣的64鍵鍵盤。在鍵盤掃描期間,DIG7~DIG0引腳用于列掃描輸出SEG7~SEG0引腳都帶有內(nèi)部下拉電阻,用于行掃描輸入當(dāng)啟用鍵盤掃描功能后,DOUT引腳的功能由串行接口的數(shù)據(jù)輸出變?yōu)殒I盤中斷以及數(shù)據(jù)輸出。110/159CH451插入鍵盤掃描過程(顯示驅(qū)動(dòng)掃描過程中定期掃描鍵盤)在鍵盤掃描期間,DIG7~DIG0引腳按照DIG0至DIG7的順序依次輸出高電平,其余7個(gè)引腳輸出低電平;SEG7~SEG0引腳的輸出被禁止,當(dāng)沒有鍵被按下時(shí),SEG7~SEG0都被下拉為低電平;當(dāng)有鍵被按下時(shí),例如連接DIG3與SEG4的鍵被按下,則當(dāng)DIG3輸出高電平時(shí)SEG4檢測(cè)到高電平;111/159為了防止因?yàn)榘存I抖動(dòng)或者外界擾而產(chǎn)生誤碼,CH451實(shí)行兩次掃描,只有當(dāng)兩次鍵盤掃描的結(jié)果相同時(shí),按鍵才會(huì)被確認(rèn)有效。如果CH451檢測(cè)到有效的按鍵,則記錄下該按鍵代碼,并通過DOUT引腳產(chǎn)生低電平有效的鍵盤中斷,此時(shí)單片機(jī)可以通過串行接口讀取按鍵代碼;在沒有檢測(cè)到新的有效按鍵之前,CH451不再產(chǎn)生任何鍵盤中斷。CH451不支持組合鍵,也就是說,同一時(shí)刻,不能有兩個(gè)或者更多的鍵被按下;如果多個(gè)鍵同時(shí)按下,那么按鍵代碼較小的按鍵優(yōu)先。112/159CH451所提供的按鍵代碼為7位位2~位0是列掃描碼位5~位3是行掃描碼位6是狀態(tài)碼(鍵按下為1,鍵釋放為0)113/159例如,連接DIG3與SEG4的鍵被按下,則按鍵代碼是1100011B或者63H,鍵被釋放后,按鍵代碼通常是0100011B或者23H,其中,對(duì)應(yīng)DIG3的列掃描碼為011B,對(duì)應(yīng)SEG4的行掃描碼為100B。單片機(jī)可以在任何時(shí)候讀取按鍵代碼,但一般在CH451檢測(cè)到有效按鍵而產(chǎn)生鍵盤中斷時(shí)讀取按鍵代碼,此時(shí)按鍵代碼的位6總是1,另外,如果需要了解按鍵何時(shí)釋放,單片機(jī)可以通過查詢方式定期讀取按鍵代碼,直到按鍵代碼的位6為0。114/159連接在DIG7~DIG0與SEG7~SEG0之間的鍵被按下時(shí),CH451所提供的按鍵代碼如表所示。按鍵代碼DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG047H46H45H44H43H42H41H40HSEG14FH4EH4DH4CH4BH4AH49H48HSEG257H56H55H54H53H52H51H50HSEG35FH5EH5DH5CH5BH5AH59H58HSEG467H66H65H64H63H62H61H60HSEG56FH6EH6DH6CH6BH6AH69H68HSEG677H76H75H74H73H72H71H70HSEG77FH7EH7DH7CH7BH7AH79H78H表10-6按鍵與按鍵代碼的對(duì)應(yīng)關(guān)系115/159這些按鍵代碼具有一定的規(guī)律,如果需要鍵被釋放時(shí)的按鍵代碼,則將表中的按鍵代碼的位6置0,也就是將表中的按鍵代碼減去40H。按鍵代碼DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG047H46H45H44H43H42H41H40HSEG14FH4EH4DH4CH4BH4AH49H48HSEG257H56H55H54H53H52H51H50HSEG35FH5EH5DH5CH5BH5AH59H58HSEG467H66H65H64H63H62H61H60HSEG56FH6EH6DH6CH6BH6AH69H68HSEG677H76H75H74H73H72H71H70HSEG77FH7EH7DH7CH7BH7AH79H78H表10-6按鍵與按鍵代碼的對(duì)應(yīng)關(guān)系116/159(3)μP監(jiān)控CH451提供的μP監(jiān)控包括上電復(fù)位和看門狗Watch-Dog。單片機(jī)或者微處理器的復(fù)位輸入引腳可以根據(jù)需要直接連接到CH451的RST引腳或者RST#引腳,當(dāng)CH451通電或者看門狗溢出時(shí),RST引腳輸出高電平有效的復(fù)位脈沖信號(hào),RST#引腳輸出低電平有效的復(fù)位脈沖信號(hào)。CH451的上電復(fù)位脈沖信號(hào)同時(shí)作用于CH451芯片的內(nèi)部電路,而看門狗復(fù)位脈沖信號(hào)不會(huì)對(duì)CH451芯片的內(nèi)部電路起作用。117/159CH451的上電復(fù)位是指上電過程(從斷電狀態(tài)變?yōu)檎9╇姞顟B(tài)的過程)中產(chǎn)生的復(fù)位脈沖。為了減少CH451驅(qū)動(dòng)大電流而產(chǎn)生的電源干擾,在設(shè)計(jì)印制電路板PCB時(shí),應(yīng)在緊靠CH451芯片的正負(fù)電源之間并聯(lián)一組電源退耦電容,包括至少一個(gè)容量不小于0.1uF的獨(dú)石或者瓷片電容和一個(gè)容量不小于100uF的電解電容。118/159CH451在啟用看門狗功能后,只要清除輸入引腳DCLK的電平?jīng)]有變化,看門狗計(jì)時(shí)器就會(huì)計(jì)時(shí),當(dāng)計(jì)滿溢出周期時(shí),就會(huì)產(chǎn)生看門狗復(fù)位脈沖信號(hào)。為了避免計(jì)時(shí)溢出而產(chǎn)生復(fù)位信號(hào),單片機(jī)應(yīng)該定期變化DCLK的電平,及時(shí)清除看門狗的計(jì)時(shí)。119/159CH451的看門狗計(jì)時(shí)可以被下述的任何一個(gè)操作清除:上電復(fù)位RSTI引腳的手工復(fù)位DCLK從低變?yōu)楦逥CLK從高變?yōu)榈偷葐⒂每撮T狗功能后,當(dāng)單片機(jī)程序失控而使DCLK的電平長(zhǎng)時(shí)間保持不變時(shí),CH451就會(huì)輸出看門狗復(fù)位脈沖信號(hào)。120/159(4)串行接口CH451具有硬件實(shí)現(xiàn)的高速4線串行接口,包括4個(gè)信號(hào)線:串行數(shù)據(jù)輸入線DIN串行數(shù)據(jù)時(shí)鐘線DCLK串行數(shù)據(jù)加載線LOAD串行數(shù)據(jù)輸出線DOUTDIN、DCLK、LOAD是帶上拉的輸入信號(hào)線,默認(rèn)是高電平;DOUT在未啟用鍵盤掃描功能時(shí)作為串行數(shù)據(jù)輸出線,在啟用鍵盤掃描功能后作為鍵盤中斷和數(shù)據(jù)輸出線,默認(rèn)是高電平。121/159CH451的串行接口框圖如圖所示。DCLKDOUTLOADCK非DINDCK寄存器QDCK寄存器QDCK寄存器QDCK寄存器QDCK寄存器QD10D11D9D0命令譯碼D11-D0Q01S選擇器KEYB-DATAKEYB-INTERKEYB-ENABLE圖10-14CH451的串行接口框圖122/159單片機(jī)向CH451輸出串行數(shù)據(jù)的過程是(不是唯一的過程,可以有很多變化):輸出一位數(shù)據(jù),即向DIN輸出最低位數(shù)據(jù)D0,并向DCLK輸出低電平脈沖(從高電平變?yōu)榈碗娖皆倩謴?fù)為高電平),其中包括一個(gè)上升沿使CH451輸入位數(shù)據(jù);以同樣的方式,輸出位數(shù)據(jù)D1~D11;向LOAD輸出低電平脈沖,其中包括一個(gè)上升沿使CH451加載串行數(shù)據(jù)。123/159未啟用鍵盤掃描功能時(shí),單片機(jī)通過串行接口向CH451發(fā)送12位數(shù)據(jù)的波形示意圖如圖所示。LOADDOUTB0B1B3B2B4B5B6B7B1B8B10B11B0B2B3B4B5B6B7B9B10B9B8DINDCLK100000000100圖10-15未啟用鍵盤掃描功能時(shí)CH451發(fā)送12位數(shù)據(jù)的波形示意圖124/159單片機(jī)從CH451獲得按鍵代碼的過程如圖所示。MCU是指單片機(jī)的工作狀態(tài)。DINLOADDCLKDOUTMCU中斷讀取按鍵代碼命令輸入按鍵代碼B8B9B10B111110K6K5K4K3K2K1K0HHLLLHHL圖10-16單片機(jī)從CH451獲得按鍵代碼的過程125/159具體過程是:①輸出一位數(shù)據(jù),即向DIN輸出讀取按鍵代碼命令的最低位數(shù)據(jù)D0,并向DCLK輸出低電平脈沖;②以同樣的方式,輸出讀取按鍵代碼命令的位數(shù)據(jù)D1~D11;126/159③向LOAD輸出低電平脈沖,其中包括一個(gè)上升沿使CH451加載串行數(shù)據(jù),CH451分析出是讀取按鍵代碼命令,立即在DOUT輸出按鍵代碼的最高位數(shù)據(jù)K6;④讀取一位數(shù)據(jù),即從DOUT輸入按鍵代碼的最高位數(shù)據(jù)K6,并向DCLK輸出低電平脈沖;⑤以同樣的方式,輸入按鍵代碼的位數(shù)據(jù)K5~K0。127/159實(shí)際上,CH451的讀取按鍵代碼命令只有位數(shù)據(jù)D8~D11是有效的,所以單片機(jī)不必發(fā)出讀取按鍵代碼命令的D0~D7。例如,按鍵代碼是63H,則上述過程的簡(jiǎn)化描述是1^1^1^0^↑H^H^L^L^L^H^H^,即先向CH451發(fā)出讀取按鍵代碼命令0111xxxxxxxxB,然后從DOUT接收按鍵代碼1100011B。128/159(5)操作命令CH451的操作命令均為12位,CH451的各個(gè)操作命令所對(duì)應(yīng)的12位串行數(shù)據(jù)如表所示。表10-7CH451的各個(gè)操作命令所對(duì)應(yīng)的12位串行數(shù)據(jù)129/1591)空操作:0000xxxxxxxxB空操作命令不對(duì)CH451產(chǎn)生任何影響。該命令可以在多個(gè)CH451級(jí)聯(lián)的應(yīng)用中,透過前級(jí)CH451向后級(jí)CH451發(fā)送操作命令而不影響前級(jí)的狀態(tài)。130/159例如,要將操作命令001000000001B發(fā)送給兩級(jí)級(jí)聯(lián)電路中的后級(jí)CH451(后級(jí)CH451的DIN連接前級(jí)CH451的DOUT),只要在該命令后添加空操作命令000000000000B再發(fā)送,簡(jiǎn)化描述是1^0^0^0^0^0^0^0^0^1^0^0^0^0^0^0^0^0^0^0^0^0^0^0^↑,那么,該操作命令將經(jīng)過前級(jí)CH451到達(dá)后級(jí)CH451,而空操作命令留給了前級(jí)CH451。另外,為了在不影響CH451的前提下變化DCLK以清除看門狗計(jì)時(shí),也可以發(fā)送空操作命令,在非級(jí)聯(lián)的應(yīng)用中,空操作命令可以只發(fā)送有效數(shù)據(jù)D8~D11,簡(jiǎn)化描述是0^0^0^0^↑。131/1592)段位尋址清0:000110[BIT_ADDR]B段位尋址清0命令用于將指定地址的發(fā)光管(或者數(shù)碼管的指定段或者小數(shù)點(diǎn))熄滅,該命令一次只能熄滅指定地址的一個(gè)發(fā)光管,并且完全不影響其它發(fā)光管的狀態(tài)。132/159段位尋址的編址順序(矩陣編址表)如表所示。例如,命令數(shù)據(jù)000110111010B表示將編址為3AH的發(fā)光管熄滅。矩陣編址DIG7DIG6DIG5DIG4DIG3DIG2DIG1DIG0SEG038H30H28H20H18H10H08H00HSEG139H31H29H21H19H11H09H01HSEG23AH32H2AH22H1AH12H0AH02HSEG33BH33H2BH23H1BH13H0BH03HSEG43CH34H2CH24H1CH14H0CH04HSEG53DH35H2DH25H1DH15H0DH05HSEG63EH36H2EH26H1EH16H0EH06HSEG73FH37H2FH27H1FH17H0FH07H表10-8矩陣編址表133/1593)段位尋址置1:000111[BIT_ADDR]B段位尋址置1命令用于將指定地址的發(fā)光管(或者數(shù)碼管的指定段或者小數(shù)點(diǎn))點(diǎn)亮,該命令一次只能點(diǎn)亮指定地址的一個(gè)發(fā)光管,并且完全不影響其它發(fā)光管的狀態(tài)。段位尋址的編址順序請(qǐng)參考矩陣編址表。例如,命令數(shù)000111000110B表示將編址為06H的發(fā)光管點(diǎn)亮。134/1594)芯片內(nèi)部復(fù)位:001000000001B內(nèi)部復(fù)位命令將CH451的各個(gè)寄存器和各種參數(shù)復(fù)位到默認(rèn)的狀態(tài)。芯片上電時(shí),CH451總是被復(fù)位,此時(shí)各個(gè)寄存器均復(fù)位為0,各種參數(shù)均恢復(fù)為默認(rèn)值。135/1595)進(jìn)入睡眠狀態(tài):001000000010B進(jìn)入睡眠狀態(tài)命令使CH451暫停顯示驅(qū)動(dòng)和鍵盤掃描,并進(jìn)入低功耗睡眠狀態(tài),從而可以節(jié)約電能。執(zhí)行該命令之前,應(yīng)該先用設(shè)定系統(tǒng)參數(shù)命令關(guān)閉CH451的顯示驅(qū)動(dòng)使能和按鍵掃描使能,并且執(zhí)行該命令本身必須在20uS之內(nèi)完成,發(fā)出命令后DCLK引腳必須保持不變。136/159處于低功耗睡眠狀態(tài)中的CH451可以被下述兩種事件中的任何一種喚醒,第一種事件是檢測(cè)到SEG3~SEG0上的按鍵,有效按鍵代碼是40H到5FH;第二種事件是接收到單片機(jī)發(fā)出的操作命令(通常是空操作命令),或者檢測(cè)到DCLK引腳的狀態(tài)變化。睡眠和喚醒操作本身不會(huì)影CH451的工作狀態(tài)。137/1596)字?jǐn)?shù)據(jù)左移:001100000000B字?jǐn)?shù)據(jù)左移命令將CH451的字?jǐn)?shù)據(jù)左移一次,即從DIG0向DIG7移動(dòng)一位,然后最右邊的DIG0補(bǔ)進(jìn)數(shù)據(jù)00H。例如,在數(shù)碼管DIG7~DIG0顯示“87654321”時(shí),執(zhí)行字?jǐn)?shù)據(jù)左移命令,顯示變?yōu)椤?654321”(不譯碼方式)或者“76543210”(BCD譯碼方式)。138/1597)字?jǐn)?shù)據(jù)右移:001100000010B字?jǐn)?shù)據(jù)右移命令將CH451的字?jǐn)?shù)據(jù)右移一次,即從DIG7向DIG0移動(dòng)一位,然后最左邊的DIG7補(bǔ)進(jìn)數(shù)據(jù)00H。例如,在數(shù)碼管DIG7~DIG0顯示“87654321”時(shí),執(zhí)行字?jǐn)?shù)據(jù)右移命令,顯示變?yōu)椤?765432”(不譯碼方式)或者“08765432”(BCD譯碼方式)。139/1598)字?jǐn)?shù)據(jù)左循環(huán):001100000001B字?jǐn)?shù)據(jù)左循環(huán)命令將CH451的字?jǐn)?shù)據(jù)左循環(huán)一次,即從DIG0向DIG7移動(dòng)一位,然后最右邊的DIG0補(bǔ)進(jìn)原DIG7的數(shù)據(jù)。例如,在數(shù)碼管DIG7~DIG0顯示“87654321”時(shí),執(zhí)行字?jǐn)?shù)據(jù)左循環(huán)命令,顯示變?yōu)椤?6543218”。140/1599)字?jǐn)?shù)據(jù)右循環(huán):001100000011B字?jǐn)?shù)據(jù)右循環(huán)命令將CH451的字?jǐn)?shù)據(jù)右循環(huán)一次,即從DIG7向DIG0移動(dòng)一位,然后最左邊的DIG7補(bǔ)進(jìn)原DIG0的數(shù)據(jù)。例如,在數(shù)碼管DIG7~DIG0顯示“87654321”時(shí),執(zhí)行字?jǐn)?shù)據(jù)右循環(huán)命令,顯示變?yōu)椤?8765432”。141/15910)自定義BCD碼:00111[SELF_BCD]B自定義BCD碼命令用于自行定義常規(guī)BCD譯碼中未實(shí)現(xiàn)的特殊字符,CH451支持一個(gè)自定義BCD碼,其BCD值為1EH,顯示編碼由該命令指定,編碼共7位,分別對(duì)應(yīng)于數(shù)碼管的7個(gè)段,而小數(shù)點(diǎn)由BCD值的最高位單獨(dú)控制。142/159例如,命令數(shù)據(jù)001110111110B表示自定義BCD字符U(對(duì)應(yīng)的段顯示數(shù)據(jù)為3EH)在BCD譯碼方式下當(dāng)單片機(jī)要求顯示BCD值1EH時(shí),CH451會(huì)在對(duì)應(yīng)的數(shù)碼管中顯示字符U當(dāng)單片機(jī)要求顯示BCD值9EH時(shí),CH451會(huì)在對(duì)應(yīng)的數(shù)碼管中顯示字符U.(含小數(shù)點(diǎn))。143/15911)設(shè)定系統(tǒng)參數(shù):0100000[CKHF]0[WDOG][KEYB][DISP]B設(shè)定系統(tǒng)參數(shù)命令用于設(shè)定CH451的系統(tǒng)級(jí)參數(shù):輸出高頻時(shí)鐘CKHF(選擇快速閃爍),看門狗使能WDOG,鍵盤掃描使能KEYB,顯示驅(qū)動(dòng)使能DISP。各個(gè)參數(shù)均通過1位數(shù)據(jù)控制,將相應(yīng)的數(shù)據(jù)位置為1則啟用該功能,否則關(guān)閉該功能(默認(rèn)值)。例如,命令數(shù)據(jù)010000000011B表示選擇低頻時(shí)鐘、關(guān)閉看門狗的功能、啟用鍵盤掃描的功能、啟用顯示掃描驅(qū)動(dòng)的功能。144/15912)設(shè)定顯示參數(shù):0101[MODE][LIMIT][INTENSITY]B設(shè)定顯示參數(shù)命令用于設(shè)定CH451的顯示參數(shù):譯碼方式MODE,掃描極限LIMIT,顯示亮度INTENSITY。145/159譯碼方式MODE通過1位數(shù)據(jù)控制,置1時(shí)選擇BCD譯碼方式,置0時(shí)選擇不譯碼方式(默認(rèn)值)。掃描極限LIMIT通過3位數(shù)據(jù)控制,數(shù)據(jù)001B~111B和000B分別設(shè)定掃描極限為1~7和8(默認(rèn)值)。顯示亮度INTENSITY通過4位數(shù)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論