(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件_第1頁
(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件_第2頁
(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件_第3頁
(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件_第4頁
(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件_第5頁
已閱讀5頁,還剩137頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、正版可修改PPT課件(中職)單片機(jī)應(yīng)用技術(shù)-提高篇(任務(wù)3-4)電子課件單片機(jī)應(yīng)用技術(shù)(提高篇)任務(wù)三 制作電子秒表958,男子100米世界紀(jì)錄。1287,男子110米欄世界紀(jì)錄。在賽跑比賽項目中經(jīng)常用秒表來計時,它精確記錄了運動員完成比賽所用的最短時間。下面我們將循序漸進(jìn)地用單片機(jī)來完成一個秒表制作的實例。項目6 在數(shù)碼管上顯示“123456”項目描述:通過編寫程序,使數(shù)碼管上顯示“123456”能力培養(yǎng)目標(biāo)會編寫八段數(shù)碼管顯示程序會使用protues運行程序能掌握一維數(shù)組的應(yīng)用掌握動態(tài)顯示的方法學(xué)習(xí)組織形式采取以小組為單位互助學(xué)習(xí),有條件的每人一臺電腦,條件有限的可以兩人合用一臺電腦。用仿

2、真實現(xiàn)所需的功能后如果有實物板(或自制硬件電路)可把程序下載到實物上再運行、調(diào)試,學(xué)習(xí)過程鼓勵小組成員積極參與討論。項目實施過程創(chuàng)建硬件電路電路說明51單片機(jī)一般采用+5V電源供電51單片機(jī)的最小系統(tǒng)如前面章節(jié)所示。顯示部分采用8位一體的共陰數(shù)碼管。74HC573為數(shù)據(jù)鎖存器。U1控制段選,U4控制位選。程序編寫程序編寫編寫的程序如下#include#define uint unsigned int#define uchar unsigned charsbit DX=P24;sbit WX=P25;uchar code table= 0 x3f,0 x06,0 x5b,0 x4f,0 x66,

3、0 x6d,0 x7d,0 x07,0 x7f,0 x6f;程序編寫程序編寫編寫的程序如下void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-)程序編寫程序編寫編寫的程序如下void disp()DX=1;WX=0;P0=table1;DX=0;WX=1;P0=0 xdf;delay(2);P0=0 xff;DX=1;WX=0;P0=table2;程序編寫程序編寫編寫的程序如下DX=0;WX=1;P0=0 xef;delay(2);P0=0 xff;DX=1;WX=0;P0=table3;DX=0;WX=1;P0=0 xf7;dela

4、y(2);P0=0 xff;程序編寫程序編寫編寫的程序如下DX=1;WX=0;P0=table4;DX=0;WX=1;P0=0 xfb;delay(2);P0=0 xff;DX=1;WX=0;P0=table5;程序編寫程序編寫編寫的程序如下DX=0;WX=1;P0=0 xfd;delay(2);P0=0 xff;DX=1;WX=0;P0=table6;DX=0;WX=1;P0=0 xfe;delay(2);P0=0 xff;程序編寫程序編寫編寫的程序如下void main()while(1)disp();創(chuàng)建程序文件并生成 .HEX文件打開MEDWIN,新建項目文件“P6”,創(chuàng)建程序文件“P

5、6_1.C”,輸入上述程序,然后按工具欄上的“產(chǎn)生代碼并裝入”按鈕(或按CTRL+F8),此時將在屏幕的構(gòu)建窗口中看到下如圖6-2所示的信息,它代表編譯沒有錯誤、也沒有警告信息,且在對應(yīng)項目文件夾的OUTPUT子目錄中已生成目標(biāo)文件“P6. HEX”。(四)運行程序觀察結(jié)果在Proteus中打開項目6設(shè)計電路“proj6.dsn”,把已編譯所生成的HEX文件下載到單片機(jī)中,同時觀察結(jié)果。如圖6-3所示。如果有實物板可把程序下載到實物上再運行、調(diào)試。也可以根據(jù)圖6-1提供的原理圖與器件清單在萬能板上搭出電路后再把已編譯所生成的HEX文件下載到單片機(jī)中。然后再調(diào)試運行。程序運行圖數(shù)碼管常用來顯示數(shù)

6、字和字母,按結(jié)構(gòu)分為共陰數(shù)碼管和共陽數(shù)碼管兩種,如圖6-4所示。6.1 數(shù)碼管結(jié)構(gòu)6.1.1 數(shù)碼管結(jié)構(gòu)在單片機(jī)構(gòu)成的實際應(yīng)用電路中需要顯示數(shù)字等信息時,所采用的LED數(shù)碼管通常是N位一體的,如二位一體、四位一體等,如圖6-5所示。這樣可以簡化電路、節(jié)省單片機(jī)的I/O線。當(dāng)多位一體時,它們內(nèi)部的公共端是獨立的,而負(fù)責(zé)顯示什么數(shù)字的段線按同類各自連接在一起,獨立的公共端可以控制多位一體中的哪一個數(shù)碼管點亮。我們把連接在一起的段線稱為“段選線”,而把公共端稱為“位選線”,這樣通過單片機(jī)及外部驅(qū)動電路就可以控制任意的數(shù)碼管顯示任意的數(shù)字了。6.1.2 數(shù)據(jù)鎖存器在單片機(jī)應(yīng)用系統(tǒng)中為了節(jié)約使用單片機(jī)的

7、I/O資源,通常在電路中使用了數(shù)據(jù)鎖存器,本例中使用74HC573,即在數(shù)碼管顯示時采用分時復(fù)用的方法,利用P0口既作為段選線又作為位選線,通過數(shù)據(jù)鎖存器將單片機(jī)發(fā)來的數(shù)據(jù)加以鎖存保持,以持續(xù)快速地刷新數(shù)碼管的顯示。圖6-6為數(shù)據(jù)鎖存器74HC573的功能圖及接線圖。由于8051單片機(jī)的I/O一般就是指P0、P1、P2、P3端口,在實際使用中可能還要使用A/D、D/A等資源,P3端口還要作為第二功能使用,所以I/O端口就顯得有些捉襟見肘了。我們可以采用讓I/O端口分時復(fù)用的方法,以達(dá)到節(jié)省I/O資源的目的。從表中可以看出,要讓74HC573具備鎖存功能,則它的輸出允許 應(yīng)接低電平,當(dāng)鎖存端LE

8、為高電平時輸出端Q就跟隨數(shù)據(jù)輸入端D的數(shù)據(jù),而當(dāng)鎖存端LE為低電平時輸出端Q則保持之前的狀態(tài)從而實現(xiàn)數(shù)據(jù)的鎖存。6.2 數(shù)碼管的顯示原理6.2.1 數(shù)碼管靜態(tài)顯示6.2.2 數(shù)碼管動態(tài)顯示采用動態(tài)顯示方式比較節(jié)省I/O端口,硬件電路也較靜態(tài)顯示方式簡單,但其亮度不如靜態(tài)顯示方式,程序較靜態(tài)顯示方式復(fù)雜,而且在顯示位數(shù)較多時,CPU要依次掃描,占用CPU較多的時間。在上面的程序中,我們要在某一位上顯示一個數(shù)字,則使用如下語句:6.3 數(shù)組的使用6.3.1 數(shù)組數(shù)組是有序數(shù)據(jù)的集合,數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型,用一個統(tǒng)一的數(shù)組名和元素號來唯一地確定數(shù)組中的元素。數(shù)組又可以分為一維數(shù)組、

9、二維數(shù)組、三維數(shù)組等。在這里,我們先學(xué)習(xí)一維數(shù)組。一維數(shù)組的定義:類型說明符 數(shù)組名數(shù)組長度=元素1,元素2,元素N;說明:1.數(shù)組名命名規(guī)則和變量名相同,遵循標(biāo)識符命名規(guī)則。2.數(shù)組名后是用方括號括起來的常量表達(dá)式,它表示數(shù)組長度,不能用圓括號。3.花括號內(nèi)表示定義的各個元素初值,各元素初值之間用逗號隔開。一維數(shù)組的引用:數(shù)組必須先定義后使用,C51語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組。數(shù)組元素引用形式為: 數(shù)組名元素號元素號從0開始計6.3.2 單片機(jī)中的存儲器單片機(jī)的存儲器可以分為片內(nèi)存儲器和片外存儲器兩種。因為片外存儲器是需要另外擴(kuò)展的,而且現(xiàn)在使用也不多,所以在此就不再

10、贅述。我們只討論單片機(jī)的內(nèi)部存儲器。單片機(jī)的內(nèi)部存儲器又可分為數(shù)據(jù)存儲器RAM和程序存儲器ROM。一、數(shù)據(jù)存儲器數(shù)據(jù)存儲器主要用作緩沖和數(shù)據(jù)暫存,如用于存放運算中間結(jié)果以及設(shè)置特征標(biāo)志等。MCS-51系列單片機(jī)的內(nèi)部數(shù)據(jù)存儲器存儲空間較小,它是系統(tǒng)的寶貴資源,要合理使用。MCS-51系列單片機(jī)的內(nèi)部RAM共有256個字節(jié)單元,按其功能劃分為兩部分:低128字節(jié)(00H7FH)和高128字節(jié)(80HFFH)地址空間。圖6-10所示為低128字節(jié)單元的配置圖。低128字節(jié)單元是單片機(jī)的真正RAM存儲器,按其用途劃分為寄存器區(qū)、位尋址區(qū)和用戶RAM區(qū)三個區(qū)域。我們在項目2中學(xué)習(xí)了C51常用數(shù)據(jù)類型,

11、接觸到了位類型bit,此類數(shù)據(jù)就是存儲在位尋址區(qū)中,而在C51中定義的變量等,它們的作用域就是在這些RAM中。高128字節(jié)單元是供給專用寄存器使用的,因這些寄存器的功能已作專門規(guī)定,故稱之為專用寄存器,也稱為特殊功能寄存器(Special Function Register)。這些特殊功能寄存器就是我們之前在介紹頭文件時接觸到的東西,它們在C51中的數(shù)據(jù)類型是sfr或者是sbit型的二、程序存儲器程序存儲器用于存放程序及表格常數(shù)。也就是說,那些不需要經(jīng)常變動的數(shù)據(jù)就存放在ROM中,這樣就節(jié)約了對RAM的使用。在前面定義存放字型碼的數(shù)組中就使用了code,它就代表這個數(shù)組中的元素存放在ROM中。

12、因為程序中那些數(shù)碼管共陰顯示的段碼值是不變化的,因此可以把它放在ROM中。單片機(jī)的ROM比RAM大多了,一般51有4KB、52有8KB、54有16KB。在程序存儲器中,某些特定的單元已分配給系統(tǒng)使用,比如0000H單元是系統(tǒng)復(fù)位入口,單片機(jī)復(fù)位后,CPU總是從0000H單元開始執(zhí)行程序。此外,0003H002AH單元均勻地分為五段,被保留用于五個中斷服務(wù)程序或中斷入口。具體地址分配見表6-4所示?!緦崙?zhàn)提高】1.以圖6-1設(shè)計電路為依據(jù)(可直接在項目6所在目錄下打開設(shè)計電路文件“proj6_1.DSN”),要求能在數(shù)碼管上顯示自己的班級-學(xué)號,如13E01-36。請編寫程序、編譯和仿真運行。2

13、.以圖6-1設(shè)計電路為依據(jù)(可直接在項目6所在目錄下打開設(shè)計電路文件“proj6_1.DSN”),要求能在數(shù)碼管上顯示今天的日期,如2012.08.16。編寫程序、編譯和仿真運行。二選擇題1.若要使數(shù)據(jù)鎖存器74HC573具備數(shù)據(jù)鎖存功能,除了將其輸出允許 接低電平,還應(yīng)使其鎖存端LE接( )。A高電平B低電平C任意D以上都可以。2.以下描述正確的是( )。A. 數(shù)組長度是用圓括號括起來的。B. 數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型。C.定義數(shù)組中各個元素時,中間用分號隔開。D.數(shù)組元素引用時,最大元素號即表示數(shù)據(jù)長度。3.在定義數(shù)組uchar code tab=a,b,c,d;后以下描述正

14、確的是( )。A. 數(shù)組長度是3。B. 數(shù)組的第3號元素是字符d。C.該數(shù)組將被存放在數(shù)據(jù)存儲器中。D.該數(shù)組定義是錯誤的。項目7 秒脈沖的產(chǎn)生項目描述: 通過編寫程序,使發(fā)光二極管以1秒速率閃爍(頻率為2Hz)能力培養(yǎng)目標(biāo)會編寫MCS-51單片機(jī)定時器中斷程序能理解MCS-51單片機(jī)定時器相關(guān)知識學(xué)習(xí)組織形式采取以小組為單位互助學(xué)習(xí),有條件的每人一臺電腦,條件有限的可以兩人合用一臺電腦。用仿真實現(xiàn)所需的功能后如果有實物板(或自制硬件電路)可把程序下載到實物上再運行、調(diào)試,學(xué)習(xí)過程鼓勵小組成員積極參與討論。項目實施過程創(chuàng)建硬件電路圖7-1 項目7電路原理圖電路說明51單片機(jī)一般采用+5V電源供

15、電51單片機(jī)的最小系統(tǒng)如前面章節(jié)所示。程序編寫程序編寫編寫的程序如下#include #define uchar unsigned char#define uint unsigned intsbit VD1=P10;uchar cnt;void init()TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;TR0=1;程序編寫程序編寫編寫的程序如下void main() init(); while(1);void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(655

16、36-50000)%256;if(+cnt=20) cnt=0; VD1=VD1; (三)創(chuàng)建程序文件并生成 .HEX文件打開MEDWIN,新建項目文件“P7”,創(chuàng)建程序文件“P7_1.C”,輸入上述程序,然后按工具欄上的“產(chǎn)生代碼并裝入”按鈕(或按CTRL+F8),此時將在屏幕的構(gòu)建窗口中看到下如圖7-2所示的信息,它代表編譯沒有錯誤、也沒有警告信息,且在對應(yīng)項目文件夾的OUTPUT子目錄中已生成目標(biāo)文件“P7. hex”。(四)運行程序觀察結(jié)果在Proteus中打開項目7設(shè)計電路“proj7.dsn”,把已編譯所生成的HEX文件下載到單片機(jī)中,同時觀察結(jié)果。如果有實物板可把程序下載到實物上

17、再運行、調(diào)試。也可以根據(jù)圖7-1提供的原理圖與器件清單在萬能板上搭出電路后再把已編譯所生成的HEX文件下載到單片機(jī)中。然后再調(diào)試運行。7.1 定時器/計數(shù)器的結(jié)構(gòu)與原理7.1.1 定時/計數(shù)器結(jié)構(gòu)8051單片機(jī)內(nèi)部有兩個16位可編程定時/計數(shù)器,稱為定時器0(T0)和定時器1(T1),可通過編程來選擇其作為定時器用或作為計數(shù)器用。此外,工作方式、定時時間、計數(shù)值、啟動、中斷請求等都可以由程序設(shè)定,其邏輯結(jié)構(gòu)如圖7-3所示。定時器0(T0)、定時器1(T1)是16位加法計數(shù)器,分別由兩個8位的專用寄存器組成:定時器0(T0)由TH0和TL0組成,定時器1(T1)由TH1和TL1組成。當(dāng)定時器0或

18、定時器1用作定時器時,對內(nèi)部機(jī)器周期脈沖計數(shù),由于機(jī)器周期是定值,時間也隨之確定。當(dāng)定時器0或定時器1用作計數(shù)器時,對芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計數(shù),每輸入一個脈沖,加法計數(shù)器加1。實質(zhì)上,8051單片機(jī)的定時器/計數(shù)器就是加1計數(shù)器。TMOD、TCON與定時器0、定時器1間通過內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)定定時器的工作方式,TCON用于控制定時器的啟動與停止。7.1.2 定時/計數(shù)器工作原理 從定時/計數(shù)器的邏輯結(jié)構(gòu)圖可知,定時/計數(shù)器實質(zhì)上就是一個加1計數(shù)器,它主要的任務(wù)就是對機(jī)器周期或是外部輸入的脈沖進(jìn)行計數(shù)的操作。當(dāng)定時/計數(shù)器設(shè)定為定時工作方式時

19、,計數(shù)器對內(nèi)部機(jī)器周期進(jìn)行計數(shù),每過一個機(jī)器周期,計數(shù)器加1,直到計滿溢出。定時器的定時時間與系統(tǒng)的振蕩頻率緊密相關(guān)。因MCS-51單片機(jī)的一個機(jī)器周期由12個振蕩脈沖組成,所以,計數(shù)頻率fc=fosc/12。如果單片機(jī)系統(tǒng)采用12MHz晶振,則計數(shù)周期T=1s,這是最短的定時周期,改變定時器的初值可獲取各種定時時間。當(dāng)定時/計數(shù)器設(shè)定為計數(shù)工作方式時,計數(shù)器對來自輸入引腳T0(P3.4)或T1(P3.5)的外部信號計數(shù),外部信號的下降沿將觸發(fā)計數(shù)。每檢測到一個外部信號由1到0的負(fù)跳變,計數(shù)器就加1。CPU檢測一個1到0的負(fù)跳變需要兩個機(jī)器周期,因此最高檢測頻率為振蕩頻率的1/24。7.1.3

20、 定時/計數(shù)器的方式寄存器和控制寄存器一、定時/計數(shù)器控制寄存器TCONTCON位功能: TF1 定時/計數(shù)器1溢出中斷請求標(biāo)志,當(dāng)定時/計數(shù)器1計數(shù)滿產(chǎn)生溢出時,由硬件自動置TF1=1。在中斷允許時,向CPU發(fā)出定時/計數(shù)器1的中斷請求,進(jìn)入中斷服務(wù)程序后,由硬件自動清0。TR1 定時/計數(shù)器1運行控制位。由軟件置1或清0來啟動或關(guān)閉定時/計數(shù)器1。TF0 定時/計數(shù)器0溢出中斷請求標(biāo)志,其功能及操作情況同TF1。TR0 定時/計數(shù)器0運行控制位,其功能及操作情況同TR1。二、定時/計數(shù)器方式寄存器TMODTMOD位功能:GATE 門控位。當(dāng)GATE=0時,軟件控制位TR0或TR1置1即可啟

21、動定時/計數(shù)器;當(dāng)GATE=1時,軟件控制位TR0或TR1需置1,同時還需INT0(P3.2)或INT1(P3.3)為高電平方可啟動定時/計數(shù)器,即允許外部中斷INT0和INT1啟動定時/計數(shù)器。 功能選擇位。 =0時,設(shè)置定時/計數(shù)器工作為定時器方式; =1時,設(shè)置定時/計數(shù)器工作為計數(shù)器方式。M1、M0方式選擇位。定義如下:定時/計數(shù)器有4種不同的工作方式,最常用的是方式1,所以我們僅對方式1做簡單介紹。如圖7-4所示。由圖可知,方式1為16位加法計數(shù)器。當(dāng)?shù)?位計數(shù)器TLn計數(shù)滿時自動向高8位計數(shù)器THn進(jìn)位,而THn計數(shù)滿即溢出時向中斷位TFn進(jìn)位,同時向CPU申請中斷。當(dāng) =0時,電

