基于單片機的流水燈設(shè)計_第1頁
基于單片機的流水燈設(shè)計_第2頁
基于單片機的流水燈設(shè)計_第3頁
基于單片機的流水燈設(shè)計_第4頁
基于單片機的流水燈設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 *課 程 設(shè) 計 報 告 書系 別:機械與電子工程學(xué)院專 業(yè):學(xué) 生 姓 名:學(xué) 號:課程設(shè)計題目:基于單片機的流水燈設(shè)計起 迄 日 期: 課程設(shè)計地點:指 導(dǎo) 教 師:下達任務(wù)書日期: 2013 年 12 月 16 日目錄第一章 設(shè)計背景3第二章 硬件設(shè)計42.1硬件組成42.2 AT89C51引腳功能42.3晶振62.4 復(fù)位狀態(tài)72.5流水燈硬件原理圖82.6 MCS-51系列單片機內(nèi)部采用模塊式結(jié)構(gòu)92.7元件清單92.8程序流程圖10第三章 軟件編程113.1位控法113.2 C語言編程123.2.1 C語言程序123.2.2編程注意事項133.3仿真結(jié)果15實驗總結(jié)16參考文獻:

2、17第一章 設(shè)計背景   單片機的應(yīng)用已經(jīng)廣泛的滲透到國民經(jīng)濟的各個領(lǐng)域,隨著在電子領(lǐng)域尤其是自動化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)正以前所未有的速度被單片機智能控制系統(tǒng)所取代,它已經(jīng)成為工科大學(xué)生的必修課程之一。單片機技術(shù)含有硬軟兩個方面的技術(shù)。硬件是以單片機為核心,再加以其他各元器件組成的電子電路的一個實體。它既有單片機的技術(shù),又有電子類專業(yè)所必須的模擬數(shù)字高頻電子電路的綜合運用。單片機的種類繁多,目前單片機應(yīng)用系統(tǒng)開發(fā)工具也有不少,但同一系列單片機的開發(fā)工具或?qū)嶒炏盗谢鞠嗤?1系列單片機時目前應(yīng)用最廣泛的一種8為單片機之一,它具有

3、體積小功能強成本低應(yīng)用面廣等優(yōu)點。經(jīng)過20多年的推廣與發(fā)展,51系列單片機形成了一個規(guī)模龐大,功能齊全,資源豐富的產(chǎn)品群。當(dāng)今時代是一個新技術(shù)層出不窮的時代,在電子領(lǐng)域尤其是自動化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng),正以前所未見的速度被單片機智能控制系統(tǒng)所取代。單片機具有體積小、功能強、成本低、應(yīng)用面廣等優(yōu)點,可以說,智能控制與自動控制的核心就是單片機。隨著電子技術(shù)的迅速發(fā)展,單片機得到了越來越多的運用。 本設(shè)計用單片機8951結(jié)合LED制作了一種新型的LED流水燈控制系統(tǒng)的設(shè)計,以AT89C51作為主控核心,利用軟件實現(xiàn)對LED流水燈進行控制。本系統(tǒng)具有體積小

4、、硬件少、電路結(jié)構(gòu)簡單及容易操作等優(yōu)點。    本文設(shè)計的是基于單片機89C51的流水燈設(shè)計關(guān)鍵詞:LED AT89C51單片機 控制系統(tǒng) 流水燈 第二章 硬件設(shè)計2.1硬件組成 按照單片機系統(tǒng)擴展與系統(tǒng)配置狀況,單片機應(yīng)用系統(tǒng)可分為最小系統(tǒng)、最小功耗系統(tǒng)及典型系統(tǒng)等。AT89C51單片機是美國ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機,具有豐富的內(nèi)部資源:4kB閃存、128BRAM、32根I/O口線、2個16位定時/計數(shù)器、5個向量兩級中斷結(jié)構(gòu)、2個全雙工的串行口,具有4.255.50V的電壓工作范圍和024MHz工作頻率,使用AT89C5

5、1單片機時無須外擴存儲器。因此,本流水燈實際上就是一個帶有八個發(fā)光二極管的單片機最小應(yīng)用系統(tǒng),即為由發(fā)光二極管、晶振、復(fù)位等電路和必要的軟件組成的單個單片機。2.2 AT89C51引腳功能 圖1 AT89C51引腳圖VCC:供電電壓。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接

6、收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊

