版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
18.1鍵盤接口8.1.1鍵盤的工作原理8.1.2鍵盤的接口電路8.1.3鍵盤的工作方式8.2LED數(shù)碼管顯示器接口8.2.1LED數(shù)碼管的結(jié)構(gòu)8.2.2LED數(shù)碼管的工作原理8.3鍵盤與LED數(shù)碼管顯示器接口綜合設(shè)計(jì)實(shí)例8.3.1利用并行I/O芯片82C55實(shí)現(xiàn)的鍵盤/顯示器接口8.3.2利用單片機(jī)串行口實(shí)現(xiàn)的鍵盤/顯示器接口8.3.3基于專用芯片HD7279A實(shí)現(xiàn)的鍵盤/顯示器接口28.4LCD1602液晶顯示器接口8.4.1LCD1602液晶顯示模塊介紹8.4.2單片機(jī)控制LCD1602顯示舉例38.1鍵盤接口鍵盤是單片機(jī)應(yīng)用系統(tǒng)中最基本的輸入設(shè)備,通過鍵盤輸入數(shù)據(jù)或命令,是人工干預(yù)單片機(jī)的主要手段。按其結(jié)構(gòu)形式可分為編碼鍵盤和非編碼鍵盤。編碼鍵盤采用硬件方法完成鍵盤識(shí)別功能,每按下一個(gè)鍵,鍵盤通過其編碼電路自動(dòng)產(chǎn)生一個(gè)編碼信息,即鍵碼。這種鍵盤使用方便,但硬件較復(fù)雜,計(jì)算機(jī)所用鍵盤即為編碼鍵盤。非編碼鍵盤是由軟件完成鍵盤識(shí)別功能的,它利用一套專用鍵盤編碼程序來識(shí)別按鍵的位置,并轉(zhuǎn)換成相應(yīng)的編碼信息,形成鍵碼。這種鍵盤硬件簡(jiǎn)單,廣泛用于各種單片機(jī)應(yīng)用系統(tǒng)中。下面介紹主要非編碼鍵盤的工作原理及其工作方式。48.1.1鍵盤的工作原理1.按鍵的特性鍵盤實(shí)質(zhì)上是一組按鍵開關(guān)的集合,在單片機(jī)系統(tǒng)中最常用的鍵盤是機(jī)械式按鍵鍵盤。如圖8-1(a)所示,按鍵開關(guān)的兩端分別連接行線和列線,通過鍵盤開關(guān)機(jī)械觸點(diǎn)的斷開、閉合,行線電壓信號(hào)的輸出波形如圖8-1(b)所示。
按鍵在閉合或斷開瞬間,觸點(diǎn)由于機(jī)械彈性作用會(huì)出現(xiàn)抖動(dòng)現(xiàn)象,然后才能穩(wěn)定。52.按鍵的確認(rèn)如果按鍵斷開,行線呈現(xiàn)高電平,反之,按鍵閉合時(shí),行線呈現(xiàn)低電平。所以通過對(duì)行線電平的檢測(cè),便可確認(rèn)按鍵按下與否。為了確保單片機(jī)對(duì)一次按鍵動(dòng)作只確認(rèn)一次有效,必須消除抖動(dòng)期t1和t3的影響。3.按鍵去抖抖動(dòng)現(xiàn)象會(huì)引起CPU對(duì)一次鍵盤操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤,因而必須設(shè)法消除抖動(dòng)。通過去抖動(dòng)處理,可以得到按鍵閉合與斷開的穩(wěn)定狀態(tài)??梢酝ㄟ^硬件或軟件的方法消除按鍵抖動(dòng)。硬件方法是加去抖動(dòng)電路,如可通過RS觸發(fā)器實(shí)現(xiàn)硬件去抖動(dòng);軟件方法消除按鍵抖動(dòng)的基本思想是:在第一次檢測(cè)到有鍵按下時(shí),該鍵所對(duì)應(yīng)的行線為低電平,執(zhí)行一段延時(shí)10ms的子程序后,確認(rèn)該行線電平是否仍為低電平,如果仍為低電平,則確認(rèn)該行確實(shí)有鍵按下。當(dāng)按鍵松開時(shí),行線的低電平變?yōu)楦唠娖?,?zhí)行一段延時(shí)10ms的子程序后,檢測(cè)該行線為高電平,說明按鍵確實(shí)已松開。通常多采用軟件方法。68.1.2鍵盤的接口電路常用的鍵盤接口有兩種:一種是獨(dú)立式鍵盤接口,另一種是矩陣式鍵盤接口。1.獨(dú)立式鍵盤接口獨(dú)立式鍵盤就是每個(gè)按鍵各接一根I/O輸入線,所有按鍵有一個(gè)公共地或公共正端,通過檢測(cè)I/O輸入線的電平狀態(tài),可以很容易地判斷哪個(gè)按鍵被按下,各個(gè)按鍵之間是相互獨(dú)立,互不影響的。當(dāng)按鍵數(shù)目較多時(shí),獨(dú)立式鍵盤接口電路需要的輸入口線較多,故該種鍵盤電路僅適用于按鍵數(shù)目較少的應(yīng)用系統(tǒng)。下面從實(shí)際應(yīng)用的角度介紹幾種獨(dú)立式鍵盤的接口。7
圖8-2(a)所示為查詢方式的獨(dú)立式鍵盤接口電路,按鍵直接與單片機(jī)的I/O口線相連,通過讀I/O口,判斷I/O口線的電平狀態(tài),即可識(shí)別出按下的鍵。圖8-2(b)所示為中斷方式的獨(dú)立式鍵盤接口電路,只有在鍵盤有按鍵按下時(shí),才進(jìn)行處理,所以實(shí)時(shí)性強(qiáng),效率高。當(dāng)鍵盤中有按鍵按下時(shí),8輸入與非門74LS30的輸出經(jīng)過74LS04反相后向單片機(jī)的中斷請(qǐng)求輸入引腳發(fā)出低電平的中斷請(qǐng)求信號(hào),單片機(jī)響應(yīng)中斷后,在中斷服務(wù)程序中,對(duì)按下的鍵進(jìn)行識(shí)別。8圖8-2獨(dú)立式鍵盤接口電路9【例8-1】對(duì)于圖8-2(a)所示的獨(dú)立式鍵盤,采用查詢方式讀取鍵值,并根據(jù)不同鍵值,進(jìn)行相應(yīng)的鍵處理。C51參考程序如下:#include<reg51.h>voidmain(){unsignedcharkeyvalue;do{P1=0xff; keyvalue=P1;//從P1口讀入鍵盤狀態(tài) keyvalue=~keyvalue;//鍵盤狀態(tài)取反
10switch(keyvalue) { case1:……;break;//處理K1鍵case2:……;break;//處理K2鍵 case4:……;break;//處理K3鍵 case8:……;break;//處理K4鍵 case16:……;break;//處理K5鍵
case32:……;break;//處理K6鍵case64:……;break;//處理K7鍵case128:……;break;//處理K8鍵default://無按下鍵處理 break; }}while(1);}11【例8-2】對(duì)于圖8-2(b)所示的獨(dú)立式鍵盤,編寫中斷方式的鍵盤處理程序。C51參考程序如下:#include<reg51.h>bitkeyflag;//keyflag為有鍵按下的標(biāo)志位unsignedcharkeyvalue;//keyvalue為鍵值voiddelay(unsignedintn);//軟件延時(shí)nms函數(shù)voidmain(void){IE=0x81;//中斷允許設(shè)置IP=0x01; //中斷優(yōu)先級(jí)設(shè)置keyflag=0;do{if(keyflag)//如果標(biāo)志keyflag=1,則有鍵按下12{ keyvalue=~keyvalue;//鍵值取反 switch(keyvalue)//根據(jù)按下鍵的鍵值進(jìn)行分支跳轉(zhuǎn){ case1:......;//處理K1鍵break;case2:......;//處理K2鍵break; case4:......;//處理K3鍵break;case8:......;//處理K4鍵break; case16:......;//處理K5鍵break;13case32:......;//處理K6鍵break; case64:......;//處理K7鍵break; case128:......;//處理K8鍵break;default://無按下鍵處理 break; }keyflag=0;//清除按鍵按下標(biāo)志}}while(1);}voidint0()interrupt0//有鍵按下,進(jìn)入中斷函數(shù){unsignedcharrekey;IE=0x80;//屏蔽中斷keyflag=0;//設(shè)置鍵按下標(biāo)志位P1=0xff;//P1口鎖存器置1keyvalue=P1;//從P1口讀入鍵盤狀態(tài)delay(10);//延時(shí)10ms去抖rekey=P1;//再次讀取P1口狀態(tài)
if(keyvalue==rekey){keyflag=1;//有鍵按下,設(shè)置標(biāo)志位為1} IE=0x81;//中斷允許}voiddelay(unsignedintn)//延時(shí)nms函數(shù){ unsignedinti,j; for(i=0;i<n;i++) for(j=0;j<125;j++);}
程序中用到了外部中斷。當(dāng)沒有鍵按下時(shí),標(biāo)志keyflag=0,程序一直執(zhí)行“do{}while()”循環(huán)。當(dāng)有鍵按下時(shí),則74LS04的輸出端產(chǎn)生低電平,向單片機(jī)的腳發(fā)出中斷請(qǐng)求信號(hào),單片機(jī)響應(yīng)中斷,執(zhí)行中斷函數(shù),在中斷函數(shù)中把keyflag置1,并得到鍵值。當(dāng)執(zhí)行完中斷函數(shù)后,再進(jìn)入“do{}while()”循環(huán),此時(shí)由于“if(keyflag)”中的keyflag=1,則可根據(jù)鍵值keyvalue,執(zhí)行“switch(keyvalue)”分支語句,進(jìn)行按下鍵的處理。此外,還可以采用擴(kuò)展的I/O口作為獨(dú)立式按鍵接口電路,圖8-3所示為采用82C55擴(kuò)展的獨(dú)立式鍵盤接口。
在上述幾種獨(dú)立式鍵盤電路中,各按鍵均采用了上拉電阻,這是為了保證在按鍵斷開時(shí),各I/O口有確定的高電平,當(dāng)然如果輸入口線內(nèi)部已有上拉電阻,則外電路的上拉電阻可省去。獨(dú)立式按鍵的識(shí)別和編程都比較簡(jiǎn)單,只需把與按鍵相連的I/O口線的狀態(tài)讀入到單片機(jī)內(nèi),如為高電平,則按鍵沒有按下;如為低電平,先延時(shí)10ms去抖,再讀該I/O口線的狀態(tài),若仍為低電平,則認(rèn)為確實(shí)有鍵按下。圖8-382C55擴(kuò)展的獨(dú)立式鍵盤接口
在上述幾種獨(dú)立式鍵盤電路中,各按鍵均采用了上拉電阻,這是為了保證在按鍵斷開時(shí),各I/O口有確定的高電平,當(dāng)然如果輸入口線內(nèi)部已有上拉電阻,則外電路的上拉電阻可省去。獨(dú)立式按鍵的識(shí)別和編程都比較簡(jiǎn)單,只需把與按鍵相連的I/O口線的狀態(tài)讀入到單片機(jī)內(nèi),如為高電平,則按鍵沒有按下;如為低電平,先延時(shí)10ms去抖,再讀該I/O口線的狀態(tài),若仍為低電平,則認(rèn)為確實(shí)有鍵按下。圖8-4矩陣鍵盤結(jié)構(gòu)(1)矩陣式鍵盤工作原理按鍵設(shè)在行、列線交點(diǎn)上。行線通過上拉電阻接到+5V上。無按鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有按鍵按下時(shí),行線電平狀態(tài)將由與此行線相連的列線的電平?jīng)Q定。列線的電平如果為低,則行線電平為低;列線的電平如果為高,則行線的電平也為高,這一點(diǎn)是識(shí)別行列式鍵盤按鍵是否按下的關(guān)鍵所在。由于行列式鍵盤中行、列線為多鍵共用,各按鍵均影響該鍵所在行和列的電平,因此各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號(hào)配合起來并做適當(dāng)?shù)奶幚?,才能確定閉合鍵的位置。(2)按鍵的識(shí)別方法掃描法是常用的按鍵識(shí)別方法??煞謨刹竭M(jìn)行:第一步,識(shí)別鍵盤有無鍵按下;第二步,如有鍵被按下,識(shí)別出具體的按鍵。
下面以圖8-4(b)所示的鍵7被按下為例,說明掃描法識(shí)別此鍵的過程。第一步,識(shí)別鍵盤有無鍵按下。首先把所有的列線均置為低電平,然后檢查各行線電平是否都為高電平,如果不全為高電平,則說明有鍵被按下,否則說明無鍵被按下。當(dāng)鍵7按下時(shí),第二行線電平為低電平,但還不能確定是鍵7被按下,因?yàn)槿绻恍械逆I4、5或6之一被按下,行線也會(huì)呈現(xiàn)低電平。所以,通過這一步只能得出第二行有鍵被按下的結(jié)論。
第二步,識(shí)別出哪個(gè)按鍵被按下。采用掃描法,在某一時(shí)刻只將一條列線置為低電平,其余所有列線均被置為高電平。當(dāng)?shù)谝涣袨榈碗娖?,其余各列為高電平時(shí),因?yàn)槭擎I7被按下,所以這時(shí)第二行的行線處于高電平狀態(tài);而當(dāng)?shù)诙袨榈碗娖?,其余各列為高電平時(shí),同樣發(fā)現(xiàn)第二行的行線仍處于高電平狀態(tài);直到將第四列置為低電平,其余各列為高電平,此時(shí)第二行的行線電平變?yōu)榈碗娖?,由此可判定第二行第四列交叉點(diǎn)處的按鍵,即7號(hào)鍵被按下。綜上所述,掃描法的思想是:先把某一列置為低電平,其余各列置為高電平,檢查各行線電平的變化,如果某行線電平為低,可確定此行此列交叉點(diǎn)處的按鍵被按下。
下面來看一個(gè)采用Proteus虛擬仿真的矩陣式鍵盤的實(shí)際案例?!纠?-3】如圖8-5所示的4×4矩陣鍵盤,其行線與列線與單片機(jī)的P1.7~P1.0連接,圖中4個(gè)發(fā)光二極管用來顯示矩陣鍵盤的鍵號(hào),其顯示由單片機(jī)的P0.3~P0.0控制,當(dāng)鍵盤上的某一鍵按下時(shí),發(fā)光二極管顯示對(duì)應(yīng)的鍵號(hào)。例如,1號(hào)鍵按下時(shí),通過發(fā)光二極管的亮滅顯示“0001”;E鍵按下時(shí),發(fā)光二極管顯示“1110”。圖8-5發(fā)光二極管顯示4×4矩陣鍵盤鍵號(hào)的原理電路C51參考程序如下:include<reg51.h>#defineucharunsignedcharuchartemp,key;voiddelay(unsignedintn);//軟件延時(shí)nms函數(shù),見例8-2voidmain(void){while(1){ P1=0x0f; temp=P1;//所有的列線均置為低電平 if(temp!=0x0f)//判斷是否有鍵按下? { delay(10);//延時(shí)10ms去抖
if(temp!=0x0f)//如果確實(shí)有鍵按下,下面將識(shí)別按下鍵 { P1=0xef;//列掃描碼0xef將最右一列置為低 temp=P1;//讀鍵值 temp=temp&0x0f;if(temp!=0x0f)//判斷最右一列是否有鍵按下? { temp=P1;//讀鍵值switch(temp)//判斷鍵值{ case0xee:key=0;break; case0xed:key=4;break; case0xeb:key=8;break;case0xe7:key=12;break; } while(temp!=0x0f)//按鍵釋放確認(rèn){ temp=P1; temp=temp&0x0f;} } P1=0xdf;//列掃描碼0xdf,將右起第二列置為低 temp=P1; temp=temp&0x0f;if(temp!=0x0f)//判斷右起第二列是否有鍵按下?{ temp=P1;//讀鍵值 switch(temp)//判斷鍵值
{case0xde:key=1;break;case0xdd:key=5;break; case0xdb:key=9;break; case0xd7:key=13;break;} while(temp!=0x0f)//按鍵釋放確認(rèn){ temp=P1; temp=temp&0x0f;} } P1=0xbf;//列掃描碼0xbf,將右起第三列置為低temp=P1;//讀鍵值
temp=temp&0x0f;//判斷鍵值if(temp!=0x0f)//判斷右起第三列是否有鍵按下?{ temp=P1; switch(temp) { case0xbe:key=2;break; case0xbd:key=6;break; case0xbb:key=10 ;break; case0xb7:key=14;break; }
while(temp!=0x0f)//按鍵釋放確認(rèn){ temp=P1; temp=temp&0x0f;} } P1=0x7f;//列掃描碼0x7f,將右起第四列置為低temp=P1;temp=temp&0x0f;if(temp!=0x0f)//判斷右起第四列是否有鍵按下?{ temp=P1;//讀鍵值 switch(temp)//判斷鍵值 { case0x7e:key=3;break; case0x7d:key=7;break; case0x7b:key=11;break; case0x77:key=15;break; }
while(temp!=0x0f)//按鍵釋放確認(rèn){ temp=P1; temp=temp&0x0f;} } } P0=~key;//鍵值送發(fā)光二極管顯示}}}8.1.3鍵盤的工作方式單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)在忙于其他各項(xiàng)工作任務(wù)時(shí),如何兼顧鍵盤的輸入,這取決于鍵盤的工作方式。鍵盤工作方式的選取應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中單片機(jī)工作的忙、閑情況而定。其原則是,既要保證及時(shí)響應(yīng)按鍵操作,又不要過多占用單片機(jī)的工作時(shí)間。通常,鍵盤工作方式有三種,即編程掃描、定時(shí)掃描和中斷掃描。
1.編程掃描方式編程掃描方式只有當(dāng)單片機(jī)空閑時(shí),才調(diào)用鍵盤掃描子程序,反復(fù)掃描鍵盤,等待用戶從鍵盤上輸入命令或數(shù)據(jù),來響應(yīng)鍵盤的輸入請(qǐng)求。編程掃描方式的工作過程如下:(1)在鍵盤掃描子程序中,首先判斷整個(gè)鍵盤上有無鍵按下;(2)延時(shí)10ms來消除按鍵抖動(dòng)的影響。如確實(shí)有鍵按下,進(jìn)行下一步;
(3)識(shí)別按下鍵的鍵號(hào);(4)等待按鍵釋放后,再進(jìn)行按鍵功能的處理操作;
2.定時(shí)掃描方式單片機(jī)對(duì)鍵盤的掃描也可采用定時(shí)掃描方式,即每隔一定的時(shí)間對(duì)鍵盤掃描一次。在這種掃描方式中,通常利用單片機(jī)內(nèi)部定時(shí)器,產(chǎn)生10ms的定時(shí)中斷,單片機(jī)響應(yīng)定時(shí)器溢出中斷請(qǐng)求,對(duì)鍵盤進(jìn)行掃描,在有鍵按下時(shí)識(shí)別出該鍵,并執(zhí)行相應(yīng)鍵的處理程序。
3.中斷掃描方式為進(jìn)一步提高單片機(jī)掃描鍵盤的工作效率,可采用中斷掃描方式,即只有在鍵盤有鍵按下時(shí),才向單片機(jī)發(fā)出中斷請(qǐng)求,執(zhí)行鍵盤掃描程序并執(zhí)行該按鍵功能程序,如果無鍵按下,單片機(jī)將不理睬鍵盤。
至此,可將鍵盤所做的工作分為三個(gè)層次。(1)單片機(jī)如何來監(jiān)視鍵盤的輸入。體現(xiàn)在鍵盤的工作方式上就是:①編程掃描;②定時(shí)掃描;③中斷掃描。(2)確定具體按鍵的鍵號(hào)。體現(xiàn)在按鍵的識(shí)別方法上就是常用的掃描法。(3)執(zhí)行鍵處理程序,實(shí)現(xiàn)按鍵的功能。8.2LED數(shù)碼管顯示器接口LED數(shù)碼管在單片機(jī)系統(tǒng)中應(yīng)用非常普遍。LED(LightEmittingDiode)是發(fā)光二極管的縮寫。LED數(shù)碼管是由發(fā)光二極管構(gòu)成的字段組成的顯示器,所以被稱為“LED”顯示器。8.2.1LED數(shù)碼管的結(jié)構(gòu)常用的LED數(shù)碼管為8段(或7段,8段比7段多了一個(gè)小數(shù)點(diǎn)“dp”段)。每一個(gè)段對(duì)應(yīng)一個(gè)發(fā)光二極管,因此,LED數(shù)碼管實(shí)際上是由七個(gè)發(fā)光二極管組成“8”字形構(gòu)成的,加上小數(shù)點(diǎn)就是八個(gè)發(fā)光二極管,這些段分別由字母a,b,c,d,e,f,g,dp來表示。這種顯示器又有共陽極和共陰極之分,如圖8-6所示。共陽極LED顯示器內(nèi)部的發(fā)光二極管的陽極是連接在一起的,即為公共陽極,通常公共陽極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。同樣,共陰極LED顯示器內(nèi)部的發(fā)光二極管的陰極是連接在一起的,即為公共陰極,通常公共陰極接地,當(dāng)某個(gè)發(fā)光二極管的陽極接高電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。(a)共陽極(b)共陰極(c)外形及引腳
圖8-68段LED數(shù)碼管結(jié)構(gòu)及外形
為使LED數(shù)碼管顯示不同的字型,就需要把相應(yīng)段的發(fā)光二極管點(diǎn)亮。比如,要在圖8-6(c)所示的LED數(shù)碼管顯示器上顯示一個(gè)數(shù)字“2”,那么應(yīng)當(dāng)點(diǎn)亮a、b、g、e、d段,而c、f、dp段不亮。為此,就要為LED數(shù)碼管顯示器提供字型碼,因?yàn)樽中痛a可使LED相應(yīng)的段發(fā)光,從而顯示不同的字型,因此,這種字型碼也稱為段碼。7段發(fā)光二極管,再加上一個(gè)小數(shù)點(diǎn)位,共計(jì)8段。因此提供給LED數(shù)碼管的段碼正好是一個(gè)字節(jié)。各段與字節(jié)中各位對(duì)應(yīng)關(guān)系如表8-1所示。
表8-1段碼與字節(jié)中各位對(duì)應(yīng)關(guān)系
按照上述格式,8段LED的段碼如表8-2所示。
表8-28段LED段碼
表8-2只列出了部分段碼,讀者可以根據(jù)實(shí)際情況選用,也可重新定義。另外,段碼是相對(duì)的,它由各字段在字節(jié)中所處的位決定。例如表8-2中8段LED段碼是按圖8-7(a)所示格式而形成的,“0”的段碼為3FH(共陰極)。反之,如將格式改為圖8-6(b)所示格式,則“0”的段碼為7EH(共陰極)。圖8-7段碼格式
字型及段碼由設(shè)計(jì)者自行設(shè)定,在使用中,一般習(xí)慣上還是以“a”段對(duì)應(yīng)段碼字節(jié)的最低位。8.2.2LED數(shù)碼管的工作原理圖8-8所示為由N個(gè)LED顯示塊構(gòu)成的顯示N位字符的LED顯示器的結(jié)構(gòu)原理圖。N個(gè)LED顯示塊有N位位選線和8×N位段碼線。段碼線控制顯示字符的字型,而位選線為各個(gè)LED顯示塊的公共端,用來選擇所需的LED顯示塊,控制該LED顯示位的亮或暗。LED數(shù)碼管顯示器有靜態(tài)顯示和動(dòng)態(tài)顯示兩種顯示方式。圖8-8N位LED數(shù)碼管顯示器的結(jié)構(gòu)原理圖
1.LED靜態(tài)顯示方式LED數(shù)碼管工作于靜態(tài)顯示方式時(shí),各位LED的共陰極(或共陽極)連接在一起并接地(或接+5V);每位的段碼線(a~dp)分別與一個(gè)8位的并行輸出口相連。之所以稱為靜態(tài)顯示,是因?yàn)楦鱾€(gè)LED的顯示字符一經(jīng)確定,相圖8-8N位LED數(shù)碼管顯示器的結(jié)構(gòu)原理圖應(yīng)并行輸出口的段碼輸出將維持不變,直到送入另一個(gè)段碼為止,所以顯示的亮度高。
圖8-9所示為一個(gè)4位LED靜態(tài)顯示器電路,各位可獨(dú)立顯示,只要在某位的段碼線上保持段碼電平,該位就能保持相應(yīng)的顯示字符。由于各位LED的段碼線分別由一個(gè)8位的并行輸出口控制,故在同一時(shí)刻,每一位LED顯示的字符可以各不相同。靜態(tài)顯示方式中單片機(jī)CPU為顯示器服務(wù)的時(shí)間短且軟件編程簡(jiǎn)單,但硬件開銷大,接口電路復(fù)雜。如圖8-9所示,4個(gè)LED塊構(gòu)成的4位靜態(tài)顯示器電路,要占用四個(gè)8位I/O口,如果顯示器的位數(shù)增多,則需要增加I/O口的數(shù)目。因此在顯示位數(shù)較多的情況下,一般不建議采用靜態(tài)顯示方式。圖8-94位LED靜態(tài)顯示電路
【例8-4】單片機(jī)控制2只數(shù)碼管,靜態(tài)顯示2個(gè)數(shù)字“28”。本例的原理電路如圖8-10所示。單片機(jī)利用P1口與P2口分別控制兩個(gè)數(shù)碼管DS0與DS1的段碼,而共陽極數(shù)碼管DS0與DS1的公共端直接接至+5V,因此數(shù)碼管DS0與DS1始終處于導(dǎo)通狀態(tài)。利用P1口與P2口具有的鎖存功能,只需向單片機(jī)的P1口與P2口分別寫入相應(yīng)的顯示字符“2”和“8”的段碼即可。由于一個(gè)數(shù)碼管就占用了一個(gè)I/O端口,如果數(shù)碼管數(shù)目增多,則需要增加I/O端口,但是軟件編程簡(jiǎn)單。圖8-102位數(shù)碼管靜態(tài)顯示原理電路與仿真C51參考程序如下:#include<reg51.h>voidmain(){P1=0xa4;//將數(shù)字“2”的段碼(共陽極)送P1口P2=0x80;//將數(shù)字“8”的段碼(共陽極)送P2口while(1);}2.LED動(dòng)態(tài)顯示方式LED數(shù)碼管工作于動(dòng)態(tài)顯示方式時(shí),所有顯示位的段碼線的相應(yīng)段并接在一起,由一個(gè)8位I/O口控制,形成段碼線的多路復(fù)用,而各位的公共端分別由相應(yīng)的I/O線控制,形成各位的分時(shí)選通。
LED不同位顯示的時(shí)間間隔應(yīng)根據(jù)實(shí)際情況而定。發(fā)光二極管從導(dǎo)通到發(fā)光有一定的延時(shí),導(dǎo)通時(shí)間太短,則發(fā)光太弱,人眼無法看清;但也不能太長,否則,就達(dá)不到“多位同時(shí)顯示”的效果,而且此時(shí)間越長,占用單片機(jī)CPU的時(shí)間就越多。另外,當(dāng)顯示位數(shù)增多時(shí),將占用大量的單片機(jī)CPU時(shí)間,因此動(dòng)態(tài)顯示實(shí)質(zhì)上是以犧牲單片機(jī)CPU時(shí)間來換取I/O端口的減少。
圖8-11所示為一個(gè)4位8段LED動(dòng)態(tài)顯示電路,其中段碼線占用一個(gè)8位I/O口,而位選線占用一個(gè)4位I/O口。由于各位的段碼線并聯(lián),8位I/O口輸出的段碼對(duì)各位LED來說都是相同的。因此,在同一時(shí)刻,如果各位位選線都處于選通狀態(tài),4位LED將顯示相同的字符。若要各位LED能夠同時(shí)顯示出不同的字符,就必須采用動(dòng)態(tài)顯示方式,即在某一時(shí)刻,只讓某一位的位選線處于選通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài),同時(shí),段碼線上輸出相應(yīng)位要顯示的字符的段碼。這樣,在同一時(shí)刻,4位LED中只有選通的那一位顯示出字符,而其它三位則是熄滅的。同樣,在下一時(shí)刻,只讓下一位的位選線處于選通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài),在段碼線上輸出將要顯示字符的段碼,此時(shí),只有選通位顯示出相應(yīng)的字符,而其它各位則是熄滅的。如此循環(huán)下去,就可以使各位顯示出將要顯示的字符。
由此可見,在同一時(shí)刻,只有一位顯示,其它各位熄滅,即各位的顯示字符是在不同時(shí)刻出現(xiàn)的,但由于LED顯示器的余輝和人眼的“視覺暫留”效應(yīng),只要每位顯示時(shí)間足夠短,就可以造成“多位同時(shí)亮”的假象,達(dá)到同時(shí)顯示的效果。圖8-114位LED動(dòng)態(tài)顯示電路
【例8-5】單片機(jī)控制8只數(shù)碼管,分別滾動(dòng)顯示單個(gè)數(shù)字1~8。程序運(yùn)行后,單片機(jī)控制左邊第一個(gè)數(shù)碼管顯示1,其他不顯示,延時(shí)之后,控制左邊第2個(gè)數(shù)碼管顯示2,其他不顯示,直至第8個(gè)數(shù)碼管顯示8,其他不顯示,反復(fù)循環(huán)上述過程。本例原理電路與仿真如圖8-12所示。圖8-128位數(shù)碼管動(dòng)態(tài)顯示原理電路與仿真
圖8-12所示的動(dòng)態(tài)顯示電路,由P0口通過兩片74HC573分時(shí)送出段碼和位控碼,兩片74HC573的輸出鎖存由P2口的高兩位口線控制。由于是虛擬仿真,即時(shí)掃描速度加快,數(shù)碼管的余輝也不能像實(shí)際電路那樣體現(xiàn)出來。如果對(duì)實(shí)際的硬件顯示電路進(jìn)行快速掃描,由于數(shù)碼管的余輝和人眼的“視覺暫留”作用,只要控制好每位數(shù)碼管顯示的時(shí)間和間隔,則可造成“多位同時(shí)亮”的假象,達(dá)到同時(shí)顯示的效果。#include<reg51.h>#defineucharunsignedchar sbitseg=P2^6;//段選信號(hào)的鎖存器控制sbitbitn=P2^7;//位選信號(hào)的鎖存器控制C51參考程序如下:ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//數(shù)碼管各位的位控碼ucharcodeduan[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};//共陰極數(shù)碼管的段碼表,1~8voiddelay(unsignedintn)//延時(shí)nms函數(shù){ unsignedinti,j; for(i=0;i<n;i++) for(j=0;j<125;j++);}voidmain(){ucharnum;
while(1){ for(num=0;num<8;num++) { bitn=1; P0=wei[num];//從P0口送出位控碼 bitn=0; seg=1; P0=duan[num];//從P0口送出段碼 seg=0; delay(10); } } }
8.3鍵盤與LED數(shù)碼管顯示器接口綜合設(shè)計(jì)實(shí)例在單片機(jī)應(yīng)用系統(tǒng)中,一般都是把鍵盤和顯示器放在一起考慮。下面介紹幾種實(shí)用的鍵盤/顯示器接口的設(shè)計(jì)方案。8.3.1利用并行I/O芯片82C55實(shí)現(xiàn)的鍵盤/顯示器接口【例8-6】圖8-13是單片機(jī)外擴(kuò)并行I/O芯片82C55實(shí)現(xiàn)的16個(gè)按鍵和8位LED鍵盤/顯示器接口電路。82C55的PA口為輸出口,作為8位共陰極LED數(shù)碼管的位選口,PB口作為顯示段碼的輸出口,PC0~PC3口作為鍵盤的行線狀態(tài)輸入口,PC4~PC7口作為鍵盤的列線掃描輸出口。82C55的PA、PB、PC口及控制口的地址分別為:7FFCH、7FFDH、7FFEH及7FFFH。圖中7407為同相驅(qū)動(dòng)器。圖8-13用并行接口芯片82C55實(shí)現(xiàn)的鍵盤/顯示器接口1.動(dòng)態(tài)顯示程序設(shè)計(jì)C51參考程序如下:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#definePAportXBYTE[0x7ffc]//82C55的PB口地址0x7ffc#definePBportXBYTE[0x7ffd]//82C55的PB口地址0x7ffd#definePCportXBYTE[0x7ffe]//82C55的PB口地址0x7ffe#definecmdportXBYTE[0x7fff]//82C55的控制字寄存器端口地址0x7fffucharidatadis_buf[8]={1,2,3,4,5,6,7,8};//顯示緩沖區(qū),用戶可也根據(jù)顯示需要自行賦值ucharidatadis_buf[8]={1,2,3,4,5,6,7,8};//顯示緩沖區(qū),用戶可也根據(jù)顯示需要自行賦值ucharcodedistable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰極數(shù)碼管段碼表,0,1,2,3,4,5,6,7,8,9A,b,C,d,E,Fvoiddelay(unsignedintn);//延時(shí)nms函數(shù),見例8-2voiddisplay(void){ucharsegcode,bitcode,i; bitcode=0xfe; for(i=0;i<=7;i++){ PAport=bitcode;//位選碼從PA口輸出,點(diǎn)亮某一位segcode=dis_buf[i]; PBport=distable[segcode];//段碼從PB口輸出 delay(5); //延時(shí) bitcode=(bitcode<<1)|0x01; //位選碼左移一位 } }2.鍵盤掃描程序設(shè)計(jì)鍵盤采用編程掃描工作方式,鍵盤程序功能有以下4方面。(1)判別鍵盤上有無鍵按下,其方法為列掃描線PC4~PC7輸出全0,讀PC0~PC3的狀態(tài),若PC0~PC3全為1,則鍵盤上沒有按下鍵,若PC0~PC3不全為1,則有鍵按下。(2)在判別出鍵盤上有鍵按下后,延時(shí)一段時(shí)間去除鍵的機(jī)械抖動(dòng),再次判別鍵盤的狀態(tài),若仍有鍵按下,則認(rèn)為鍵盤上有鍵處于穩(wěn)定的閉合期,否則認(rèn)為是鍵的抖動(dòng)。(3)識(shí)別按下鍵的鍵號(hào),對(duì)鍵盤的列線進(jìn)行逐列掃描,掃描線PC4~PC7依次輸出編碼“1110”、“1101”、“1011”、“0111”,只有一列為低電平,其余各列為高電平。依次讀PC0~PC3的狀態(tài),若PC0~PC3全為1,則列線為0的這一列沒有鍵按下。按下鍵的鍵號(hào)等于行線為低電平的行號(hào)乘以4再加上低電平的列號(hào)。例如PC4~PC7輸出為1011時(shí),讀到PC0~PC3為1101,則第1行第2列(最上一行看作第0行,最左一列看作第0列)相交處的鍵處于按下狀態(tài),因此,按下鍵的鍵號(hào)N為N=1*4+2=6
(4)為了對(duì)鍵的一次按下僅做一次處理,采用的方法是判別到按下鍵釋放后再做鍵功能處理。C51參考程序如下:ucharkeynumber;//定義鍵號(hào)為全局變量ucharcheckkey(void)//檢測(cè)有無鍵按下函數(shù),有鍵按下返回0xff,無鍵按下返回0{ uchari; PCport=0x0f;//列線PC4~PC7輸出全0 i=PCport;//讀入行線PC0~PC3的狀態(tài) i=i&0x0f;//屏蔽PC口的高4位 if(i==0x0f)return(0);//無鍵按下返回0 elsereturn(0xff);}ucharkeyscan(void)//鍵盤掃描函數(shù),如有鍵按下,識(shí)別按下鍵的鍵號(hào){ucharscancode,k,i,j; if(checkkey()!=0) //檢測(cè)是否有鍵按下,無鍵按下返回{ delay(10);//延時(shí)去抖if(checkkey()!=0)//再次檢測(cè)是否有鍵按下,無鍵按下返回{scancode=0xef;//列掃描碼,從左邊第一列開始掃描 for(i=0;i<4;i++){ k=0x01; PCport=scancode;//送列掃描碼
for(j=0;j<4;j++){ if((PCport&k)==0) //檢測(cè)當(dāng)前行是否有鍵按下? { keynumber=j*4+i;//當(dāng)前行有鍵按下,求鍵號(hào) while(checkkey()!=0)//按鍵釋放確認(rèn) return1;//返回 }elsek=k<<1;} scancode=(scancode<<1)|0x01;//列掃描碼左移一位,掃描下一列} } } }8.3.2利用單片機(jī)串行口實(shí)現(xiàn)的鍵盤/顯示器接口當(dāng)單片機(jī)的串行口未作它用時(shí),可用其來外擴(kuò)鍵盤/顯示器。應(yīng)用單片機(jī)的串行口方式0,外擴(kuò)移位寄存器74LS164來構(gòu)成鍵盤/顯示器接口,這是在實(shí)際應(yīng)用系統(tǒng)中,經(jīng)常采用的一種方案,其硬件接口電路如圖8-14所示。圖8-14用串行口擴(kuò)展的鍵盤/顯示器接口
【例8-7】如圖8-14所示的用串行口擴(kuò)展的鍵盤/顯示器接口:74LS164(0)~74LS164(7)作為8個(gè)LED顯示器的段碼輸出口,74LS164(8)作為鍵盤的列線掃描輸出口,單片機(jī)的P3.4、P3.5作為兩行鍵的行狀態(tài)輸入線,P3.3作為TXD引腳同步移位脈沖輸出控制線,P3.3=0時(shí),與門輸出為0,禁止同步移位脈沖輸出。這種靜態(tài)顯示方式的優(yōu)點(diǎn)是亮度大,與動(dòng)態(tài)掃描相比較,CPU不必頻繁地掃描顯示器,提高了工作效率,因而軟件設(shè)計(jì)比較簡(jiǎn)單。下面給出程序清單,該程序中LED0顯示按下鍵的鍵號(hào),LED1~LED7依次顯示數(shù)字1~7。C51參考程序如下:#include<reg51.h>#defineucharunsignedcharsbitP3_3=P3^3;sbitP3_4=P3^4;sbitP3_5=P3^5;ucharcodedistable[17]={0xc0,0xf9,0xa4,0xb0,0x99,//共陽極段碼表,0,1,2,3,40x92,0x82,0xf8,0x80,//5,6,7,80x90,0x88,0x83,0xc6,//9,A,b,C0xa1,0x86,0x8e,0xff};//d,E,F,滅ucharkeyval; voiddelay(unsignedintn);//軟件延時(shí)nms函數(shù),見例8-2voiddisplay(uchara); voidkeyscan(void) ; voidmain(void){uchari;SCON=0;//串行口初始化為方式0keyval=16; //LED0上電初始化為“滅”while(1){for(i=7;i>=1;i--)//LED1~LED7依次顯示1,2,3,4,5,6,7,{ display(i);//調(diào)用顯示子程序}
display(keyval);//LED0顯示按下鍵的鍵號(hào)keyscan();//調(diào)用鍵盤掃描子程序}}/***************************顯示子程序**************************/voiddisplay(uchara){P3_3=1; //允許TXD引腳同步移位脈沖輸出SBUF=distable[a]; //distable[]是定義的數(shù)碼管段碼表while(!TI);TI=0; }/*************************鍵盤掃描子程序************************/voidkeyscan(void){uchartemp,i;P3_3=0;//關(guān)閉顯示器輸出do{ temp=0;SBUF=temp;//74LS164(8)輸出00H,所有列線均置為0while(!TI);//串行輸出完否?TI=0;//串行輸出完畢,清TI}while(P3_4!=0&P3_5!=0);//是否有按鍵按下?delay(10);//延時(shí)10去抖if(P3_4==0|P3_5==0)//判斷是否由抖動(dòng)引起?{//不是抖動(dòng)引起temp=0x7f;//判別是哪個(gè)鍵按下,0x7f為最左一列輸出低for(i=0;i<=7;i++)//掃描8列{SBUF=temp; while(!TI); TI=0; if(P3_4==0)//第一行有鍵閉合否?{ keyval=i;//得到鍵號(hào) while(!P3_4);//按鍵釋放確認(rèn)break;//識(shí)別出按下鍵,退出循環(huán) }if(P3_5==0)//第二行有鍵閉合否?{ keyval=i+8; //得到鍵號(hào) while(!P3_5);//按鍵釋放確認(rèn) break;//識(shí)別出按下鍵,退出循環(huán) } temp=(temp>>1)|0x80;//列掃描碼右移,準(zhǔn)備掃描下一列} }}8.3.3基于專用芯片HD7279A實(shí)現(xiàn)的鍵盤/顯示器接口專用可編程鍵盤/顯示器接口芯片具有自動(dòng)消除鍵抖動(dòng)并識(shí)別按鍵代碼的功能,單片機(jī)通過專用接口芯片控制鍵盤/顯示器時(shí),在軟件上可省去鍵盤去抖動(dòng)程序以及鍵盤/顯示器動(dòng)態(tài)掃描程序,只需對(duì)鍵盤/顯示器接口芯片中的各個(gè)控制寄存器進(jìn)行正確的設(shè)置即可,從而可以提高CPU工作的效率。
1.各種專用鍵盤/顯示器接口芯片簡(jiǎn)介早期常用的專用鍵盤/顯示器接口芯片是Intel公司于20世紀(jì)80年代推出的并行接口芯片8279,但8279的驅(qū)動(dòng)電流較小,需加驅(qū)動(dòng)電路;另外,8279采用并行方式與單片機(jī)通信,占用口線多,使得單片機(jī)系統(tǒng)的硬件開銷大,故8279在今天已逐漸退出市場(chǎng)。目前流行的鍵盤/顯示器接口芯片與單片機(jī)的接口多采用串行連接方式,占用口線少。常見的鍵盤/顯示器接口芯片有:ZLG7289A和ZLG7290B(周立功公司)、CH451(南京沁恒公司)、MAX7219、BC7281和HD7279等。
(1)ZLG7290B。ZLG7290B是廣州周立功單片機(jī)發(fā)展有限公司自行設(shè)計(jì)的數(shù)碼管顯示驅(qū)動(dòng)及鍵盤掃描管理芯片。能夠直接驅(qū)動(dòng)8位共陰式數(shù)碼管(或64只獨(dú)立的LED),同時(shí)還可以掃描管理多達(dá)64只按鍵,其中有8只按鍵還可以作為功能鍵使用。另外ZLG7290B內(nèi)部還設(shè)置有連擊計(jì)數(shù)器,能夠使某鍵按下后不松手而連續(xù)有效。ZLG7290B采用I2C串行總線方式,與微控制器的接口只需兩根信號(hào)線;該芯片為工業(yè)級(jí)芯片,抗干擾能力強(qiáng),在工業(yè)測(cè)控中已有大量應(yīng)用。(2)CH451。可動(dòng)態(tài)驅(qū)動(dòng)8位LED數(shù)碼管顯示,具有BCD碼譯碼、閃爍、移位等功能。內(nèi)置大電流驅(qū)動(dòng)級(jí),段電流不小于30mA,位電流不小于160mA。內(nèi)置64(8×8)鍵鍵盤控制器,可對(duì)8×8矩陣鍵盤自動(dòng)掃描,且有去抖動(dòng)電路,并提供鍵盤中斷和按鍵釋放標(biāo)志位,可供查詢按鍵按下與釋放狀態(tài)。片內(nèi)內(nèi)置上電復(fù)位和看門狗定時(shí)器。芯片性價(jià)比較高,是目前使用較為廣泛的專用的鍵盤/顯示器接口芯片之一。但抗干擾能力不是很強(qiáng),不支持組合鍵識(shí)別。
(3)MAX7219。MAXIM(美信)公司的產(chǎn)品。該芯片采用串行SPI接口,僅是單純驅(qū)動(dòng)共陰極LED數(shù)碼管,沒有鍵盤管理功能,功能較為單一。(4)BC7281。可驅(qū)動(dòng)8位或16位數(shù)碼管顯示或64/128只獨(dú)立LED,具有64鍵鍵盤接口,內(nèi)建去抖功能,可實(shí)現(xiàn)閃爍、段點(diǎn)亮、段熄滅等功能。BC7281的驅(qū)動(dòng)輸出極性及輸出時(shí)序均為軟件可控,從而可以和各種外部電路配合,適用于任何尺寸的數(shù)碼管。BC7281通過外接移位寄存器最多可驅(qū)動(dòng)16位LED數(shù)碼管,但所需外圍電路較多,占PCB空間較大,且在驅(qū)動(dòng)16位LED數(shù)碼管時(shí),由于采用動(dòng)態(tài)掃描方式工作,電流噪聲過大。(5)HD7279。HD7279是一片具有串行接口的,可同時(shí)驅(qū)動(dòng)8位共陰極數(shù)碼管(或64只獨(dú)立LED)的智能顯示驅(qū)動(dòng)芯片,該芯片同時(shí)還可連接64鍵的鍵盤矩陣,單片即可完成LED顯示、鍵盤接口的全部功能。且價(jià)格低廉,因此在鍵盤/顯示器接口的設(shè)計(jì)中得到了廣泛應(yīng)用。2.專用鍵盤/顯示器接口芯片HD7279A簡(jiǎn)介HD7279A能同時(shí)驅(qū)動(dòng)8個(gè)共陰極LED數(shù)碼管(或64個(gè)獨(dú)立的LED發(fā)光二極管)和64(88)鍵的編碼鍵盤矩陣。控制LED數(shù)碼管采用動(dòng)態(tài)掃描的循環(huán)顯示方式。該芯片具有如下特性:串行接口,內(nèi)部含有驅(qū)動(dòng)器,無需外圍元件即可直接驅(qū)動(dòng)LED;內(nèi)部含有譯碼器,可直接接受BCD碼或16進(jìn)制碼,并同時(shí)具有2種譯碼方式;多種控制指令,如消隱、閃爍、左移、右移、段尋址;各位獨(dú)立控制譯碼/不譯碼及消隱和閃爍屬性;64鍵鍵盤控制器,能夠自動(dòng)消除鍵抖動(dòng)并識(shí)別按鍵鍵值。有DIP和SOIC兩種封裝形式供選擇
(1)引腳說明與電氣特性下面以DIP(雙列直插式)封裝為例,介紹HD7279A芯片的外部引腳。HD7279A芯片有28個(gè)引腳,。其引腳如圖8-15所示,引腳說明如表8-3所示。圖8-15HD7279A的引腳
DIG0~DIG7為位驅(qū)動(dòng)輸出端,分別連接8個(gè)LED數(shù)碼管的共陰極;SA~SG為段驅(qū)動(dòng)輸出端,分別與LED數(shù)碼管的a~g段相連。DP為小數(shù)點(diǎn)的驅(qū)動(dòng)輸出端。DIG0~DIG7和SA~SG同時(shí)還分別是64鍵鍵盤的列線和行線端口,完成對(duì)鍵盤的譯碼和鍵碼識(shí)別。在8×8陣列中每個(gè)鍵的鍵碼是用十六進(jìn)制表示的,可用讀鍵盤數(shù)據(jù)指令讀出,鍵碼范圍是00H~3FH。HD7279A芯片與單片機(jī)接口僅需4條接口線:、DATA、CLK和。其中為片選信號(hào)(低電平有效)。當(dāng)單片機(jī)訪問HD7279A(讀鍵號(hào)或?qū)懼噶睿r(shí),應(yīng)將置為低電平。DATA為串行數(shù)據(jù)端,當(dāng)單片機(jī)向HD7279A發(fā)送數(shù)據(jù)時(shí),DATA為輸入端;當(dāng)HD7279A向單片機(jī)輸出鍵碼時(shí),DATA為輸出端。CLK為數(shù)據(jù)串行傳送的同步時(shí)鐘輸入端,時(shí)鐘的上升沿表示數(shù)據(jù)有效。
為按鍵信號(hào)輸出端,在無鍵按下時(shí)為高電平;而有鍵按下時(shí)此引腳變?yōu)榈碗娖讲⑶乙恢北3值芥I釋放為止。RC引腳用于外接振蕩元件,其典型值為R=1.5kΩ,C=15pF。為復(fù)位端。該端由低電平變成高電平并保持18~25ms即復(fù)位結(jié)束。通常,該端接+5V即可。HD7279A的電氣特性如表8-4所示。(2)控制指令HD7279A的控制指令包括6條不帶數(shù)據(jù)的純指令、7條帶數(shù)據(jù)指令和1條讀鍵盤指令。①純指令(6條)復(fù)位指令。指令代碼為A4H,其功能為清除所有顯示,包括字符消隱屬性和閃爍屬性。測(cè)試指令。指令代碼為BFH,其功能為將所有的LED點(diǎn)亮并閃爍,可用于自檢。左移指令。指令代碼為A1H,其功能為將所有的顯示左移1位,移位后,最右位空(無顯示),不改變消隱和閃爍屬性。右移指令。指令代碼為A0H,其功能與左移指令相似,只是方向相反。循環(huán)左移指令。指令代碼為A3H,其功能為將所有的顯示循環(huán)左移1位。移位后,最左位內(nèi)容移至最右位,不改變消隱和閃爍屬性。循環(huán)右移指令。指令代碼為A2H,其功能與循環(huán)左移指令相似,只是方向相反。
②帶數(shù)據(jù)指令(7條)帶數(shù)據(jù)指令均由雙字節(jié)組成,第1字節(jié)為指令標(biāo)志碼,第2字節(jié)為顯示內(nèi)容。按方式0譯碼下載指令
。該指令格式如下。
該指令由2個(gè)字節(jié)組成。第1字節(jié)為指令,其中a2、a1、a0為顯示位地址,表示顯示數(shù)據(jù)應(yīng)送給8位數(shù)碼管中的哪一位,當(dāng)a2a1a0=000表示最低位數(shù)碼管,a2a1a0=111表示最高位數(shù)碼管。第2字節(jié)為顯示內(nèi)容,其中dp為小數(shù)點(diǎn)控制位,dp=1時(shí),小數(shù)點(diǎn)顯示;dp=0時(shí),小數(shù)點(diǎn)熄滅。d3、d2、d1、d0為顯示數(shù)據(jù),收到此指令時(shí),HD7279A按表8-5所示的規(guī)則進(jìn)行譯碼和顯示。指令中的×××為無用位。
例如,如果指令第1字節(jié)為80H,第2字節(jié)為06H,則最低位數(shù)碼管顯示6,小數(shù)點(diǎn)dp熄滅;如果指令第1字節(jié)為87H,第2字節(jié)為8CH,則最高位數(shù)碼管顯示H,小數(shù)點(diǎn)dp點(diǎn)亮。按方式1譯碼下載指令。該指令格式如下。
此指令與上一條指令基本相同,所不同的是譯碼方式,該指令按表8-6所示的規(guī)則進(jìn)行譯碼和顯示。不譯碼下載指令。該指令格式如下。
其中,a2、a1、a0仍為顯示位地址,a~g和dp為顯示數(shù)據(jù),分別對(duì)應(yīng)7段LED數(shù)碼管的各段。當(dāng)相應(yīng)的數(shù)據(jù)位為1時(shí),該段點(diǎn)亮,為0時(shí),該段不點(diǎn)亮。該指令可在指定位上顯示字符。例如,若指令第1字節(jié)為96H,第2字節(jié)為3EH,則在L7位(最低位看作第1位)LED數(shù)碼管上顯示字符U,小數(shù)點(diǎn)dp熄滅。閃爍控制指令。該指令格式如下。
該指令控制各個(gè)數(shù)碼管的閃爍屬性。d1~d8分別對(duì)應(yīng)L1~L8位數(shù)碼管,該位為1,數(shù)碼管不閃爍;該位為0,數(shù)碼管閃爍。默認(rèn)狀態(tài)為所有數(shù)碼管均不閃爍。消隱控制指令。該指令格式如下。
該指令控制各個(gè)數(shù)碼管的消隱屬性。d1~d8分別對(duì)應(yīng)L1~L8位數(shù)碼管,該位為1,數(shù)碼管顯示;該位為0,數(shù)碼管消隱。當(dāng)某一位被賦予了消隱屬性后,HD7279A在掃描時(shí)將跳過該位,因此在這種情況下無論對(duì)該位寫入何值,均不會(huì)被顯示,但寫入的值將被保留,在將該位重新設(shè)為顯示狀態(tài)后,最后一次寫入的數(shù)據(jù)將被顯示出來。當(dāng)無需用到全部8個(gè)數(shù)碼管顯示的時(shí)候,將不用的位設(shè)為消隱屬性,可以提高顯示的亮度。注意:至少應(yīng)有一位保持顯示狀態(tài),如果消隱控制指令中d1~d8全部為0,該指令將不被接受,HD7279A保持原來的消隱狀態(tài)不變。段點(diǎn)亮指令
。該指令格式如下。
該指令為段尋址指令,作用為點(diǎn)亮數(shù)碼管中某一指定的段,或LED矩陣中某一指定的LED。d5~d0為段地址,范圍從00H~3FH,具體分配為:第1個(gè)數(shù)碼管的g段地址為00H,f段為01H,.…..,a段為06H,小數(shù)點(diǎn)dp為07H,第2個(gè)數(shù)碼管的g段地址為08H,f段為09H,.…..,以此類推直至第8個(gè)數(shù)碼管的小數(shù)點(diǎn)dp地址為3FH。例如,指令第1字節(jié)為E0H,第2字節(jié)為00H,則點(diǎn)亮L1位LED數(shù)碼管的g段;如果第2字節(jié)為11H,則點(diǎn)亮L3位LED數(shù)碼管的f段。段關(guān)閉指令
。該指令格式如下。
該指令的作用是關(guān)閉某個(gè)數(shù)碼管中的某一段。d5~d0為段地址,范圍從00H~3FH,具體分配與上述的段點(diǎn)亮指令相同,僅將點(diǎn)亮段變?yōu)殛P(guān)閉段。例如,指令第1字節(jié)為C0H,第2字節(jié)為00H,則關(guān)閉L1位LED數(shù)碼管的g段;如果第2字節(jié)為11H,則關(guān)閉L3位LED數(shù)碼管的f段。③讀鍵盤指令。該指令的作用是從HD7279A讀出當(dāng)前按下鍵的鍵值,格式如下。
與其他指令不同,此指令的第1個(gè)字節(jié)15H為單片機(jī)傳送到HD7279A的指令,而第2個(gè)字節(jié)d7~d0則為HD7279A返回的按鍵值,其范圍是00H~3FH(無鍵按下時(shí)為FFH)。當(dāng)HD7279A檢測(cè)到有效按鍵時(shí),引腳從高電平變?yōu)榈碗娖?,并一直保持到按鍵釋放為止。在此期間,如果HD7279A接收到來自單片機(jī)的讀鍵盤指令15H,則HD7279A向單片機(jī)發(fā)出當(dāng)前按下鍵的鍵值。3.單片機(jī)與HD7279A的接口設(shè)計(jì)(1)接口電路圖8-16所示為80C51單片機(jī)通過HD7279A控制8個(gè)數(shù)碼管和64鍵矩陣鍵盤的接口電路。外接振蕩元件為典型值,晶振頻率為12MHz。上電后,HD7279A大約經(jīng)過15~18ms的時(shí)間才進(jìn)入工作狀態(tài)。單片機(jī)判斷鍵盤矩陣中是否有按鍵按下,是通過腳電平來判斷的。使用中斷方式時(shí),可將腳接至單片機(jī)的外部中斷輸入端,并設(shè)置成跳沿觸發(fā)。HD7279A控制顯示器時(shí),應(yīng)連接共陰極顯示器。對(duì)于不使用的按鍵和顯示器,可以不連接。省去的顯示器或?qū)︼@示器設(shè)置的消隱、閃爍屬性,均不影響鍵盤的使用。除非不用顯示器,否則串聯(lián)在DP及SA~SG引線上的200電阻不可省去。
如果不使用鍵盤,圖10-16所示的與鍵盤連接的10k電阻和100k電阻便可省去。如果使用鍵盤,電路中的100k下拉電阻則不可省去。HD7279A采用動(dòng)態(tài)循環(huán)掃描方式,如果采用普通的LED數(shù)碼管亮度不夠,則可采用高亮度或超高亮度型號(hào)的LED數(shù)碼管。圖8-16單片機(jī)與HD7279A的接口電路(2)程序設(shè)計(jì)C51參考程序如下。#include<reg51.h>//***函數(shù)定義***voidlong_delay(void); //長延時(shí)voidshort_delay(void); //短暫延時(shí)voiddelay10ms(unsignedchar); //延時(shí)10MSvoidwrite7279(unsignedchar,unsignedchar); //寫入到HD7279unsignedcharread7279(unsignedchar); //從HD7279讀出voidsend_byte(unsignedchar); //發(fā)送一個(gè)字節(jié)unsignedcharreceive_byte(void); //接收一個(gè)字節(jié)//***變量及I/O口定義***unsignedchardigit[5];unsignedcharkey_number,j,k;unsignedinttmr;unsignedlongwait_cnter;sbitcs=P1^0; //csatP1.4sbitclk=P1^1; //clk連接于P1.5sbitdat=P1^2; //dat連接于P1.2sbitkey=P1^3; //key連接于P1.3//******HD7279A指令******#defineCMD_RESET0xa4#defineCMD_TEST0xbf#defineDECODE00x80#defineDECODE10xc8#defineCMD_READ0x15#defineUNDECODE0x90#defineRTL_CYCLE0xa3#defineRTR_CYCLE0xa2#defineRTL_UNCYL0xa1#defineRTR_UNCYL0xa0#defineACTCTL0x98#defineSEGON0xe0#defineSEGOFF0xc0#defineBLINKCTL0x88//***主程序***main(){ while(1) { for(tmr=0;tmr<0x2000;tmr++); //上電延時(shí) send_byte(CMD_RESET); //復(fù)位HD7279A
//******************************************//測(cè)試指令演示//******************************************send_byte(CMD_TEST); //測(cè)試指令 for(j=0;j<3;j++) //延時(shí)約3秒 { delay10ms(100); } send_byte(CMD_RESET); //清除顯示//**********************************************//閃爍指令及鍵盤接口測(cè)試//將用戶按鍵的鍵碼顯示出來,如果10秒內(nèi)無按鍵//或按S0鍵即進(jìn)入下一步演示//**********************************************wait_cnter=0; key_number=0xff; write7279(BLINKCTL,0xfc); //第1、2兩位設(shè)為閃爍顯示 write7279(UNDECODE,0X08); //在第1位顯示下劃線'_' write7279(UNDECODE+1,0x08); //在第2位顯示下劃線'_' do { if(!key) //如果有鍵按下 {key_number=read7279(CMD_READ);//讀出鍵碼 write7279(DECODE1+1,key_number/16);//在第2位顯示鍵碼高8位
write7279(DECODE1,key_number&0x0f); //在第1位顯示鍵碼低8位 while(!key); //等待按鍵放開 wait_cnter=0; } wait_cnter++;}while(key_number!=0&&wait_cnter<0x30000); //如果按鍵為‘0’和超時(shí)則進(jìn)入下一步演示write7279(BLINKCTL,0xff);
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校長政治素質(zhì)自評(píng)報(bào)告
- 2026年山西電力職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考試題有答案解析
- 2026年江蘇城市職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考題庫帶答案解析
- 2026年四川應(yīng)用技術(shù)職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考題庫帶答案解析
- 知青文學(xué)活動(dòng)策劃方案(3篇)
- 藥品展位活動(dòng)方案策劃(3篇)
- 2026年江西傳媒職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題帶答案解析
- 2026年六盤水幼兒師范高等??茖W(xué)校單招綜合素質(zhì)筆試備考試題帶答案解析
- 酒吧立春活動(dòng)策劃方案(3篇)
- 團(tuán)建活動(dòng)策劃方案跳舞(3篇)
- 2016建筑安裝工程工期定額
- 機(jī)電設(shè)備安裝與調(diào)試技術(shù)教案
- 甲狀腺的中醫(yī)護(hù)理
- 紀(jì)念冊(cè)后記的格式范文
- 2024版裝修公司軟裝合同范本
- 加壓站清水池建設(shè)工程勘察設(shè)計(jì)招標(biāo)文件
- 工會(huì)制度匯編
- 2023年醫(yī)務(wù)科工作計(jì)劃-1
- 地基與基礎(chǔ)分項(xiàng)工程質(zhì)量驗(yàn)收記錄
- 一文多用作文課公開課課件
- 水運(yùn)工程施工課程設(shè)計(jì)指導(dǎo)書
評(píng)論
0/150
提交評(píng)論