22、子多路開關(guān)連接12分頻器的輸出,定時/計數(shù)器對機(jī)器周期計數(shù),此時,定時/計數(shù)器為定時器。當(dāng) =1時,電子多路開關(guān)與外部引腳Tn(P3.4或P3.5)相連,當(dāng)外部信號電平發(fā)生由1到0的負(fù)跳變時,計數(shù)器加1,此時,定時/計數(shù)器為計數(shù)器。7.2 定時器的應(yīng)用7.2.1 定時器的容量和初值計算一、定時器容量對于定時/計數(shù)器工作于方式1的情況, T0和T1都是16位的計數(shù)器,最大的計數(shù)容量就是65536。二、定時器初值計算7.2.2定時器的應(yīng)用一、定時器的初始化由于定時/計數(shù)器的功能是由軟件編程確定的,所以,一般在使用定時/計數(shù)器前都要進(jìn)行初始化。初始化步驟如下:1.確定工作方式對方式寄存器TMOD賦值

23、。2.預(yù)置定時或計數(shù)的初值直接將初值寫入TH0、TL0或TH1、TL1。3.根據(jù)需要開啟定時/計數(shù)器中斷直接對中斷允許寄存器IE賦值。4.啟動定時器將TR0或TR1置1。二、定時/計數(shù)器中斷服務(wù)函數(shù)如何做到長時間定時?根據(jù)定時器初值的計算方法,在晶振頻率為12MHz的情況下,我們可以計算出定時器工作在方式1下的最大定時時間為:tmax=(216-0)12/12s=65.536s。那么我們要定時1秒、1分鐘、1小時就沒有辦法了嗎?其實我們可以采用定時器*計數(shù)值的方法來實現(xiàn)長時間的定時。在這里,我們讓單片機(jī)T0定時時間為50ms,那么就需要先給TH0、TL0預(yù)裝一個初值15536,在這個初值的基礎(chǔ)