7、功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(計時器0外部輸入)P3.5 T1(計時器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫

8、選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。 /EA :當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平

9、時,此間內(nèi)部程序存儲器。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出2.3晶振 晶振,它的基本構(gòu)成大致是:從一塊石英晶體上按一定方位角切下薄片(簡稱為晶片,石英晶體諧振器,簡稱為石英晶體或晶體、晶振;而在封裝內(nèi)部添加IC組成振蕩電路的晶體元件稱為晶體振蕩器。晶振是控制CPU的時鐘頻率的,也就是產(chǎn)生高低電平的周期(產(chǎn)生一個高電平,和一個低電平為一個周期,)一般說來次頻率越高,電腦在單位時間里處理的速度越快晶振本身并不產(chǎn)生振蕩,但它會以一個固定的頻率與外電路發(fā)生諧振,前提是外電路的振蕩頻率必須與晶振的固有振蕩頻率相一致,起碼也要非常接近,否則電路將

10、停振 此次流水燈設(shè)計,我們用1MHZ晶振和30pf的電容,它們組成一個穩(wěn)定的自己振蕩器。電容的大小可以影響震蕩頻率的高低,振蕩器的穩(wěn)定性和起振的快速性。為單片機提供標(biāo)準(zhǔn)時鐘。圖2時鐘電路2.4 復(fù)位狀態(tài)復(fù)位是單片機的初始化操作,其主要功能是將程序計數(shù)器PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化外,當(dāng)程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,也須重新啟動單片機,使其復(fù)位。 單片機復(fù)位后,除P1.0P1.7的端口鎖存器被設(shè)置成FFH、堆棧指針SP設(shè)置成07H和串行口的SBUF無確定值外,其它各專用寄存器包括程序計數(shù)器PC均被設(shè)置成00H。片內(nèi)RAM不受

11、復(fù)位的影響,上電后RAM中的內(nèi)容是隨機的。記住這些特殊功能寄存器的復(fù)位狀態(tài),對熟悉單片機操作,簡短應(yīng)用程序中的初始化部分是十分必要的。 單片機的復(fù)位操作有上電自動復(fù)位和手動按鍵復(fù)位兩種方式。上電自動復(fù)位操作要求接通電源后自動實現(xiàn)復(fù)位操作。如圖所示。上電瞬間由于電容C上無儲能,其端電壓近似為零,RST獲得高電平,隨著電容器C的充電,RST引腳上的高電平將逐漸下降,當(dāng)RST引腳上的電壓小于某一數(shù)值后,單片機就脫離復(fù)位狀態(tài),進入正常工作模式。只要高電平能保持復(fù)位所需要的時間(約兩個機器周期),單片機就能實現(xiàn)復(fù)位。圖3 復(fù)位電路2.5流水燈硬件原理圖其具體硬件組成如圖1所示。 圖4 流水燈硬件原理圖從

12、原理圖中可以看出,如果要讓接在P1.0口的LED1亮起來,那么只要把P1.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾矗绻釉赑1.0口的LED1熄滅,就要把P1.0口的電平變?yōu)楦唠娖剑煌?,接在P1.1P1.7口的其他7個LED的點亮和熄滅的方法同LED1。因此,要實現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1LED8依次點亮、熄滅,8只LED燈便會一亮一暗的做流水燈了。在此我們還應(yīng)注意一點,由于人眼的視覺暫留效應(yīng)以及單片機執(zhí)行每條指令的時間很短,我們在控制二極管亮滅的時候應(yīng)該延時一段時間,否則我們就看不到“流水”效果了。2.6 MCS-51系列單片機內(nèi)部采用模塊式結(jié)構(gòu)其結(jié)構(gòu)組成框圖如圖所示。圖5

13、MCS-51系列單片機組成框圖由圖1可見,MCS-51系列單片機主要由以下部件通過片內(nèi)總線連接而成:中央處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM)、并行輸入/輸出口(P0口P3口)、串行口、定時器/計數(shù)器、中斷控制、總線控制及時鐘電路。2.7元件清單元件規(guī)格數(shù)量電容30pf/1nf2/1電阻8220/10K16/1發(fā)光二極管2v 10mA16單片機芯片AT89C511晶振1MHz1 圖6元件清單表 2.8程序流程圖 程序中LIGHT7為多種亮燈方式結(jié)合循環(huán)延時子程序DELAY為100毫秒延時,延時子程序DELAY1為100毫秒延時端口P1.0P1.07控制的16個發(fā)光二極管亮

