




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
模塊5顯示和鍵盤接口技術(shù)任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計任務(wù)8編制數(shù)碼管動態(tài)顯示程序任務(wù)9字符型LCD液晶顯示歡迎界面任務(wù)10用矩陣鍵盤控制8路跑馬燈模塊5顯示和鍵盤接口技術(shù)任務(wù)7LED數(shù)碼管顯示的簡易
任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計
任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計
1.任務(wù)目的通過對由LED數(shù)碼管顯示一位數(shù)0~9簡易倒計時秒表的制作,熟悉單片機(jī)與LED數(shù)碼管的接口技術(shù),進(jìn)一步了解數(shù)組的定義、賦值、初始化等操作方法。2.任務(wù)要求用單片機(jī)實現(xiàn)一位數(shù)簡易秒表倒計時控制,計時范圍為0~9s,并將計時時間在一位數(shù)碼管上顯示出來。3.電路設(shè)計用單片機(jī)控制LED數(shù)碼管顯示的簡易秒表硬件電路如圖5.1所示,單片機(jī)的P0口8個引腳接到數(shù)碼管的8個段控制端。圖5.1中采用的是共陽極數(shù)碼管,所以COM端(公共端)接P2.7作為選通端。如果是共陰極數(shù)碼管,則須將COM端接地。1.任務(wù)目的4.程序設(shè)計/*功能:數(shù)碼管顯示10秒倒計時*//*數(shù)碼管硬件結(jié)構(gòu)選擇為:三極管驅(qū)動8位共陽型數(shù)碼管*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#definesm_dataP0//P0選擇段sbitp2_7=P2^7;voiddelay1s(){uchari;for(i=0;i<0x14;i++){TH1=0x3c;TL1=0xb0;TR1=1; //以上三行為單片機(jī)設(shè)定定時時間,在定時計數(shù)章節(jié)詳細(xì)介紹while(!TF1);TF1=0;
4.程序設(shè)計}}voidmain(){uchari;uintzk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//共陽型數(shù)碼管對應(yīng)的//0到9十六進(jìn)制編碼TMOD=0x10;while(1){p2_7=0; for(i=9;i>=0;i--){sm_data=zk[i];delay1s();}}}}5.程序運(yùn)行測試編譯、鏈接過程參見任務(wù)2,將二進(jìn)制文檔ex5_1.hex下載到單片機(jī)的程序存儲器中,接通電路板電源,即可觀察到一位簡易秒表按照9~0的順序顯示。5.程序運(yùn)行測試
5.1數(shù)組
5.1數(shù)組5.1.1一維數(shù)組1.一維數(shù)組的定義定義格式如下:類型說明符數(shù)組名[常量表達(dá)式];類型說明符是數(shù)組中各個元素的數(shù)據(jù)類型;數(shù)組名是用戶定義的數(shù)組標(biāo)識符;常量表達(dá)式表示數(shù)組元素的個數(shù)。如:inta[4];//定義整型數(shù)組a,有4個元素,a[0]、a[1]、a[2]、a[3]charb[5];//定義字符數(shù)組b,有5個元素定義數(shù)組時,應(yīng)注意以下幾點(diǎn):(1)對于同一數(shù)組,所有元素的數(shù)據(jù)類型都必須是相同的。5.1.1一維數(shù)組(2)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識符的書寫規(guī)定。(3)數(shù)組名不能與其他變量名相同。(4)方括號中的常量表達(dá)式不可以是變量,但可以是符號常數(shù)和常量表達(dá)式。如:#defineNUM4main(){inta[NUM],b[4-2];……}(5)可以在一個類型說明中,定義多個數(shù)組和變量。2.數(shù)組元素數(shù)組元素也是一種變量,其標(biāo)識方法為數(shù)組名后跟一個下標(biāo),它只能為整型數(shù)或整型表達(dá)式。定義形式:數(shù)組名[下標(biāo)]如:zk[7],a[i]等都是合法的。下標(biāo)表示該數(shù)組元素在數(shù)值中的位置,其值從0開始,下標(biāo)為0的數(shù)組元素是數(shù)組中的第一個數(shù)組元素,zk[7]為該數(shù)組中的第8個元素。(2)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識符的書寫規(guī)定。在程序中不能一次引用整個數(shù)組,只能逐個使用數(shù)組元素。如任務(wù)7秒表倒計時程序中程序段:for(i=9;i>=0;i--){sm_data=zk[i];……}3.數(shù)組賦值給數(shù)組賦值的方法有賦值語句和初始化賦值兩種。(1)在程序執(zhí)行過程中,可用賦值語句對數(shù)組元素逐個賦值,如:for(i-0;i<10;i++){Num[i]=i;}(2)數(shù)組初始化賦值是指在數(shù)組定義時給數(shù)組元素賦予初值,如:intnum[10]={0,1,2,3,4,5,6,7,8,9};這種賦值方式是在編譯階段完成的,可以減少程序運(yùn)行時間,提高程序執(zhí)行效率。在程序中不能一次引用整個數(shù)組,只能逐個使用數(shù)組元素。如任務(wù)75.1.2字符數(shù)組前面介紹的數(shù)組是數(shù)值型的數(shù)組,數(shù)組中的每一個元素都是用來存放數(shù)值型的數(shù)據(jù)。數(shù)組不僅可以是數(shù)值型的,也可以是字符型的或其他類型的(如指針型、結(jié)構(gòu)體型)。字符數(shù)組的定義格式與一維數(shù)組定義類似,用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個元素就是一個字符。可以在定義字符數(shù)組時對各元素賦初值,即初始化。例如:charc[10]={'I','','a','m','','h','a','p','p','y'};把10個字符分別賦給c[0]~c[9]?這10個元素。如果在定義字符數(shù)組時不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)知的。如果大括號中提供的初值個數(shù)大于數(shù)組長度,則按語法錯誤處理。如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定義為空字符(即‘\0’)。5.1.2字符數(shù)組
任務(wù)8編制數(shù)碼管動態(tài)顯示程序
任務(wù)8編制數(shù)碼管動態(tài)顯示程序
1.任務(wù)目的根據(jù)電路編寫在4個數(shù)碼管上穩(wěn)定顯示“1234”的程序,了解數(shù)碼管的動態(tài)顯示的驅(qū)動。2.任務(wù)要求采用動態(tài)顯示方式,用單片機(jī)實現(xiàn)4位數(shù)碼管穩(wěn)定顯示“1234”。3.電路設(shè)計用動態(tài)顯示方式點(diǎn)亮4個共陽極數(shù)碼管的電路圖如圖5.2所示。圖中將各個共陽極數(shù)碼管相應(yīng)的段選控制端并聯(lián)在一起,僅用一個P0口控制。各位數(shù)碼管的公共端,也稱為“位選端”,由P2口高四位控制,用4個PNP型三極管驅(qū)動。1.任務(wù)目的4.程序設(shè)計4位數(shù)碼管動態(tài)顯示“1234”的程序如下。/*功能:讓4個數(shù)碼管依次顯示1到4,調(diào)整delay函數(shù)中的數(shù)值,可使數(shù)碼管全亮或每次只亮一個。*//*數(shù)碼管硬件結(jié)構(gòu)選擇為:三極管驅(qū)動8位共陽型數(shù)碼管*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#definesm_dataP0//P0選擇段#definesm_dpP2//P2選擇位voiddelay(uintx);voidmain(){uchari;uintzk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//共陽型數(shù)碼管對應(yīng)的//1到9十六進(jìn)制編碼while(1)4.程序設(shè)計{for(i=0;i<4;i++){sm_dp=(i==0)?0xEF:(sm_dp<<1)+1;//(sm_dp<<1)+1保證每次只點(diǎn)亮一個數(shù)碼管sm_data=zk[i];delay(5);//延時時間決定只亮一個數(shù)碼管,還是所有數(shù)碼管均有顯示//改變delay函數(shù)中的數(shù)值,可觀察到不同的視覺暫留效果//根據(jù)實踐所得,當(dāng)delay函數(shù)中的數(shù)值為1~5時,數(shù)碼管全亮效果最佳//當(dāng)delay函數(shù)中的數(shù)值為80以上時,清楚可見每次只有一個數(shù)碼管有顯示}}}voiddelay(uintn){uchari;while(n--)for(i=0;i<125;i++);}{
5.2單片機(jī)與LED數(shù)碼管接口
5.2單片機(jī)與LED數(shù)碼管接口5.2.1LED數(shù)碼管的結(jié)構(gòu)及原理1.?LED數(shù)碼管的結(jié)構(gòu)在單片機(jī)系統(tǒng)中,經(jīng)常采用LED數(shù)碼管來顯示單片機(jī)系統(tǒng)的工作狀態(tài)、運(yùn)算結(jié)果等各種信息,LED數(shù)碼管是單片機(jī)人機(jī)對話的一種重要輸出設(shè)備。單個LED數(shù)碼管的外形如圖5.3所示,外部引腳如圖5.4所示。LED數(shù)碼管由8個發(fā)光二極管組成,通過不同的發(fā)光字段組合可用來顯示數(shù)字0~9、字符A~F、H、L、P、R、U、Y、符號“—”及小數(shù)點(diǎn)“.”等。按照內(nèi)部8個發(fā)光二極管連接方式的不同,LED數(shù)碼管可分為共陽極型LED數(shù)碼管和共陰極型LED數(shù)碼管兩種,其內(nèi)部結(jié)構(gòu)如圖5.5所示。5.2.1LED數(shù)碼管的結(jié)構(gòu)及原理5.程序運(yùn)行測試編譯、鏈接過程參見任務(wù)2,將二進(jìn)制文檔ex5_1.hex下載到單片機(jī)的程序存儲器中,接通電路板電源,即可觀察到一位簡易秒表按照9~0的順序顯示。2.?LED數(shù)碼管的工作原理這里以共陽極型為例說明LED數(shù)碼管的工作原理。從任務(wù)7中我們知道,若將數(shù)值0送至單片機(jī)的P0口,數(shù)碼管上不會顯示數(shù)字“0”。顯然,要使數(shù)碼管顯示出數(shù)字或字符,直接將相應(yīng)的數(shù)字或字符送至數(shù)碼管的段控制端是不行的,必須使段控制端輸出相應(yīng)的字型編碼。如圖5.5(a)所示,共陽極數(shù)碼管的8個發(fā)光二極管的陽極連接在一起,作為公共控制端(com),陰極作為“段”控制端。5.程序運(yùn)行測試(1)當(dāng)公共端接低電平時,每個發(fā)光二極管都是截止的狀態(tài),無法發(fā)光。(2)當(dāng)公共端接高電平時,當(dāng)某段控制端為低電平時,該段對應(yīng)的發(fā)光二極管導(dǎo)通并點(diǎn)亮。通過點(diǎn)亮不同的段,顯示出不同的字符。如顯示數(shù)字1時,b、c兩端接低電平,其他各端接高電平。在任務(wù)7中,單片機(jī)P0口的八個引腳依次與數(shù)碼管的a、b、……、f、dp八個段控制引腳相連接。要顯示數(shù)字“0”,則數(shù)碼管的a、b、c、d、e、f六個段應(yīng)點(diǎn)亮,其他段熄滅,需向P0口傳送數(shù)據(jù)11000000(C0H),該數(shù)據(jù)就是與字符“0”相對應(yīng)的共陽極字型編碼。5.2.2LED數(shù)碼管靜態(tài)顯示1.靜態(tài)顯示的概念靜態(tài)顯示是指當(dāng)數(shù)碼管顯示某一字符時,相應(yīng)的某段發(fā)光二極管恒定導(dǎo)通或恒定截止。這種顯示方式的各位數(shù)碼管的公共端恒定接地(共陰極)或?+5V電源(共陽極)。每個數(shù)碼管的8個段位控制引腳分別與一個8位I/O端口相連。只要I/O端口有顯示字型碼輸出,數(shù)碼管就顯示給定字符,并保持不變,直到I/O端口輸出新的段碼。任務(wù)7采用的就是一位數(shù)碼管的靜態(tài)顯示方式。2.靜態(tài)顯示的接口采用靜態(tài)顯示方式,較小的電流就可獲得較高的亮度,且占用CPU時間少,編程簡單,顯示便于監(jiān)測和控制,但占用單片機(jī)的I/O端口線多,n位數(shù)碼管的靜態(tài)顯示需占用8?×?n個I/O端口,所以限制了單片機(jī)連接數(shù)碼管的個數(shù)。同時,硬件電路復(fù)雜,成本高,只適合顯示位數(shù)較少的場合。(1)當(dāng)公共端接低電平時,每個發(fā)光二極管都是截止的狀態(tài),無靜態(tài)顯示電路和實例見任務(wù)7。5.2.3LED數(shù)碼管動態(tài)顯示1.動態(tài)顯示的概念動態(tài)顯示是一種按位輪流點(diǎn)亮各位數(shù)碼管的顯示方式,即在某一時段,只讓其中一位數(shù)碼管的“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時,其他位的數(shù)碼管因“位選端”無效而都處于熄滅狀態(tài)。下一時段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字型顯示編碼,按此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷的顯示出相應(yīng)的字符。雖然在同一時刻只有一位數(shù)碼管在點(diǎn)亮,但利用人眼的視覺暫留效應(yīng)和發(fā)光二極管熄滅時的余輝效應(yīng),看到的卻是多位數(shù)碼“同時”顯示。這一過程稱為動態(tài)掃描顯示。2.動態(tài)顯示的接口動態(tài)顯示方式下,數(shù)碼管的所有段選口共用一個8位I/O口,而每個數(shù)碼管顯示位要占用一根I/O線,因此,n位動態(tài)顯示的數(shù)碼管只占用一個8位I/O端口和n根I/O線。顯示n位數(shù)碼時,連接段選的8位I/O端口依次送出n位數(shù)碼的段碼數(shù)據(jù)。同時,依次控制相應(yīng)位公共端,當(dāng)公共端電平為“0”(共陰極)或“1”(共陽極)時,該位數(shù)碼管點(diǎn)亮。靜態(tài)顯示電路和實例見任務(wù)7。
任務(wù)9字符型LCD液晶顯示歡迎界面
任務(wù)9字符型LCD液晶顯示歡迎界面
1.任務(wù)目的通過對字符型LCD液晶歡迎界面的顯示,讓讀者了解LCD顯示器與單片機(jī)的接口方法,理解LCD顯示程序的設(shè)計思路。2.任務(wù)要求實現(xiàn)在1602液晶的第一行顯示“WELCOME!”,第二行顯示“WWW.WTC.EDU.CN”。3.電路設(shè)計LCD液晶顯示電路如圖5.6所示,現(xiàn)對接口做簡要說明:液晶1、2端為電源端,15、16為背光電源端,為防止直接加5V電壓會燒壞背光燈,在15腳串入一個10kΩ電阻限流。3端為液晶對比度調(diào)節(jié)端,通過一個1kΩ的可調(diào)電阻來調(diào)節(jié)顯示對比度。1.任務(wù)目的4端為向液晶的控制器寫數(shù)據(jù)或?qū)懨畹倪x擇端,接單片機(jī)的P3.5端口。5端為讀/寫選擇端,此任務(wù)中,只向液晶寫入命令和顯示數(shù)據(jù),所以此端始終為“寫”狀態(tài),即低電平狀態(tài)。6端為使能信號,是操作時必需的信號,接P3.4口。4.程序設(shè)計#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]="WELCOME!";ucharcodetable1[]="WWW.WTC.EDU.CN";sbitlcden=P3^5; //液晶使能端sbitlcdrs=P3^4; //液晶數(shù)據(jù)命令選擇端ucharnum;voiddelay(uintz){uintx,y;for(x=z;x>0;x--) for(y=110;y>0;y--);4端為向液晶的控制器寫數(shù)據(jù)或?qū)懨畹倪x擇端,接單片機(jī)的P3.}voidwrite_command(ucharcom){lcdrs=0; //選擇寫命令模式P0=com; //將要寫的命令字送到數(shù)據(jù)總線上delay(5); //稍做延時以待數(shù)據(jù)穩(wěn)定lcden=1; //使能端給一高電平,因為初始化函數(shù)中已將lcden置為0delay(5);lcden=0; //將使能端置0以完成高脈沖}voidwrite_data(uchardat){lcdrs=1;P0=dat;delay(5);lcden=1;delay(5);lcden=0;}}voidinit(){lcden=0;write_command(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口write_command(0x0c); //設(shè)置開顯示,不顯示光標(biāo)write_command(0x06); //寫一個字符后地址指針加1write_command(0x01); //顯示清0,數(shù)據(jù)指針清0}voidmain(){init();write_command(0x80);for(num=0;num<8;num++){write_data(table[num]);delay(5);}}write_command(0x80+0x40);for(num=0;num<14;num++){write_data(table1[num]);delay(5);}while(1);}write_command(0x80+0x40);
5.3單片機(jī)與LCD液晶顯示器接口
5.3單片機(jī)與LCD液晶顯示器接口5.3.1LCD芯片介紹液晶是一種高分子材料,因為其特殊的物理、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始廣泛應(yīng)用在輕薄型顯示器上。液晶顯示器(LiquidCrystalDisplay,LCD)的主要原理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面并配合背部燈管構(gòu)成畫面。通常,我們把各種液晶顯示器都直接叫做液晶。各種型號的液晶通常是按照現(xiàn)實字符的行數(shù)或液晶點(diǎn)陣的行、列數(shù)來命名的。比如:1602的意思是每行顯示16個字符,一共可以顯示兩行,類似的命名還有0801,0802,1601等。這類液晶通常都是字符型液晶,只能顯示ASCII碼字符,如數(shù)字、大小寫字母、各種符號等。12232液晶屬于圖形型液晶,它是由122列、32行組成,即共有122×32個點(diǎn)來顯示各種圖形,類似的命名還有12864、19264、192128等。根據(jù)客戶需求,廠家還可以設(shè)計出任意數(shù)組合的點(diǎn)陣液晶。5.3.1LCD芯片介紹所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。字符型點(diǎn)陣液晶顯示模塊LCD1602如圖5.7所示。通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其引腳排列如圖5.8所示,引腳定義如表5.2所示。所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行15.3.2LCD1602中的存儲器LCD1602內(nèi)置了DDRAM、CGROM和CGRAM。1.?DDRAM5.3.2LCD1602中的存儲器DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼,共80個字節(jié),其地址和屏幕的對應(yīng)關(guān)系如表5.3所示。也就是說想要在LCD1602屏幕的第一行第一列顯示一個“A”字,就要向DDRAM的00H地址寫入“A”字的代碼。但具體的寫入是要按LCD模塊的指令格式來進(jìn)行的。一行有40個地址,在1602中我們就用前16個就行了。第二行也一樣,用前16個地址。對應(yīng)關(guān)系如表5.4所示。DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼,共82.?CGROM1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點(diǎn)陣字符圖形,如表5.5所示。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號和日文假名等。每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。2.?CGROM3.CGRAM字符代碼0x00~0x0F為用戶自定義的字符圖形RAM,就是CGRAM了。0x20~0x7F為標(biāo)準(zhǔn)的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。5.3.3LCD1602指令說明LCD1602模塊內(nèi)部有11條控制指令,見表5.6。3.CGRAM1.清屏指令功能:(1)清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的ASCII碼20H。(2)光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方。(3)將地址計數(shù)器(AC)的值設(shè)為0。2.光標(biāo)歸位指令功能:(1)把光標(biāo)撤回到顯示器的左上方。(2)把地址計數(shù)器(AC)的值設(shè)置為0。(3)保持DDRAM的內(nèi)容不變。1.清屏指令3.進(jìn)入模式設(shè)置指令功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下所示:位名設(shè)置I/D0?=?寫入新數(shù)據(jù)后光標(biāo)左移1?=?寫入新數(shù)據(jù)后光標(biāo)右移S0?=?寫入新數(shù)據(jù)后顯示屏不移動1?=?寫入新數(shù)據(jù)后顯示屏整體右移1個字3.進(jìn)入模式設(shè)置指令4.顯示開關(guān)控制指令功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下:位名設(shè)置D0?=?顯示功能關(guān)1?=?顯示功能開C0?=?無光標(biāo)1?=?有光標(biāo)B0?=?光標(biāo)閃爍1?=?光標(biāo)不閃爍4.顯示開關(guān)控制指令5.設(shè)定顯示屏或光標(biāo)移動方向指令功能:使光標(biāo)移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下:S/CR/L設(shè)定情況00光標(biāo)左移1格,且AC值減101光標(biāo)右移1格,且AC值加110顯示器上字符全部左移一格,但光標(biāo)不動11顯示器上字符全部右移一格,但光標(biāo)不動5.設(shè)定顯示屏或光標(biāo)移動方向指令6.功能設(shè)定指令功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:位名設(shè)置DL 0?=?數(shù)據(jù)總線為4位 1?=?數(shù)據(jù)總線為8位N 0?=?顯示1行 1?=?顯示2行F 0?=5?×?7點(diǎn)陣/每字符 1?=?5?×?10點(diǎn)陣/每字符6.功能設(shè)定指令7.設(shè)定CGRAM地址指令功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。8.設(shè)定DDRAM地址指令功能:設(shè)定下一個要存入數(shù)據(jù)的DDRAM的地址。注意:這里我們送地址的時候應(yīng)該是0x80+Address,這也是前面說到寫地址命令的時候要加上0x80的原因。7.設(shè)定CGRAM地址指令9.讀取忙信號或AC地址指令功能:(1)讀取忙碌信號FB的內(nèi)容,F(xiàn)B?=?1表示液晶顯示器忙,暫時無法接收單片機(jī)送來的數(shù)據(jù)或指令;當(dāng)FB?=?0時,液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令。(2)讀取地址計數(shù)器(AC)的內(nèi)容。10.數(shù)據(jù)寫入DDRAM或CGRAM指令一覽功能:(1)將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符。(2)將使用者自己設(shè)計的圖形存入CGRAM。9.讀取忙信號或AC地址指令11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽功能:讀取DDRAM或CGRAM中的內(nèi)容。5.3.4字符型LCD1602的基本操作及時序LCD1602的基本操作有四種:寫命令、寫數(shù)據(jù)、讀狀態(tài)和讀數(shù)據(jù)。基本操作時序見表5.7。11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽
任務(wù)10用矩陣鍵盤控制8路跑馬燈
任務(wù)10用矩陣鍵盤控制8路跑馬燈
1.任務(wù)目的通過本任務(wù),掌握矩陣鍵盤按鍵的識別方法。2.任務(wù)要求采用列掃描法,按下S0時,第1位燈亮;按下S1時,第2位燈亮;按下S2時,第3位燈亮;按下S3時,第4位燈亮;按下S4時,第5位燈亮;按下S5時,第6位燈亮;按下S6時,第7位燈亮;按下S7時,第8位燈亮;按下S8時,第1、2位燈亮;按下S9時,第2、3位燈亮;按下S10時,第3、4位燈亮;按下S11時,第4、5位燈亮;按下S12時,第5、6位燈亮;按下S13時,第6、7位燈亮;按下S14時,第7、8位燈亮;按下S15時,8位燈全亮。3.電路設(shè)計采用矩陣鍵盤控制8路跑馬燈的電路如圖5.9所示,16個矩陣按鍵由P2口的8根I/O線聯(lián)合控制,8路跑馬燈由P1口控制。1.任務(wù)目的4.程序設(shè)計//功能:采用列掃描法,每按下一個按鍵,則由對應(yīng)的1位或2位燈亮。//這種方法基于了單片機(jī)輸出斷口未被置0或1時,均保持高電平(端口為1)的特性//P2.0控制第1行,P2.1控制第2行,P2.2控制第3行,P2.3控制第4行;//P2.4控制第1列,P2.5控制第2列,P2.6控制第3列,P2.7控制第4列。#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#definesm_dataP1//P1控制8路跑馬燈sbitc0=P2^0;sbitc1=P2^1;sbitc2=P2^2;sbitc3=P2^3;sbitc4=P2^4;sbitc5=P2^5;sbitc6=P2^6;sbitc7=P2^7;4.程序設(shè)計voiddelay1(uchartime);ucharjianpanzhi();//確定按鍵編號,返回的a值表示按鍵的編號。這是一個通用的程序,若想按下 //某個按鍵,實現(xiàn)某個功能,只要傳遞a值即可voiddisplay(ucharb);voidmain(){ucharx;while(1){x=jianpanzhi();delay1(50); //按鍵釋放后,去抖display(x);}}voiddelay1(uchartime);ucharjianpanzhi(){uinti,a;c4=0; //初始化P2口,使P2_4-P2_7均為0,創(chuàng)造出判斷是否有鍵按下的初試條件c5=0;c6=0;c7=0;if(P2!=0x0f) //判斷是否有鍵按下{delay1(50); //按下按鍵時,去抖if(P2!=0x0f) //再次判斷是否有鍵按下for(i=0;i<4;i++){switch(i) //列掃描{case0: //只將P2.4置0,如果第一列有鍵按下,則P2.0—P2.3某個端口為0;
ucharjianpanzhi() //其余端口保持高電平c4=0;c5=1;c6=1;c7=1;break;case1: //只將P2.5置0,如果第二列有鍵按下,則P2.0—P2.3某個端口為0; //其余端口保持高電平c4=1;c5=0;c6=1;c7=1;break;case2: //只將P2.6置0,如果第三列有鍵按下,則P2.0—P2.3某個端口為0; //其余端口保持高電平c4=1;
//其余端口保持高電c5=1;c6=0;c7=1;break;case3: //只將P2.7置0,如果第四列有鍵按下,則P2.0—P2.3某個端口為0; //其余端口保持高電平c4=1;c5=1;c6=1;c7=0;break;default:break;}
c5=1;//計算法得到鍵值即確定a值,即被按下的按鍵編號,S0:a=1,S1:a=2……S15:a=16if(!c0) //若P2.0=0,則表示s0(i為0時)或s1(i為1時)或s2(i為2時)或s3(i為3//時)被按下a=i+1;break;}if(!c1)//若P2.1=0,則表示s4(i為0時)或s5(i為1時)或s6(i為2時)或s7(i為3時)被按下。{a=i+5;break;}if(!c2)//若P2.2=0,則表示s8(i為0時)或s9(i為1時)或s10(i為2時)或s11(i為3時)//被按下{
//計算法得到鍵值即確定a值,即被按下的按鍵編號,a=i+9;break;}if(!c3)//若P2.3=0,則表示s12(i為0時)或s13(i為1時)或s14(i為2時)或s15(i為3時)//被按下{a=i+13;break;}}}//若在此處加上elsea=0;則當(dāng)鍵盤按下時,有數(shù)值顯示;按鍵釋放后,數(shù)值消失。returna;}a=i+9;//顯示程序,按下S0時,第1位燈亮;按下S1時,第2位燈亮;按下S2時,第3位燈亮;按下S3時,第4位燈亮//**********按下S4時,第5位燈亮;按下S5時,第6位燈亮;按下S6時,第7位燈亮;按下S7時,第8位燈亮//**********按下S8時,第1、2位燈亮;按下S9時,第2、3位燈亮;按下S10時,第3、4位燈亮;按下S11時,第4、5位燈亮//**********按下S12時,第5、6位燈亮;按下S13時,第6、7位燈亮;按下S14時,第7、8位燈亮;按下S15時,8位燈全亮voiddisplay(ucharb){switch(b){case1:sm_data=0xFE;break;case2:sm_data=0xFD;
//顯示程序,按下S0時,第1位燈亮;按下S1時,第2位燈亮break;case3:sm_data=0xFB;break;case4:sm_data=0xF7;break;case5:sm_data=0xEF;break;case6:sm_data=0xDF;break;
break;case7:sm_data=0xBF;break;case8:sm_data=0x7F;break;case9:sm_data=0xFC;break;case10:sm_data=0xF9;break;case11:sm_data=0xF3;
case7:break;case12:sm_data=0xE7;break;case13:sm_data=0xCF;break;case14:sm_data=0x9F;break;case15:sm_data=0x3F;break;
break;case16:sm_data=0x00;break;default:sm_data=0xff;break;}}voiddelay1(uchartime){while(time--)_nop_();}case16:
5.4單片機(jī)與鍵盤接口
5.4單片機(jī)與鍵盤接口5.4.1按鍵的去抖1.按鍵抖動的原理機(jī)械式按鍵在按下或釋放時,由于機(jī)械彈性作用的影響,通常伴隨有一定時間的觸點(diǎn)機(jī)械抖動,如圖5.11所示,然后其觸點(diǎn)再穩(wěn)定下來,抖動時間一般為5~10ms。在觸點(diǎn)抖動期間監(jiān)測按鍵的通與斷的狀態(tài),可能會導(dǎo)致判斷出錯。5.4.1按鍵的去抖2.按鍵去抖的方法(1)硬件去抖。在鍵數(shù)較少時可用硬件方法消除鍵抖動。如圖5.12所示的RS觸發(fā)器為常用的硬件去抖。圖中兩個“與非”門構(gòu)成一個RS觸發(fā)器。當(dāng)按鍵未按下時,輸出為1;當(dāng)鍵按下時,輸出為0。此時即使用按鍵的機(jī)械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開(抖動跳開B),只要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)就不改變,輸出保持為0,則不會產(chǎn)生抖動的波形。也就是說,即使B點(diǎn)的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。2.按鍵去抖的方法(2)軟件去抖。如果按鍵較多,常用軟件方法去抖,即檢測出鍵閉合后執(zhí)行一個延時程序,產(chǎn)生5~10?ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給5~10?ms的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序。5.4.2獨(dú)立式按鍵1.獨(dú)立式按鍵介紹如圖5.13所示電路為單片機(jī)與獨(dú)立式按鍵的接口電路,直接用單片機(jī)的I/O端口線P3.2~P3.5控制按鍵。每個按鍵單獨(dú)占用一根I/O端口線,相互獨(dú)立,每個按鍵工作不會影響其他I/O端口線的狀態(tài)。獨(dú)立式按鍵的電路配置靈活,軟件結(jié)構(gòu)簡單,但每個按鍵必須占用一根I/O端口線。因此,在按鍵較多時,I/O端口線浪費(fèi)較大,不宜采用。(2)軟件去抖。5.4.3矩陣式鍵盤1.矩陣式鍵盤的結(jié)構(gòu)矩陣式鍵盤最大的特點(diǎn)是減少了對單片機(jī)I/O端口的占用,適用于按鍵數(shù)較多的系統(tǒng)。矩陣式鍵盤種的按鍵實際上與獨(dú)立式鍵盤種的按鍵原理相同,都是一個機(jī)械開關(guān),只不過在矩陣式鍵盤種按鍵位于行線和列線的交匯處。如圖5.15所示為矩陣式鍵盤的結(jié)構(gòu),由4根行線和4根列線組成,按鍵位于行、列線的交叉點(diǎn)上,行線和列線分別連接到按鍵的兩端,且行線通過上拉電阻接到+5V電源上,構(gòu)成了一個4?×?4(16個按鍵)的矩陣式鍵盤。通常,矩陣式鍵盤的列線由單片機(jī)輸出口控制,行線連接單片機(jī)的輸入口。5.4.3矩陣式鍵盤2.矩陣式鍵盤按鍵的識別最常用的矩陣式鍵盤識別按鍵方法是編程行列掃描法,這里采用列掃描法。按鍵的識別可以分為以下兩個步驟。(1)判斷有無按鍵按下。向所有的列線上輸出低電平,再讀入所有的行信號。如果16個按鍵中任意一個被按下,那么讀入的行電平則不全為高;如果16個按鍵中無按鍵被按下,則讀入的行電平全為高。如圖5.15所示。如果S10鍵被按下,則S10鍵所在的第2行與第2列導(dǎo)通,第2行被拉低,讀入的行信號為低電平,表示有鍵被按下。(2)判斷具體的按鍵。方法是往列線上逐列送低電平,查詢對應(yīng)行線是否為0,若為0,則對應(yīng)行列按鍵被按下。具體做法如下:先送第0列為低電平,第1、2、3列為高電平,讀入的行電平的狀態(tài)就顯示了位于第0列的S0、S4、S8、S12這4個按鍵的狀態(tài),若讀入的行值為全高,則表示沒有按鍵被按下;再送第1列為低電平,第0、2、3列為高電平,讀入的行電平狀態(tài)則顯示了S1、S5、S9、S13這4個按鍵的狀態(tài),以此類推,直至4列全部掃描完,再重新從第0列開始。2.矩陣式鍵盤按鍵的識別感謝感謝謝謝,精品課件資料搜集謝謝,精品課件資料搜集模塊5顯示和鍵盤接口技術(shù)任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計任務(wù)8編制數(shù)碼管動態(tài)顯示程序任務(wù)9字符型LCD液晶顯示歡迎界面任務(wù)10用矩陣鍵盤控制8路跑馬燈模塊5顯示和鍵盤接口技術(shù)任務(wù)7LED數(shù)碼管顯示的簡易
任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計
任務(wù)7LED數(shù)碼管顯示的簡易秒表倒計時設(shè)計
1.任務(wù)目的通過對由LED數(shù)碼管顯示一位數(shù)0~9簡易倒計時秒表的制作,熟悉單片機(jī)與LED數(shù)碼管的接口技術(shù),進(jìn)一步了解數(shù)組的定義、賦值、初始化等操作方法。2.任務(wù)要求用單片機(jī)實現(xiàn)一位數(shù)簡易秒表倒計時控制,計時范圍為0~9s,并將計時時間在一位數(shù)碼管上顯示出來。3.電路設(shè)計用單片機(jī)控制LED數(shù)碼管顯示的簡易秒表硬件電路如圖5.1所示,單片機(jī)的P0口8個引腳接到數(shù)碼管的8個段控制端。圖5.1中采用的是共陽極數(shù)碼管,所以COM端(公共端)接P2.7作為選通端。如果是共陰極數(shù)碼管,則須將COM端接地。1.任務(wù)目的4.程序設(shè)計/*功能:數(shù)碼管顯示10秒倒計時*//*數(shù)碼管硬件結(jié)構(gòu)選擇為:三極管驅(qū)動8位共陽型數(shù)碼管*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#definesm_dataP0//P0選擇段sbitp2_7=P2^7;voiddelay1s(){uchari;for(i=0;i<0x14;i++){TH1=0x3c;TL1=0xb0;TR1=1; //以上三行為單片機(jī)設(shè)定定時時間,在定時計數(shù)章節(jié)詳細(xì)介紹while(!TF1);TF1=0;
4.程序設(shè)計}}voidmain(){uchari;uintzk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//共陽型數(shù)碼管對應(yīng)的//0到9十六進(jìn)制編碼TMOD=0x10;while(1){p2_7=0; for(i=9;i>=0;i--){sm_data=zk[i];delay1s();}}}}5.程序運(yùn)行測試編譯、鏈接過程參見任務(wù)2,將二進(jìn)制文檔ex5_1.hex下載到單片機(jī)的程序存儲器中,接通電路板電源,即可觀察到一位簡易秒表按照9~0的順序顯示。5.程序運(yùn)行測試
5.1數(shù)組
5.1數(shù)組5.1.1一維數(shù)組1.一維數(shù)組的定義定義格式如下:類型說明符數(shù)組名[常量表達(dá)式];類型說明符是數(shù)組中各個元素的數(shù)據(jù)類型;數(shù)組名是用戶定義的數(shù)組標(biāo)識符;常量表達(dá)式表示數(shù)組元素的個數(shù)。如:inta[4];//定義整型數(shù)組a,有4個元素,a[0]、a[1]、a[2]、a[3]charb[5];//定義字符數(shù)組b,有5個元素定義數(shù)組時,應(yīng)注意以下幾點(diǎn):(1)對于同一數(shù)組,所有元素的數(shù)據(jù)類型都必須是相同的。5.1.1一維數(shù)組(2)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識符的書寫規(guī)定。(3)數(shù)組名不能與其他變量名相同。(4)方括號中的常量表達(dá)式不可以是變量,但可以是符號常數(shù)和常量表達(dá)式。如:#defineNUM4main(){inta[NUM],b[4-2];……}(5)可以在一個類型說明中,定義多個數(shù)組和變量。2.數(shù)組元素數(shù)組元素也是一種變量,其標(biāo)識方法為數(shù)組名后跟一個下標(biāo),它只能為整型數(shù)或整型表達(dá)式。定義形式:數(shù)組名[下標(biāo)]如:zk[7],a[i]等都是合法的。下標(biāo)表示該數(shù)組元素在數(shù)值中的位置,其值從0開始,下標(biāo)為0的數(shù)組元素是數(shù)組中的第一個數(shù)組元素,zk[7]為該數(shù)組中的第8個元素。(2)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識符的書寫規(guī)定。在程序中不能一次引用整個數(shù)組,只能逐個使用數(shù)組元素。如任務(wù)7秒表倒計時程序中程序段:for(i=9;i>=0;i--){sm_data=zk[i];……}3.數(shù)組賦值給數(shù)組賦值的方法有賦值語句和初始化賦值兩種。(1)在程序執(zhí)行過程中,可用賦值語句對數(shù)組元素逐個賦值,如:for(i-0;i<10;i++){Num[i]=i;}(2)數(shù)組初始化賦值是指在數(shù)組定義時給數(shù)組元素賦予初值,如:intnum[10]={0,1,2,3,4,5,6,7,8,9};這種賦值方式是在編譯階段完成的,可以減少程序運(yùn)行時間,提高程序執(zhí)行效率。在程序中不能一次引用整個數(shù)組,只能逐個使用數(shù)組元素。如任務(wù)75.1.2字符數(shù)組前面介紹的數(shù)組是數(shù)值型的數(shù)組,數(shù)組中的每一個元素都是用來存放數(shù)值型的數(shù)據(jù)。數(shù)組不僅可以是數(shù)值型的,也可以是字符型的或其他類型的(如指針型、結(jié)構(gòu)體型)。字符數(shù)組的定義格式與一維數(shù)組定義類似,用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個元素就是一個字符??梢栽诙x字符數(shù)組時對各元素賦初值,即初始化。例如:charc[10]={'I','','a','m','','h','a','p','p','y'};把10個字符分別賦給c[0]~c[9]?這10個元素。如果在定義字符數(shù)組時不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)知的。如果大括號中提供的初值個數(shù)大于數(shù)組長度,則按語法錯誤處理。如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定義為空字符(即‘\0’)。5.1.2字符數(shù)組
任務(wù)8編制數(shù)碼管動態(tài)顯示程序
任務(wù)8編制數(shù)碼管動態(tài)顯示程序
1.任務(wù)目的根據(jù)電路編寫在4個數(shù)碼管上穩(wěn)定顯示“1234”的程序,了解數(shù)碼管的動態(tài)顯示的驅(qū)動。2.任務(wù)要求采用動態(tài)顯示方式,用單片機(jī)實現(xiàn)4位數(shù)碼管穩(wěn)定顯示“1234”。3.電路設(shè)計用動態(tài)顯示方式點(diǎn)亮4個共陽極數(shù)碼管的電路圖如圖5.2所示。圖中將各個共陽極數(shù)碼管相應(yīng)的段選控制端并聯(lián)在一起,僅用一個P0口控制。各位數(shù)碼管的公共端,也稱為“位選端”,由P2口高四位控制,用4個PNP型三極管驅(qū)動。1.任務(wù)目的4.程序設(shè)計4位數(shù)碼管動態(tài)顯示“1234”的程序如下。/*功能:讓4個數(shù)碼管依次顯示1到4,調(diào)整delay函數(shù)中的數(shù)值,可使數(shù)碼管全亮或每次只亮一個。*//*數(shù)碼管硬件結(jié)構(gòu)選擇為:三極管驅(qū)動8位共陽型數(shù)碼管*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#definesm_dataP0//P0選擇段#definesm_dpP2//P2選擇位voiddelay(uintx);voidmain(){uchari;uintzk[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//共陽型數(shù)碼管對應(yīng)的//1到9十六進(jìn)制編碼while(1)4.程序設(shè)計{for(i=0;i<4;i++){sm_dp=(i==0)?0xEF:(sm_dp<<1)+1;//(sm_dp<<1)+1保證每次只點(diǎn)亮一個數(shù)碼管sm_data=zk[i];delay(5);//延時時間決定只亮一個數(shù)碼管,還是所有數(shù)碼管均有顯示//改變delay函數(shù)中的數(shù)值,可觀察到不同的視覺暫留效果//根據(jù)實踐所得,當(dāng)delay函數(shù)中的數(shù)值為1~5時,數(shù)碼管全亮效果最佳//當(dāng)delay函數(shù)中的數(shù)值為80以上時,清楚可見每次只有一個數(shù)碼管有顯示}}}voiddelay(uintn){uchari;while(n--)for(i=0;i<125;i++);}{
5.2單片機(jī)與LED數(shù)碼管接口
5.2單片機(jī)與LED數(shù)碼管接口5.2.1LED數(shù)碼管的結(jié)構(gòu)及原理1.?LED數(shù)碼管的結(jié)構(gòu)在單片機(jī)系統(tǒng)中,經(jīng)常采用LED數(shù)碼管來顯示單片機(jī)系統(tǒng)的工作狀態(tài)、運(yùn)算結(jié)果等各種信息,LED數(shù)碼管是單片機(jī)人機(jī)對話的一種重要輸出設(shè)備。單個LED數(shù)碼管的外形如圖5.3所示,外部引腳如圖5.4所示。LED數(shù)碼管由8個發(fā)光二極管組成,通過不同的發(fā)光字段組合可用來顯示數(shù)字0~9、字符A~F、H、L、P、R、U、Y、符號“—”及小數(shù)點(diǎn)“.”等。按照內(nèi)部8個發(fā)光二極管連接方式的不同,LED數(shù)碼管可分為共陽極型LED數(shù)碼管和共陰極型LED數(shù)碼管兩種,其內(nèi)部結(jié)構(gòu)如圖5.5所示。5.2.1LED數(shù)碼管的結(jié)構(gòu)及原理5.程序運(yùn)行測試編譯、鏈接過程參見任務(wù)2,將二進(jìn)制文檔ex5_1.hex下載到單片機(jī)的程序存儲器中,接通電路板電源,即可觀察到一位簡易秒表按照9~0的順序顯示。2.?LED數(shù)碼管的工作原理這里以共陽極型為例說明LED數(shù)碼管的工作原理。從任務(wù)7中我們知道,若將數(shù)值0送至單片機(jī)的P0口,數(shù)碼管上不會顯示數(shù)字“0”。顯然,要使數(shù)碼管顯示出數(shù)字或字符,直接將相應(yīng)的數(shù)字或字符送至數(shù)碼管的段控制端是不行的,必須使段控制端輸出相應(yīng)的字型編碼。如圖5.5(a)所示,共陽極數(shù)碼管的8個發(fā)光二極管的陽極連接在一起,作為公共控制端(com),陰極作為“段”控制端。5.程序運(yùn)行測試(1)當(dāng)公共端接低電平時,每個發(fā)光二極管都是截止的狀態(tài),無法發(fā)光。(2)當(dāng)公共端接高電平時,當(dāng)某段控制端為低電平時,該段對應(yīng)的發(fā)光二極管導(dǎo)通并點(diǎn)亮。通過點(diǎn)亮不同的段,顯示出不同的字符。如顯示數(shù)字1時,b、c兩端接低電平,其他各端接高電平。在任務(wù)7中,單片機(jī)P0口的八個引腳依次與數(shù)碼管的a、b、……、f、dp八個段控制引腳相連接。要顯示數(shù)字“0”,則數(shù)碼管的a、b、c、d、e、f六個段應(yīng)點(diǎn)亮,其他段熄滅,需向P0口傳送數(shù)據(jù)11000000(C0H),該數(shù)據(jù)就是與字符“0”相對應(yīng)的共陽極字型編碼。5.2.2LED數(shù)碼管靜態(tài)顯示1.靜態(tài)顯示的概念靜態(tài)顯示是指當(dāng)數(shù)碼管顯示某一字符時,相應(yīng)的某段發(fā)光二極管恒定導(dǎo)通或恒定截止。這種顯示方式的各位數(shù)碼管的公共端恒定接地(共陰極)或?+5V電源(共陽極)。每個數(shù)碼管的8個段位控制引腳分別與一個8位I/O端口相連。只要I/O端口有顯示字型碼輸出,數(shù)碼管就顯示給定字符,并保持不變,直到I/O端口輸出新的段碼。任務(wù)7采用的就是一位數(shù)碼管的靜態(tài)顯示方式。2.靜態(tài)顯示的接口采用靜態(tài)顯示方式,較小的電流就可獲得較高的亮度,且占用CPU時間少,編程簡單,顯示便于監(jiān)測和控制,但占用單片機(jī)的I/O端口線多,n位數(shù)碼管的靜態(tài)顯示需占用8?×?n個I/O端口,所以限制了單片機(jī)連接數(shù)碼管的個數(shù)。同時,硬件電路復(fù)雜,成本高,只適合顯示位數(shù)較少的場合。(1)當(dāng)公共端接低電平時,每個發(fā)光二極管都是截止的狀態(tài),無靜態(tài)顯示電路和實例見任務(wù)7。5.2.3LED數(shù)碼管動態(tài)顯示1.動態(tài)顯示的概念動態(tài)顯示是一種按位輪流點(diǎn)亮各位數(shù)碼管的顯示方式,即在某一時段,只讓其中一位數(shù)碼管的“位選端”有效,并送出相應(yīng)的字型顯示編碼。此時,其他位的數(shù)碼管因“位選端”無效而都處于熄滅狀態(tài)。下一時段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字型顯示編碼,按此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷的顯示出相應(yīng)的字符。雖然在同一時刻只有一位數(shù)碼管在點(diǎn)亮,但利用人眼的視覺暫留效應(yīng)和發(fā)光二極管熄滅時的余輝效應(yīng),看到的卻是多位數(shù)碼“同時”顯示。這一過程稱為動態(tài)掃描顯示。2.動態(tài)顯示的接口動態(tài)顯示方式下,數(shù)碼管的所有段選口共用一個8位I/O口,而每個數(shù)碼管顯示位要占用一根I/O線,因此,n位動態(tài)顯示的數(shù)碼管只占用一個8位I/O端口和n根I/O線。顯示n位數(shù)碼時,連接段選的8位I/O端口依次送出n位數(shù)碼的段碼數(shù)據(jù)。同時,依次控制相應(yīng)位公共端,當(dāng)公共端電平為“0”(共陰極)或“1”(共陽極)時,該位數(shù)碼管點(diǎn)亮。靜態(tài)顯示電路和實例見任務(wù)7。
任務(wù)9字符型LCD液晶顯示歡迎界面
任務(wù)9字符型LCD液晶顯示歡迎界面
1.任務(wù)目的通過對字符型LCD液晶歡迎界面的顯示,讓讀者了解LCD顯示器與單片機(jī)的接口方法,理解LCD顯示程序的設(shè)計思路。2.任務(wù)要求實現(xiàn)在1602液晶的第一行顯示“WELCOME!”,第二行顯示“WWW.WTC.EDU.CN”。3.電路設(shè)計LCD液晶顯示電路如圖5.6所示,現(xiàn)對接口做簡要說明:液晶1、2端為電源端,15、16為背光電源端,為防止直接加5V電壓會燒壞背光燈,在15腳串入一個10kΩ電阻限流。3端為液晶對比度調(diào)節(jié)端,通過一個1kΩ的可調(diào)電阻來調(diào)節(jié)顯示對比度。1.任務(wù)目的4端為向液晶的控制器寫數(shù)據(jù)或?qū)懨畹倪x擇端,接單片機(jī)的P3.5端口。5端為讀/寫選擇端,此任務(wù)中,只向液晶寫入命令和顯示數(shù)據(jù),所以此端始終為“寫”狀態(tài),即低電平狀態(tài)。6端為使能信號,是操作時必需的信號,接P3.4口。4.程序設(shè)計#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]="WELCOME!";ucharcodetable1[]="WWW.WTC.EDU.CN";sbitlcden=P3^5; //液晶使能端sbitlcdrs=P3^4; //液晶數(shù)據(jù)命令選擇端ucharnum;voiddelay(uintz){uintx,y;for(x=z;x>0;x--) for(y=110;y>0;y--);4端為向液晶的控制器寫數(shù)據(jù)或?qū)懨畹倪x擇端,接單片機(jī)的P3.}voidwrite_command(ucharcom){lcdrs=0; //選擇寫命令模式P0=com; //將要寫的命令字送到數(shù)據(jù)總線上delay(5); //稍做延時以待數(shù)據(jù)穩(wěn)定lcden=1; //使能端給一高電平,因為初始化函數(shù)中已將lcden置為0delay(5);lcden=0; //將使能端置0以完成高脈沖}voidwrite_data(uchardat){lcdrs=1;P0=dat;delay(5);lcden=1;delay(5);lcden=0;}}voidinit(){lcden=0;write_command(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口write_command(0x0c); //設(shè)置開顯示,不顯示光標(biāo)write_command(0x06); //寫一個字符后地址指針加1write_command(0x01); //顯示清0,數(shù)據(jù)指針清0}voidmain(){init();write_command(0x80);for(num=0;num<8;num++){write_data(table[num]);delay(5);}}write_command(0x80+0x40);for(num=0;num<14;num++){write_data(table1[num]);delay(5);}while(1);}write_command(0x80+0x40);
5.3單片機(jī)與LCD液晶顯示器接口
5.3單片機(jī)與LCD液晶顯示器接口5.3.1LCD芯片介紹液晶是一種高分子材料,因為其特殊的物理、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始廣泛應(yīng)用在輕薄型顯示器上。液晶顯示器(LiquidCrystalDisplay,LCD)的主要原理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面并配合背部燈管構(gòu)成畫面。通常,我們把各種液晶顯示器都直接叫做液晶。各種型號的液晶通常是按照現(xiàn)實字符的行數(shù)或液晶點(diǎn)陣的行、列數(shù)來命名的。比如:1602的意思是每行顯示16個字符,一共可以顯示兩行,類似的命名還有0801,0802,1601等。這類液晶通常都是字符型液晶,只能顯示ASCII碼字符,如數(shù)字、大小寫字母、各種符號等。12232液晶屬于圖形型液晶,它是由122列、32行組成,即共有122×32個點(diǎn)來顯示各種圖形,類似的命名還有12864、19264、192128等。根據(jù)客戶需求,廠家還可以設(shè)計出任意數(shù)組合的點(diǎn)陣液晶。5.3.1LCD芯片介紹所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。字符型點(diǎn)陣液晶顯示模塊LCD1602如圖5.7所示。通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其引腳排列如圖5.8所示,引腳定義如表5.2所示。所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行15.3.2LCD1602中的存儲器LCD1602內(nèi)置了DDRAM、CGROM和CGRAM。1.?DDRAM5.3.2LCD1602中的存儲器DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼,共80個字節(jié),其地址和屏幕的對應(yīng)關(guān)系如表5.3所示。也就是說想要在LCD1602屏幕的第一行第一列顯示一個“A”字,就要向DDRAM的00H地址寫入“A”字的代碼。但具體的寫入是要按LCD模塊的指令格式來進(jìn)行的。一行有40個地址,在1602中我們就用前16個就行了。第二行也一樣,用前16個地址。對應(yīng)關(guān)系如表5.4所示。DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼,共82.?CGROM1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點(diǎn)陣字符圖形,如表5.5所示。這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號和日文假名等。每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。2.?CGROM3.CGRAM字符代碼0x00~0x0F為用戶自定義的字符圖形RAM,就是CGRAM了。0x20~0x7F為標(biāo)準(zhǔn)的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。5.3.3LCD1602指令說明LCD1602模塊內(nèi)部有11條控制指令,見表5.6。3.CGRAM1.清屏指令功能:(1)清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的ASCII碼20H。(2)光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方。(3)將地址計數(shù)器(AC)的值設(shè)為0。2.光標(biāo)歸位指令功能:(1)把光標(biāo)撤回到顯示器的左上方。(2)把地址計數(shù)器(AC)的值設(shè)置為0。(3)保持DDRAM的內(nèi)容不變。1.清屏指令3.進(jìn)入模式設(shè)置指令功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。參數(shù)設(shè)定的情況如下所示:位名設(shè)置I/D0?=?寫入新數(shù)據(jù)后光標(biāo)左移1?=?寫入新數(shù)據(jù)后光標(biāo)右移S0?=?寫入新數(shù)據(jù)后顯示屏不移動1?=?寫入新數(shù)據(jù)后顯示屏整體右移1個字3.進(jìn)入模式設(shè)置指令4.顯示開關(guān)控制指令功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下:位名設(shè)置D0?=?顯示功能關(guān)1?=?顯示功能開C0?=?無光標(biāo)1?=?有光標(biāo)B0?=?光標(biāo)閃爍1?=?光標(biāo)不閃爍4.顯示開關(guān)控制指令5.設(shè)定顯示屏或光標(biāo)移動方向指令功能:使光標(biāo)移位或使整個顯示屏幕移位。參數(shù)設(shè)定的情況如下:S/CR/L設(shè)定情況00光標(biāo)左移1格,且AC值減101光標(biāo)右移1格,且AC值加110顯示器上字符全部左移一格,但光標(biāo)不動11顯示器上字符全部右移一格,但光標(biāo)不動5.設(shè)定顯示屏或光標(biāo)移動方向指令6.功能設(shè)定指令功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下:位名設(shè)置DL 0?=?數(shù)據(jù)總線為4位 1?=?數(shù)據(jù)總線為8位N 0?=?顯示1行 1?=?顯示2行F 0?=5?×?7點(diǎn)陣/每字符 1?=?5?×?10點(diǎn)陣/每字符6.功能設(shè)定指令7.設(shè)定CGRAM地址指令功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。8.設(shè)定DDRAM地址指令功能:設(shè)定下一個要存入數(shù)據(jù)的DDRAM的地址。注意:這里我們送地址的時候應(yīng)該是0x80+Address,這也是前面說到寫地址命令的時候要加上0x80的原因。7.設(shè)定CGRAM地址指令9.讀取忙信號或AC地址指令功能:(1)讀取忙碌信號FB的內(nèi)容,F(xiàn)B?=?1表示液晶顯示器忙,暫時無法接收單片機(jī)送來的數(shù)據(jù)或指令;當(dāng)FB?=?0時,液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令。(2)讀取地址計數(shù)器(AC)的內(nèi)容。10.數(shù)據(jù)寫入DDRAM或CGRAM指令一覽功能:(1)將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符。(2)將使用者自己設(shè)計的圖形存入CGRAM。9.讀取忙信號或AC地址指令11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽功能:讀取DDRAM或CGRAM中的內(nèi)容。5.3.4字符型LCD1602的基本操作及時序LCD1602的基本操作有四種:寫命令、寫數(shù)據(jù)、讀狀態(tài)和讀數(shù)據(jù)?;静僮鲿r序見表5.7。11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽
任務(wù)10用矩陣鍵盤控制8路跑馬燈
任務(wù)10用矩陣鍵盤控制8路跑馬燈
1.任務(wù)目的通過本任務(wù),掌握矩陣鍵盤按鍵的識別方法。2.任務(wù)要求采用列掃描法,按下S0時,第1位燈亮;按下S1時,第2位燈亮;按下S2時,第3位燈亮;按下S3時,第4位燈亮;按下S4時,第5位燈亮;按下S5時,第6位燈亮;按下S6時,第7位燈亮;按下S7時,第8位燈亮;按下S8時,第1、2位燈亮;按下S9時,第2、3位燈亮;按下S10時,第3、4位燈亮;按下S11時,第4、5位燈亮;按下S12時,第5、6位燈亮;按下S13時,第6、7位燈亮;按下S14時,第7、8位燈亮;按下S15時,8位燈全亮。3.電路設(shè)計采用矩陣鍵盤控制8路跑馬燈的電路如圖5.9所示,16個矩陣按鍵由P2口的8根I/O線聯(lián)合控制,8路跑馬燈由P1口控制。1.任務(wù)目的4.程序設(shè)計//功能:采用列掃描法,每按下一個按鍵,則由對應(yīng)的1位或2位燈亮。//這種方法基于了單片機(jī)輸出斷口未被置0或1時,均保持高電平(端口為1)的特性//P2.0控制第1行,P2
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年科研項目年度總結(jié)報告
- 2025年自動人行道鋁合金踏板項目投資可行性研究分析報告
- 2025年性能測試板行業(yè)深度研究分析報告
- 2024年固體廢物處理市場評估分析及發(fā)展前景調(diào)研戰(zhàn)略研究報告
- 鋰電池導(dǎo)電涂層項目評價分析報告
- 紙漿乳膠密封件行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 手機(jī)殼調(diào)研報告
- 2025年中國大屏顯示器行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025-2030年中國智能卡門控演示裝置行業(yè)深度研究分析報告
- 2025-2030年中國紡織專用設(shè)備橫機(jī)行業(yè)深度研究分析報告
- IPO項目律師盡職調(diào)查查驗計劃表模版
- 醫(yī)院信息系統(tǒng)HIS知識培訓(xùn)教學(xué)課件-HIS的主要內(nèi)容
- 經(jīng)濟(jì)法通論債權(quán)法總論
- 合成聚氨酯原料及助劑生產(chǎn)項目
- 鼻部整形隆鼻術(shù)精選PPT
- 微信個人簡歷
- 軟件測試jmeter中英文對照
- 反假貨幣培訓(xùn)考試題庫-相關(guān)法律法規(guī)及規(guī)范性文件知識考題
- 鉆井安全操作規(guī)程中英文
- 體育《網(wǎng)球正手擊球》教學(xué)PPT
- 富氫水水素水推廣方法
評論
0/150
提交評論