24、上再計50000個脈沖后,定時器溢出,此時剛好就是50ms中斷一次。當(dāng)需要定時1s時,我們使用變量cnt在程序中產(chǎn)生20次50ms的定時器中斷便認(rèn)為是1s,這樣便可以精確控制較長時間的定時了。【實戰(zhàn)提高】以圖7-1設(shè)計電路為依據(jù)(可直接在項目7所在目錄下打開設(shè)計電路文件“proj7_1.DSN”),要求能使用定時器1控制發(fā)光二極管以2秒速率閃爍?!眷柟虖?fù)習(xí)】一、填空題1.MCS-51單片機(jī)的定時/計數(shù)器有( )個,分別為( )和( )。2.MCS-51單片機(jī)定時/計數(shù)器的內(nèi)部結(jié)構(gòu)由以下四部分組成:( )( )( )( )3.定時器1的中斷入口號是( )。4.啟動T0開始定時是使控制寄存器TCO

25、N的( )置1。二、選擇題1.MCS-51系列單片機(jī)的定時/計數(shù)器T1用作定時方式時是( )A. 對內(nèi)部時鐘頻率計數(shù),一個時鐘周期加1。B. 對內(nèi)部時鐘頻率計數(shù),一個機(jī)器周期加1。C. 對外部輸入脈沖計數(shù),一個時鐘周期加1。D. 對外部輸入脈沖計數(shù),一個機(jī)器周期加1。2.MCS-51系列單片機(jī)的定時/計數(shù)器T1用作計數(shù)方式時計數(shù)脈沖是( )A. 外部計數(shù)脈沖由T1(P3.5)輸入。B. 外部計數(shù)脈沖由內(nèi)部時鐘頻率提供。C. 外部計數(shù)脈沖由T0(P3.42)輸入。D. 以上都可以。3.MCS-51系列單片機(jī)的定時/計數(shù)器T0用作定時方式,采用工作方式1,則工作方式控制字為( )A. TMOD=0