14、燈方式程序中有標(biāo)注開 始跳至主程序,設(shè)置外部中斷0有效,電平觸發(fā)主程序等待中斷中斷到來?繼續(xù)等待中斷P1.0=0?P1.1=0?P1.2=0?P1.3=0?P1.4=0?P1.5=0?P1.6=0?中斷?繼續(xù)循環(huán)D1 D2D3D4D5D6D7相應(yīng)亮燈方式圖7程序流程圖第三章 軟件編程 單片機的應(yīng)用系統(tǒng)由硬件和軟件組成,上述硬件原理圖搭建完成上電之后,我們還不能看到流水燈循環(huán)點亮的現(xiàn)象,我們還需要告訴單片機怎么來進行工作,即編寫程序控制單片機管腳電平的高低變化,來實現(xiàn)發(fā)光二極管的一亮一滅。軟件編程是單片機應(yīng)用系統(tǒng)中的一個重要的組成部分,是單片機學(xué)習(xí)的重點和難點。下面我們以最簡單的流水燈控制功能即

15、實現(xiàn)16個LED燈的循環(huán)點亮,來介紹實現(xiàn)流水燈控制的幾種軟件編程方法。3.1位控法這是一種比較笨但又最易理解的方法,采用順序程序結(jié)構(gòu),用位指令控制P1口的每一個位輸出高低電平,從而來控制相應(yīng)LED燈的亮滅。程序如下:ORG0000H LJMPMAINORG0030HMAIN:MOVA,#0FEH;初值11111110送入AMOV30H,#7;30單元作計數(shù)器,初始為左移次數(shù)LEFT:MOVP1,A;A送入P1口(初始點亮P1.0)LCALLDELAY ;延時RLA;循環(huán)左移DJNZ30H,LEFT;未夠7次繼續(xù)左移MOV30H,#7 ;重置計數(shù)器,為右移次數(shù)RIGHT:MOVP1,A;A送入P

16、1口LCALLDELAY;延時RRA;循環(huán)右移DJNZ30H,RIGHT;未夠7次繼續(xù)右移AJMPMAIN DELAY:MOVR5,#195;延時C1:MOVR6,#255DJNZR6,$ DJNZR5,C1 RET END3.2 C語言編程3.2.1 C語言程序 在上個程序中我們是一個個控制P1.0至P1.7端口的每個來實現(xiàn)的,下面我們用c語言程序來控制各個端口賦值來實現(xiàn)P1.0至P1.7的發(fā)光二極管的亮與滅,我們將初始值11111110賦值給led,并將led賦值給P1.0端口,然后每隔100毫秒led左移一位改變P1.1端口,實現(xiàn)P1.0端口的滅和P1.1端口的亮,其他幾個端口按此方法依

17、次執(zhí)行,實現(xiàn)各個端口依次亮與滅,做流水工作。當(dāng)P1.7端口滅時,led又變回11111110,完成流水燈的循環(huán)工作。#include <reg51.h> #include <intrins.h> #define uchar unsigned char void delay_ms(uchar ms); /延時毫秒12M,ms最大值255void main() uchar led; /為P1口賦值的變量 uchar i; /循環(huán)控制變量 while(1) led = 0xfe; /初值為11111110 for(i = 0; i < 7; i+) P1 = led;

18、/led值送入P1口 delay_ms(100); /延時100ms led = _crol_(led, 1); /led值循環(huán)左移1位 for(i = 0; i < 7; i+) P1 = led; /led值送入P1口 delay_ms(100); /延時100ms led = _cror_(led, 1); /led值循環(huán)左移1位 void delay_ms(uchar ms) /延時毫秒12M,ms最大值255 uchar i; while(ms-) for(i = 0 ;i<124; i+); 3.2.2編程注意事項 這里需要說明的是,按從語言編寫的要求,所編制的程序(下

19、稱源程序)之格式和書寫要求必須依下列原則: 每行的格式應(yīng)為:標(biāo)號: 命令 參數(shù) ;注釋 。即一行由四部份組成,各部份的順序不能搞錯,依實際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標(biāo)號時標(biāo)號后面必須有“:”(冒號),而命令語句和參數(shù)之間必須用空格分開,如果命令有多個參數(shù),則參數(shù)與參數(shù)之間必須用“,”(逗號)分開,需要注釋時注釋前必須用“;”(分號),“;”后面的語句可以寫任何字符,包括漢字用于解釋前面的匯編語句,它將不參與匯編,不生成代碼。由于匯編程序?qū)ξ覀冞€不直觀,所以在編寫源程序時,應(yīng)當(dāng)養(yǎng)成多寫注釋的習(xí)慣,這樣有助于今后源程序的閱讀和維護。 標(biāo)號是標(biāo)志程序中某一行的