26、 x01B. TMOD=0 x50C. TMOD=0 x10D. TCON=0 x02項目8 制作電子秒表項目描述: 當(dāng)?shù)谝淮伟聪聠?暫停鍵,秒表開始計時;當(dāng)?shù)诙伟聪聠?暫停鍵,秒表暫停計時。當(dāng)按下復(fù)位鍵,秒表顯示回零。計時精度為1%秒。能力培養(yǎng)目標(biāo)會寫?yīng)毩⑹桨存I與單片機(jī)接口的程序能理解獨立式按鍵與單片機(jī)接口原理學(xué)習(xí)組織形式采取以小組為單位互助學(xué)習(xí),有條件的每人一臺電腦,條件有限的可以兩人合用一臺電腦。用仿真實現(xiàn)所需的功能后如果有實物板(或自制硬件電路)可把程序下載到實物上再運行、調(diào)試,學(xué)習(xí)過程鼓勵小組成員積極參與討論。項目實施過程一、創(chuàng)建硬件電路實現(xiàn)此項目的電路原理圖如圖8-1,系統(tǒng)對

27、應(yīng)的元器件清單如表8-1所示。電路說明51單片機(jī)一般采用+5V電源供電51單片機(jī)的最小系統(tǒng)如前面章節(jié)所示。顯示部分如項目6電路。三個獨立式按鍵分別連接單片機(jī)的P3.0、P3.1和P3.2引腳。程序編寫程序編寫編寫的程序如下#include#define uchar unsigned char#define uint unsigned intsbit DX=P24;sbit WX=P25;sbit k1=P30;sbit k2=P31;uint sec,msec;uchar code table= 0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07,

28、 0 x7f,0 x6f,0 xff,0 x79,0 x40;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void init()TMOD=0 x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;EA=1; void disp()DX=1;WX=0;P0=tablesec/10;DX=0;WX=1;P0=0 xf7;delay(2);P0=0 xff;DX=1;WX=0;P0=tablesec%10|0 x80;DX=0;WX=1;P0=0 xfb;delay(2);

29、P0=0 xff;DX=1;WX=0;P0=tablemsec/10;DX=0;WX=1;P0=0 xfd;delay(2);P0=0 xff;DX=1;WX=0;P0=tablemsec%10;DX=0;WX=1;P0=0 xfe;delay(2);P0=0 xff;void keyscan()if(k1=0)delay(10);if(k1=0)while(k1=0);TR0=TR0;if(k2=0)delay(10);if(k2=0)while(k2=0);TR0=0;sec=msec=0;void main() init(); while(1)disp();keyscan();void

30、timer0() interrupt 1TH0=(65536-10000)/256;TL0=(65536-10000)%256;if(+msec=100) msec=0; sec+; if(sec=100)sec=0;(三)創(chuàng)建程序文件并生成 .HEX文件打開MEDWIN,新建項目文件“P8”,創(chuàng)建程序文件“P8_1.C”,輸入上述程序,然后按工具欄上的“產(chǎn)生代碼并裝入”按鈕(或按CTRL+F8),此時將在屏幕的構(gòu)建窗口中看到下如圖8-2所示的信息,它代表編譯沒有錯誤、也沒有警告信息,且在對應(yīng)項目文件夾的OUTPUT子目錄中已生成目標(biāo)文件“P8. Hex”。(四)運行程序觀察結(jié)果在Proteu