20、符號名,編譯后標(biāo)號的數(shù)值就是標(biāo)號所在行代碼的地址。在宏匯編ASM51中標(biāo)號的長度不受限制,但標(biāo)號中不能包含:'或其它的一些特殊符號,也不能用漢字,可以用數(shù)字作標(biāo)號,但必須用字母開頭。當(dāng)標(biāo)號作參數(shù)用(如標(biāo)號作轉(zhuǎn)移地址),在命令后面出現(xiàn)時,必須舍去:'(如上面程序中的 AJMP START中的START是不能再有:)。每行只能有一個標(biāo)號,一個標(biāo)號只能用在一處,如果有兩行用了同一個標(biāo)號,則匯編時就會出錯。由于標(biāo)號的長度沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更方便。在源程序中的字母不區(qū)分大小寫,也就是說 start 和 START 是一樣的,請不要用大小寫方式去

21、區(qū)分不同的標(biāo)號。 我們知道了匯編語言程序的規(guī)則,現(xiàn)在就動手編輯源程序吧。馬上啟動Keil單片機集成開發(fā)環(huán)境,建立新工程liu01.UV2,將上面的源程序liu01.asm導(dǎo)入到工程中,設(shè)置好Keil工程的編譯參數(shù),編譯得到hex格式的目標(biāo)文件liu01.hex,用 ISP編程器 將目標(biāo)文件liu01.hex燒寫到AT89S51單片機中,接下來就是將寫好的AT89S51從編程器上取下,放到“ S51增強型單片機實驗板 ”上通電,我們就看到了LED1LED8的"流水"效果了。到此,我們做的流水燈已成功,工作原理也清楚了,我們將發(fā)光二極管的順序改變一下,可以同時將流水燈從&quo

22、t;左向右流"改為從"右向左流",也可以改為"兩邊向內(nèi)流"、"內(nèi)部向外流".,在前面學(xué)習(xí)的程序中我們讓LED流水是去逐個控制P1端口的每個位來實現(xiàn)的,因此程序顯得有點復(fù)雜,下面我們就采用新的思路來編程。新的編程思路如下:我們在程序一開始就給P1口送一個數(shù),這個數(shù)本身就讓P1.0先低,其他位為高,然后讓這個數(shù)據(jù)向高位移動不就實現(xiàn)“流水”效果啦?的確如此!80c51指令中沒有讓P1數(shù)據(jù)移動的指令,但有對累加器ACC中數(shù)據(jù)左移或右移的指令,ACC在指令中常寫為A,累加器A數(shù)據(jù)左移指令為"RLA",累加器數(shù)據(jù)右移

23、指令為"RRA",累加器在數(shù)據(jù)傳輸和數(shù)據(jù)處理過程中作用十分重要,累加器ACC為8位。他可與片內(nèi)所有單字節(jié)寄存器交換數(shù)據(jù),實際上P1和其他端口在單片機中也是一個寄存器。這樣我們可以將需移動的數(shù)據(jù)先放到ACC中,讓其移動,然后將ACC移動后的數(shù)據(jù)再轉(zhuǎn)送到P1口,這樣同樣可以實現(xiàn)“流水”效果。3.3仿真結(jié)果我們將程序加載到proteus中的流水燈電路中,我們就可以看到流水燈的工作,上排8個發(fā)光二極管從左往右依次循環(huán)亮和滅,然后,從右往左依次循環(huán)亮與滅,下排發(fā)光二極管從右往左依次循環(huán)亮與滅,然后,從左往右依次循環(huán)亮和滅。如圖所示 圖8仿真結(jié)果當(dāng)上述程序之一編寫好以后,我們需要使用編

24、譯軟件對其編譯,得到單片機所能識別的二進制代碼,然后再用編程器將二進制代碼寫到AT89C51單片機中,最后連接好電路通電,我們就看到LED1LED8的“流水”效果了。實驗總結(jié)本次實驗我選擇的題目是流水燈的設(shè)計,其實流水燈就是一組燈,然后在控制系統(tǒng)的控制下按照一定的順序和時間來發(fā)亮和熄滅,兩者時間在一定的時間間隔下,就會形成一定的視覺效果。本次實驗主要應(yīng)用的是AT89C51單片機,利用其與晶振電路和復(fù)位電路進行控制發(fā)光二極管的發(fā)光與熄滅。通過本次的課程設(shè)計,使我了解到實踐出真知的正確性,不光如此,這次實際它還讓我更加扎實的掌握了有關(guān)單片機方面的知識。在這次課程設(shè)計中我發(fā)現(xiàn)最主要的還是要有明確的設(shè)計思路,清晰的分析過程有很大的作用。在設(shè)計之前,對所用AT89C51單片機的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,這樣才能很好地完成設(shè)計

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論