31、s中打開項目8設(shè)計電路“proj8.dsn”,把已編譯所生成的HEX文件下載到單片機(jī)中,同時觀察結(jié)果。如果有實物板可把程序下載到實物上再運行、調(diào)試。也可以根據(jù)圖8-1提供的原理圖與器件清單在萬能板上搭出電路后再把已編譯所生成的HEX文件下載到單片機(jī)中。然后再調(diào)試運行。8.1 獨立式按鍵與單片機(jī)的接口8.1.1鍵盤工作原理鍵盤在單片機(jī)應(yīng)用中作為輸入設(shè)備,分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用的硬件編碼器實現(xiàn),并產(chǎn)生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機(jī)鍵盤。而靠軟件編程來識別的稱為非編碼鍵盤。在單片機(jī)組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤。非編碼鍵盤又分為:獨立式鍵盤和行列式(又稱

32、為矩陣式)鍵盤。 在單片機(jī)系統(tǒng)中通常使用機(jī)械觸點式按鍵開關(guān),其主要功能是把機(jī)械上的通斷轉(zhuǎn)換成電氣上的邏輯關(guān)系。也就是說,它能提供標(biāo)準(zhǔn)的TTL邏輯電平,以便與通用數(shù)字系統(tǒng)的邏輯電平相容。8.1.2獨立式按鍵與單片機(jī)的接口獨立式鍵盤的接口電路如圖8-3所示。當(dāng)檢測按鍵時鍵盤作為輸入,每一個按鍵對應(yīng)一根I/O線,各鍵是相互獨立的。圖中按鍵輸入均采用低電平有效。上拉電阻保證了按鍵斷開時,I/O端口線有確定的高電平。如果I/O端口線內(nèi)部有上拉電阻時,外電路可不接上拉電阻。應(yīng)用時,由軟件來識別鍵盤上的鍵是否被按下。當(dāng)某個鍵被按下時,該鍵所對應(yīng)的端口線將由高電平變?yōu)榈碗娖?。即若單片機(jī)檢測到某端口線為低電平,

33、則可判斷出該端口線所對應(yīng)的按鍵被按下。8.2 獨立式按鍵的應(yīng)用8.2.1按鍵的去抖從圖中可看出,理想波形與實際波形之間是有區(qū)別的,實際波形在按下和釋放的瞬間都有抖動現(xiàn)象,這是由按鍵的機(jī)械觸點造成的,抖動時間的長短和按鍵的機(jī)械特性有關(guān),一般為510ms。這種抖動對于人來說是感覺不到的,但對于單片機(jī)而言,這510ms的抖動時間已是一個“漫長”的時間了。雖然只按了一次鍵,但單片機(jī)卻檢測到按了多次鍵,因而容易產(chǎn)生非預(yù)期的結(jié)果。為使單片機(jī)能夠正確地判斷按鍵按下,就必須考慮消除抖動。實現(xiàn)方法:可以使用硬件和軟件的方法。圖8-5 硬件去抖電路圖8-6 按鍵去抖處理流程8.2.2一鍵多能的使用日常生活中我們使

34、用的電器,如電風(fēng)扇、洗衣機(jī)等,它們的操作面板可能很簡潔,只有很少的按鍵,但是功能卻很復(fù)雜。按下某個鍵既可以設(shè)定時間、又可以設(shè)定工作方式等,這是因為這些按鍵具有一鍵多能的作用。我們可以使用switch語句來編寫按鍵掃描的程序。編寫程序,當(dāng)?shù)谝淮伟聪耴1鍵時,LED1亮;第二次按下k1鍵時,LED2亮;第三次按下k1鍵時,LED3亮;第四次按下k1鍵時,LED4亮;第五次按下k1鍵時,返回到LED1亮,依此類推。#include#define uchar unsigned char#define uint unsigned intsbit k1=P30;uchar num,index=0;void

35、 delay(uint xms) /延時子函數(shù)uint i,j;for (i=xms;i0;i-)for (j=125;j0;j-);void keyscan() /按鍵掃描子函數(shù)if(k1=0) /按鍵是否按下?if(k1=0)while(k1=0); /再次判斷按鍵是否按下?num=num+1; if(num=5) /若按鍵計數(shù)值為5,則返回到1num=1; /若按鍵確實被按下了,則計數(shù)值加1?switch(num) /switch語句 case 1:P1=0 xfe; break; /按第一下,LED1亮case 2:P1=0 xfd; break; /按第二下,LED2亮case 3:

36、P1=0 xfb; break; /按第三下,LED3亮case 4:P1=0 xf7; break; /按第四下,LED4亮default:break; void main()num=0;while(1)keyscan();【實戰(zhàn)提高】以圖8-1設(shè)計電路為依據(jù)(可直接在項目8所在目錄下打開設(shè)計電路文件“proj8_1.DSN”),要求每按一次按鍵,則在數(shù)碼管上顯示出按鍵的次數(shù)?!眷柟虖?fù)習(xí)】一填空題1.在單片機(jī)組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤。非編碼鍵盤又分為:( )鍵盤和( )鍵盤。2.switch/case語句中,switch語句后面跟的是( ),而case語句后面跟的是( )。3

37、.在程序中,若要使單片機(jī)停機(jī),可以使用語句( )來實現(xiàn)。二選擇題1.按鍵開關(guān)的結(jié)構(gòu)通常是機(jī)械彈性元件,在按鍵按下和斷開時,觸點在閉合和斷開瞬間會產(chǎn)生接觸不穩(wěn)定,為消除抖動引起的不良后果常采用的方法有( )。A.硬件去抖動B.軟件去抖動C.硬、軟件兩種方法單穩(wěn)態(tài)電路去抖方法2.在程序中判斷獨立按鍵是否被按下時,通常的方法是將按鍵狀態(tài)讀人單片機(jī)。當(dāng)讀入狀態(tài)為( )時,認(rèn)為按鍵被按下了。A.低電平B.高電平C.任意電平D.以上都不可以任務(wù)四:制作可調(diào)電子時鐘在日常生活中我們總是離不開時間,數(shù)字時鐘是生活中很實用的計時設(shè)備。如我們手機(jī)里的時間顯示,火車站、機(jī)場及大型廣場的時間顯示等。一般情況下,數(shù)字時

38、鐘包括時、分、秒3個部分的顯示。這些顯示功能可以由單片機(jī)來控制實現(xiàn),因此本項目我們的最終任務(wù)是設(shè)計制作一個能顯示小時、分鐘、秒的簡易數(shù)字時鐘。項目9 字符型液晶1602顯示“WELCOME TO China”項目描述:編寫程序,在字符型液晶顯示屏上顯示字符等信息。能力培養(yǎng)目標(biāo)會編寫1602字符型液晶顯示程序能了解字符型液晶的工作時序及與MCS-51單片機(jī)的接口原理學(xué)習(xí)組織形式采取以小組為單位互助學(xué)習(xí),有條件的每人一臺電腦,條件有限的可以兩人合用一臺電腦。用仿真實現(xiàn)所需的功能后如果有實物板(或自制硬件電路)可把程序下載到實物上再運行、調(diào)試,學(xué)習(xí)過程鼓勵小組成員積極參與討論。項目實施過程創(chuàng)建硬件電

39、路電路說明51單片機(jī)一般采用+5V電源供電51單片機(jī)的最小系統(tǒng)如前面章節(jié)所示。 顯示部分采用16*2字符型液晶顯示器。程序編寫程序編寫編寫的程序如下#include#define uchar unsigned char #define uint unsigned intsbit RS=P20;sbit RW=P21;sbit EN=P22;uchar num;uchar code table=WELCOME TO CHINA;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void write_cmd(uchar cmd)RW

40、=0;RS=0;EN=0;P0=cmd;delay(5);EN=1;delay(5);EN=0;void write_dat(uchar dat)RW=0;RS=1;EN=0;P0=dat;delay(5);EN=1;delay(5);EN=0;void init()EN=0;write_cmd(0 x38);/16*2顯示,5*7點陣,8位數(shù)據(jù)write_cmd(0 x0c);/開顯示,光標(biāo)不顯示,光標(biāo)不閃爍write_cmd(0 x06);/地址指針加1,不移動write_cmd(0 x01);/請屏write_cmd(0 x80);void main()init();for(num=0;

41、num16;num+)write_dat(tablenum);delay(2);while(1);(三)創(chuàng)建程序文件并生成 .HEX文件打開MEDWIN,新建項目文件“P9”,創(chuàng)建程序文件“P9_1.C”,輸入上述程序,然后按工具欄上的“產(chǎn)生代碼并裝入”按鈕(或按CTRL+F8),此時將在屏幕的構(gòu)建窗口中看到下如圖9-2所示的信息,它代表編譯沒有錯誤、也沒有警告信息,且在對應(yīng)項目文件夾的OUTPUT子目錄中已生成目標(biāo)文件“P9. Hex”。(四)運行程序觀察結(jié)果在Proteus中打開項目9設(shè)計電路“proj9dsn”,把已編譯所生成的HEX文件下載到單片機(jī)中,同時觀察結(jié)果。如圖9-3所示。如果

42、有實物板可把程序下載到實物上再運行、調(diào)試。也可以根據(jù)圖9-2提供的原理圖與器件清單在萬能板上搭出電路后再把已編譯所生成的HEX文件下載到單片機(jī)中。然后再調(diào)試運行。9.1 字符型液晶顯示和接口9.1.1 LCD液晶顯示器液晶是一種高分子材料,因為其特殊的物理、化學(xué)、光學(xué)特性,具有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧等特點,目前廣泛應(yīng)用在輕薄型顯示器上。9.1.2 LCD液晶顯示器的引腳和主要技術(shù)參數(shù)9.2 字符型液晶的應(yīng)用單片機(jī)對1602進(jìn)行操作時,必須嚴(yán)格按照液晶的操作時序來進(jìn)行。與操作時序相關(guān)的引腳主要是RS、RW和EN。對液晶的操作主要是讀寫操作。如表9-3所示。從圖中可以看出,在寫操作

43、時,先設(shè)置RS和RW狀態(tài),再設(shè)置數(shù)據(jù),然后產(chǎn)生使能信號EN的高脈沖,最后復(fù)位RS和RW狀態(tài)。9.2.2 RAM地址映射圖及數(shù)據(jù)指針1.液晶控制器內(nèi)部帶有80B的RAM緩沖區(qū),對應(yīng)關(guān)系如表9-4所示。當(dāng)我們向圖中的000F、404F地址中的任一處寫入顯示數(shù)據(jù)時,液晶都可以立即顯示出來,當(dāng)寫入到1027或5067地址處時,必須通過移屏指令將它們移入可顯示區(qū)域方可正常顯示。2.數(shù)據(jù)指針的設(shè)置液晶控制器內(nèi)部設(shè)有一個數(shù)據(jù)地址指針,用戶可以通過它們訪問內(nèi)部的全部80B的RAM。如表9-5所示?!緦崙?zhàn)提高】1.以圖9-1設(shè)計電路為依據(jù)(可直接在項目9所在目錄下打開設(shè)計電路文件“proj9_1.DSN”),要

44、求在第一行顯示“I LIKE MCU!”,在第二行寫入“”。2.以圖9-1設(shè)計電路為依據(jù)(可直接在項目9所在目錄下打開設(shè)計電路文件“proj9_1.DSN”),要求在第一行從右側(cè)移入字符串“Hello everyone!”?!眷柟虖?fù)習(xí)】一填空題1.在1602液晶控制器中,若需要設(shè)置為4位總線方式,則應(yīng)使功能設(shè)置命令中的DL為( )電平。2.在1602液晶控制器中,若要使顯示屏上的光標(biāo)閃爍,則應(yīng)使功能設(shè)置命令中的B為( )電平。3.在1602液晶控制器中,若要使顯示屏上的光標(biāo)移動方向為右移,則應(yīng)使功能設(shè)置命令中的I/D為( )電平。二選擇題 1.在1602液晶控制器中,若需要設(shè)置為8位總線方式,單行顯示,顯示為510的點陣字符時,應(yīng)設(shè)置的命令字為( ):A.38H B.34H C.28H D.36H 2.在1602液晶控制器中,若需要設(shè)置為4位總線方式,雙行顯示,顯示為57的點陣字符時,應(yīng)設(shè)置的命令字為( ):A.38H B.34H C.28H D.36H項目10 制作可調(diào)電子時鐘項目描述:本項目為項目6至項目9的綜合訓(xùn)練。通過編寫程序,制作一個可以調(diào)整時間的電子時鐘,并顯示在1602字符型液晶上。要求第

溫馨提示

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

評論

0/150

提交評論