第一篇:流水燈實(shí)驗(yàn)報(bào)告
單片機(jī)流水燈實(shí)驗(yàn)
一、任務(wù)
讓8個(gè)LED燈輪流亮起來,實(shí)現(xiàn)流水燈的功能。
二、思路
讓接在P0.0口的LED燈亮起來,那么只要把P0.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾矗绻釉赑0.0口的LED燈熄滅,就要把P0.0口的電平變?yōu)楦唠娖骄涂梢粤恕R獙?shí)現(xiàn)流水燈功能,只要將8個(gè)LED燈依次點(diǎn)亮、熄滅,8只LED燈便會(huì)一亮一暗的做流水燈了。
我們應(yīng)該注意一點(diǎn),由于單片機(jī)執(zhí)行每條指令的時(shí)間很短,我們?cè)诳刂贫O管亮滅的時(shí)候應(yīng)該延時(shí)一段時(shí)間,否則我們就看不到“流水”效果了。
三、步驟
1、用proteus畫電路圖。如下圖:
2、用keil建工程。
1)運(yùn)行keil C51軟件,點(diǎn)擊Project菜單新建項(xiàng)目,選擇為AT89C52的單片機(jī)型號(hào)。然后單擊File選擇New新建程序文件,保存成.c 文件,右擊Source Group1添加入程序文件。2)用C語言編寫程序代碼如下:
#include
void main(void){ unsigned char i;while(1){ for(i=0;i<8;i++){
P0=tmpled[i];
delay(50);} } }
void delay(unsigned char tmp){ unsigned char i,j;i=tmp;while(i){ i--;j=255;{
j--;} } } 3)右擊Target 1打開設(shè)置,Output菜單下勾選上create hex file。
4)調(diào)試運(yùn)行程序后,在proteus中雙擊單片機(jī),添加hex文件,運(yùn)行看到流水的的效果。
四、實(shí)驗(yàn)中遇到的問題。
1、用proteus仿真時(shí)候,發(fā)現(xiàn)錯(cuò)誤:
error variable not found parsing property resistance of RN1-Rnvalue expected for RN1-R(n=1~8)而且led燈亮度十分微弱。可能是接入的電阻太大了。
檢查電路圖發(fā)現(xiàn)排阻的值為RX8,修改為220(自己選擇)后。錯(cuò)誤便沒有了,同時(shí),led燈的亮度也增強(qiáng)了。
2、關(guān)于延時(shí)函數(shù)。
延時(shí)的時(shí)間計(jì)算不太明白。
3、P0=0xfe;是對(duì)單片機(jī)P0口的8個(gè)I/O口同時(shí)進(jìn)行操作,0x后的數(shù)使用十六進(jìn)制表示,fe轉(zhuǎn)換為二進(jìn)制是1111 1110,則P0.0為低電平,對(duì)應(yīng)的led燈亮,其他7個(gè)led燈滅。
第二篇:流水燈實(shí)驗(yàn)報(bào)告(范文)
單片機(jī)流水燈試驗(yàn)
一、實(shí)驗(yàn)?zāi)康模?/p>
1、進(jìn)一步熟悉Keil C51集成開發(fā)環(huán)境調(diào)試功能的使用
2、學(xué)會(huì)自己編寫程序,進(jìn)行編譯、仿真調(diào)試
3、學(xué)會(huì)使用單片機(jī)的P0口作為I/O口去控制外圍電路,實(shí)現(xiàn)LED燈以固定的頻率進(jìn)行閃爍。
二、實(shí)驗(yàn)設(shè)備:
1、PC機(jī)
2、SW-51PROC單片機(jī)綜合實(shí)驗(yàn)平臺(tái)
三、實(shí)驗(yàn)內(nèi)容:
1、編寫一段程序,用單片機(jī)P0口的8個(gè)輸出去控制8個(gè)LED燈,實(shí)現(xiàn)如下功能:
先使8個(gè)LED燈輪流點(diǎn)亮,從左向右移動(dòng),時(shí)間間隔0.5s。以上過程循環(huán)實(shí)現(xiàn)。
四、實(shí)驗(yàn)步驟:
1、實(shí)驗(yàn)原理:
單片機(jī)流水的實(shí)質(zhì)是單片機(jī)各引腳在規(guī)定的時(shí)間逐個(gè)上電,使LED燈能逐個(gè)亮起來但過了該引腳通電的時(shí)間后便滅燈的過程,實(shí)驗(yàn)中使用了單片機(jī)的P2端口,對(duì)8個(gè)LED燈進(jìn)行控制,要實(shí)現(xiàn)逐個(gè)亮燈即將P2的各端口逐一置零,中間使用時(shí)間間隔隔開各燈的亮滅。使用rl或rr a實(shí)現(xiàn)位的轉(zhuǎn)換。A寄存器的位經(jīng)過rr a之后轉(zhuǎn)換如下所示:
A0A1A2A3A4A5A6A7 然后將A寄存器轉(zhuǎn)換一次便送給P2即MOV P2,A便將轉(zhuǎn)換后的數(shù)送到了P2口,不斷循環(huán)下去,便實(shí)現(xiàn)了逐位置一操作。
2、實(shí)驗(yàn)電路圖 +5v1234123412340a1a2a3a4a1a2a3a4a1a2a3a4GND0Vcc1P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7b1b2b3b***C51
3通過仿真實(shí)驗(yàn)正確性
代碼如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP
DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1
DJNZ R1,DEL2 RET End ORG 0000H LJMP MAIN
4、實(shí)驗(yàn)程序 :
ORG 0050H MAIN:MOV R0,#14
MOV DPTR,#TABLE L0:
MOV A,#0 L1:
MOVC A,@DPTR+A
MOV P0,A
ACALL DELAY1
INC A41 DJNZ R0,L1 SJMP L0 DELAY1:
MOV R1,#250 LOOP1:
MOV R2,#250 LOOP2:
NOP
NOP
NOP
NOP
NOP
DJNZ R0,LOOP2
DJNZ R1,LOOP1
RET TABLE: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH END
5、實(shí)驗(yàn)結(jié)果:
五、實(shí)驗(yàn)總結(jié)
這次試驗(yàn)我通過Proteus仿真實(shí)現(xiàn)對(duì)流水燈功能的實(shí)現(xiàn)。受益匪淺,對(duì)80c51的功能和結(jié)構(gòu)有了深層次的了解,我深刻的明白,要想完全了解c51還有一定距離,但我會(huì)一如既往的同困難作斗爭。在實(shí)驗(yàn)中,我遇到了不少困難,比如不知道怎么將程序?qū)戇M(jìn)單片機(jī)中,寫好程序的卻總出錯(cuò),不知道什么原因,原來沒有生成hex文件。這些錯(cuò)誤令我明白以后在試驗(yàn)中要步步細(xì)心,避免出錯(cuò)。
第三篇:多功能流水燈實(shí)驗(yàn)報(bào)告
課程設(shè)計(jì)報(bào)告
設(shè)計(jì)課題:
多功能流水燈
專業(yè)班級(jí):
學(xué)生姓名:
指導(dǎo)教師:
設(shè)計(jì)時(shí)間:
題目 多功能流水燈
一、課程設(shè)計(jì)目的
1、掌握數(shù)字系統(tǒng)的設(shè)計(jì)方法和測試方法。
二、課程設(shè)計(jì)題目(問題)描述和要求
設(shè)計(jì)一個(gè)四模式三路彩燈(紅、綠、黃三種顏色)顯示系統(tǒng)。該系統(tǒng)的顯示模式由外部輸入Z、Y控制,要求開機(jī)自動(dòng)置入初態(tài)后便按規(guī)定模式循環(huán)運(yùn)行。設(shè)各路彩燈均為8個(gè)(紅燈序號(hào)為r1-r8,綠燈序號(hào)為g1-g8,黃燈序號(hào)為y1-y8),各模式規(guī)定如下: XY=00時(shí),系統(tǒng)的顯示模式在以下六個(gè)節(jié)拍間循環(huán):
第一節(jié)拍,依次點(diǎn)亮奇號(hào)紅燈(r1亮→r1、r3亮→r1、r3、r5亮→r1、r3、r5、r7亮),其余燈均滅。
第二節(jié)拍,依次點(diǎn)亮偶號(hào)紅燈,其余燈均滅。第三節(jié)拍,依次點(diǎn)亮奇號(hào)綠燈,其余燈均滅。第四節(jié)拍,依次點(diǎn)亮偶號(hào)綠燈,其余燈均滅。第五節(jié)拍,依次點(diǎn)亮奇號(hào)黃燈,其余燈均滅。第六節(jié)拍,依次點(diǎn)亮偶號(hào)黃燈,其余燈均滅。XY=01時(shí),系統(tǒng)的顯示在第一、二節(jié)拍間循環(huán)。XY=10時(shí),系統(tǒng)的顯示在第三、四節(jié)拍間循環(huán)。XY=11時(shí),系統(tǒng)的顯示在第五、六節(jié)拍間循環(huán)。
三、系統(tǒng)分析與設(shè)計(jì)
根據(jù)課程設(shè)計(jì)題目問題描述和要求,完成:
主要器件:
繪制電路原理圖:確定選用的元件及其封裝形式,完善電路。
原理圖設(shè)計(jì)過程:進(jìn)行電子電路設(shè)計(jì)時(shí),首先要有一個(gè)設(shè)計(jì)方案,而將電路設(shè)計(jì)方案表達(dá)出來的最好方法就是畫出清晰、正確的電路原理圖。根據(jù)設(shè)計(jì)需要選擇出元器件,并把所選用的元器件和相互之間的連接關(guān)系明確地列出,直觀地表達(dá)出設(shè)計(jì)概念。
電路原理圖的基本組成是電子元器件符號(hào)和連接導(dǎo)線,電子元器件符號(hào)包含了該元器件的功能,連接導(dǎo)線則包含了元器件的電氣連接信息,所以電路原理圖設(shè)計(jì)的質(zhì)量好壞直接影響到PCB印制電路板的設(shè)計(jì)質(zhì)量。
繪制原理圖的兩大原則:首先應(yīng)該保證整個(gè)電路原理圖的連線正確,信號(hào)流向清晰,便于閱讀分析和修改;其次應(yīng)該做到元器件的整體布局合理、美觀、實(shí)用。
在Protel中繪制電路原理圖的步驟: 啟動(dòng)原理圖編輯器,新建電路原理圖文件。
設(shè)置原理圖的相關(guān)參數(shù),如圖紙的大小、版面及環(huán)境參數(shù)等。加載元件庫,在圖紙上放置需要的各種元器件。編輯元器件的屬性,并對(duì)元器件進(jìn)行合理的布局調(diào)整。使用導(dǎo)線或網(wǎng)絡(luò)標(biāo)簽對(duì)所有的元器件進(jìn)行電氣意義上的連接。對(duì)電路原理圖進(jìn)行整體的編輯、調(diào)整。保存文檔,打印輸出。
繪制元件庫:為繪制原理圖做補(bǔ)充。有些元件在系統(tǒng)庫文件里可能找不到,我們可以自己動(dòng)手繪制一個(gè)能表示實(shí)際元件的圖形,并將其添加到原理圖中。建議大家從一開始就建立一個(gè)屬于自己的元件庫,以后每設(shè)計(jì)一次電路,當(dāng)遇到?jīng)]有的原件時(shí),就往庫里添加一個(gè)元件,日積月累,自己的元件庫就會(huì)充實(shí)起來,以后繪制原理圖時(shí)就會(huì)非常方便。
繪制PCB封裝:也是為設(shè)計(jì)原理圖做補(bǔ)充。原理圖上的元件僅僅是一個(gè)元件代號(hào),我們可以隨意改變其模樣,但是PCB封裝絕對(duì)不能隨意改動(dòng)。所謂封裝,就是元件在PCB上的實(shí)際焊接點(diǎn),如果焊接點(diǎn)與元件對(duì)應(yīng)不上,那么這塊板子就沒用了。
對(duì)原理圖進(jìn)行編譯:執(zhí)行【項(xiàng)目管理】→【Compile Document ADAC.SCHDOC】,編譯原理圖文件。根據(jù)Massage面板中的錯(cuò)誤和警告提示,修改原理圖,直至編譯通過,生成網(wǎng)絡(luò)表。
在PCB編輯器中,執(zhí)行【設(shè)計(jì)】→【層堆棧管理器】命令,選擇PCB板層結(jié)構(gòu);執(zhí)行【設(shè)計(jì)】→【PCB板形狀】→【重定義PCB板形狀】定義PCB的外觀尺寸,設(shè)置PCB文件的編輯環(huán)境。
設(shè)置PCB的電氣邊界:在PCB編輯器中,單擊【Keep-Out Layer】標(biāo)簽,執(zhí)行【放置】→【禁止布線區(qū)】→【導(dǎo)線】設(shè)置PCB的電氣邊界。
更新PCB文件:在原理圖編輯器內(nèi),執(zhí)行【設(shè)計(jì)】→【Update PCB Document ADAC.PCBDOC】命令,生成【工程變化訂單(ECO)】,在對(duì)話框內(nèi)單擊“使變化生效”按鈕,再單擊“執(zhí)行變化”按鈕,將網(wǎng)絡(luò)表和元件封裝載入到PCB文件中。
設(shè)置布線規(guī)則:在PCB編輯器中,選擇【設(shè)計(jì)】→【規(guī)則】命令,在彈出的【PCB規(guī)則和約束編輯器】對(duì)話框中,重點(diǎn)進(jìn)行元件間距、導(dǎo)線間距、導(dǎo)線寬度、焊盤大小、孔徑大小等規(guī)則設(shè)置。
原件布局:自動(dòng)布局(執(zhí)行【工具】→【放置元件】→【自動(dòng)布局】命令)和手工布局相結(jié)合,擺放元件到適當(dāng)位置。
布線:計(jì)算機(jī)自動(dòng)布線(執(zhí)行【自動(dòng)布線】→【全部對(duì)象】命令,并選擇布線策略)或手工布線。
DRC(Design Rule Check設(shè)計(jì)規(guī)則檢查)校驗(yàn)和違規(guī)項(xiàng)修改:執(zhí)行【工具】→【設(shè)計(jì)規(guī)則檢查】命令,在彈出的【設(shè)計(jì)規(guī)則檢查器】對(duì)話框中,分別設(shè)置【Report Options】和【Rules To Check】文件夾下的相關(guān)選項(xiàng),然后單擊“運(yùn)行設(shè)計(jì)規(guī)則檢查”按鈕,運(yùn)行批處理DRC。
敷銅:執(zhí)行【放置】→【覆銅】命令,在彈出的對(duì)話框中設(shè)置覆銅屬性,包括填充模式、導(dǎo)線寬度、網(wǎng)格尺寸、連接網(wǎng)絡(luò)及刪除死銅等。
文件保存,輸出打印:保存、打印各種報(bào)表文件及PCB制作文件。
2、將打印好的電路圖紙通過高溫印刷到已給的覆銅板上,再將電路板通過腐蝕制作成線路板,將線路板打孔。1)把圖紙印刷到覆銅板上
四.系統(tǒng)調(diào)試過程中出現(xiàn)的主要問題
現(xiàn)有的元件庫中沒有設(shè)計(jì)所需的芯片元件庫。為了解決這個(gè)問題,我上網(wǎng)尋找解決方案,并向老師請(qǐng)教,發(fā)現(xiàn)可以自己創(chuàng)建一個(gè)集成元件庫。首先啟動(dòng) protel dxp,在菜單中點(diǎn)擊file—new—library--schematic library。新建一個(gè)原理圖庫文件。點(diǎn)擊菜單file—save,為原理圖庫文件取個(gè)名字,然后自己選要用的圖形和引腳,畫至成功之后放置到sheet1.SchDoc文件中。
五.系統(tǒng)運(yùn)行報(bào)告與結(jié)論 Pcb圖如圖所示
腐蝕好的電路板如圖所示
六.總結(jié)
1、打開PCB編輯軟件Proteus 7.4 的ARES。
在Proteus ISIS 編輯環(huán)境下,選擇“Tools”--“ Netlist to ARES ” 或是單擊工具欄中的圖標(biāo)按鈕,即可進(jìn)入PCB設(shè)計(jì)軟件ARES界面。當(dāng)然也可直接運(yùn)行Proteus 7.4 ARES 軟件進(jìn)入其編輯界面。
放置焊盤
在編輯界面中應(yīng)根據(jù)元件的引腳間距放置焊盤及元件所占空間的大小畫元件的邊框。
在ARES
軟
件
界
面
中
點(diǎn)
擊
左
側(cè)工具欄中的或圖標(biāo)用于放置焊盤,這時(shí)在對(duì)象選擇器中列出了所有焊盤的外徑和內(nèi)徑的尺寸,我們選擇S/C-70-30(其中S表示正方形焊盤,C表示圓形焊盤,70為焊盤的外徑尺寸,30為內(nèi)徑的尺寸即鉆孔直徑)如下圖:
如果列表中沒有該尺寸的焊盤,可單擊列表上的圖標(biāo)新建焊盤,在彈出的對(duì)話框中輸入焊盤的名稱及選擇焊盤的形狀后點(diǎn)擊確定,如下圖:
在接著彈出的對(duì)話框中設(shè)置好焊盤參數(shù)后單擊確定即可完成焊盤的新建,如下圖:
現(xiàn)在我們開始放置焊盤,將第一個(gè)焊盤放在原點(diǎn)處(即X=0;Y=0),如下圖:
2、分配引腳編號(hào)
右鍵單擊某一個(gè)焊盤,在彈出的下拉列表中選擇“Edit Properties / 編輯屬性”項(xiàng),在彈出的“Edit Single Pin/編輯引腳”對(duì)話框中按下圖進(jìn)行設(shè)置。按照同樣的方法可完成其它焊盤的設(shè)置。
3、添加元件邊框
完成了焊盤放置,接著需要根據(jù)元件的實(shí)際大小添加邊框。單擊左側(cè)工具欄中的并將左下
角
當(dāng)
前
層
改
為
絲
印
圖標(biāo),層,在編輯區(qū)內(nèi)按照實(shí)際尺寸畫一個(gè)元件邊框,如下圖
4、放置封裝原點(diǎn)
點(diǎn)擊左側(cè)工具欄中的圖標(biāo),在左側(cè)列表框中選擇“ORIGIN”,單擊第一個(gè)焊盤,確定為封裝的原點(diǎn)。如下圖:
5、放置元件“REF”
在左側(cè)列表框中選擇“REFERENCE”,在元件邊框中單擊添加“REF”。如下圖:
6、保存元件封裝
單擊右鍵并拖動(dòng)鼠標(biāo)指針,將整個(gè)設(shè)計(jì)完成的封裝選中,然后選擇“Library / 庫”? “Makepackage / 創(chuàng)建封裝”菜單項(xiàng),彈出創(chuàng)建封裝對(duì)話框,按下圖進(jìn)行設(shè)置即可。
對(duì)電子工藝的理論有了初步的系統(tǒng)了解。我們了解到了測試普通元件與電路元件的技巧、印制電路板圖的設(shè)計(jì)制作與工藝流程作用等。這些知識(shí)不僅在課堂上有效,對(duì)以后的電子工藝課的學(xué)習(xí)有很大的指導(dǎo)意義,在日常生活中更是有著現(xiàn)實(shí)意義。二.對(duì)自己的動(dòng)手能力是個(gè)很大的鍛煉。實(shí)踐出真知,縱觀古今,所有發(fā)明創(chuàng)造無一不是在實(shí)踐中得到檢驗(yàn)的。沒有足夠的動(dòng)手能力,就奢談在未來的科研尤其是實(shí)驗(yàn)研究中有所成就。在實(shí)習(xí)中,我鍛煉了自己動(dòng)手技巧,提高了自己解決問題的能力。
七.參考書目
1、Protel 2004電路設(shè)計(jì)入門與應(yīng)用
2、Protel dxp
3、Protel99教程
第四篇:嵌入式系統(tǒng) 流水燈、按鍵、定時(shí)器實(shí)驗(yàn)報(bào)告
嵌入式系統(tǒng)應(yīng)用
實(shí)驗(yàn)報(bào)告
姓
名: 學(xué)
號(hào): 學(xué)
院: 專
業(yè): 班
級(jí): 指導(dǎo)教師:
實(shí)驗(yàn)
1、流水燈實(shí)驗(yàn)
1.1實(shí)驗(yàn)要求
編程控制實(shí)驗(yàn)板上LED燈輪流點(diǎn)亮、熄滅,中間間隔一定時(shí)間。
1.2原理分析
實(shí)驗(yàn)主要考察對(duì)STM32F10X系列單片機(jī)GPIO的輸出操作。
參閱數(shù)據(jù)手冊(cè)可知,通過軟件編程,GPIO可以配置成以下幾種模式: ◇輸入浮空 ◇輸入上拉 ◇輸入下拉 ◇模擬輸入 ◇開漏輸出 ◇推挽式輸出
◇推挽式復(fù)用功能 ◇開漏式復(fù)用功能
根據(jù)實(shí)驗(yàn)要求,應(yīng)該首先將GPIO配置為推挽輸出模式。
由原理圖可知,單片機(jī)GPIO輸出信號(hào)經(jīng)過74HC244緩沖器,連接LED燈。由于74HC244的OE1和OE2都接地,為相同電平,故A端電平與Y端電平相同且LED燈共陽,所以,如果要點(diǎn)亮LED,GPIO應(yīng)輸出低電平。反之,LED燈熄滅。
1.3程序分析
軟件方面,在程序啟動(dòng)時(shí),調(diào)用SystemInit()函數(shù)(見附錄1),對(duì)系統(tǒng)時(shí)鐘等關(guān)鍵部分進(jìn)行初始化,然后再對(duì)GPIO進(jìn)行配置。
GPIO配置函數(shù)為SZ_STM32_LEDInit()(見附錄2),函數(shù)中首先使能GPIO時(shí)鐘:
RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);然后配置GPIO輸入輸出模式:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 再配置GPIO端口翻轉(zhuǎn)速度: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 最后將配置好的參數(shù)寫入寄存器,初始化完成: GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure)。
初始化完成后,程序循環(huán)點(diǎn)亮一個(gè)LED并熄滅其他LED,中間通過Delay()函數(shù)進(jìn)行延時(shí),達(dá)到流水燈的效果(程序完整代碼見附錄3)。
實(shí)驗(yàn)程序流程圖如下:
硬件方面,根據(jù)實(shí)驗(yàn)指南,將實(shí)驗(yàn)板做如下連接:
1.3實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)
二、按鍵實(shí)驗(yàn)
2.1實(shí)驗(yàn)要求
利用STM32讀取外部按鍵狀態(tài),按鍵按下一次產(chǎn)生一次外部中斷在中斷處理函數(shù)中使按鍵所對(duì)應(yīng)的燈亮起。
2.2原理分析
實(shí)驗(yàn)主要考察對(duì)STM32F10X系列單片機(jī)GPIO外部中斷功能的使用。
STM32F107VCT一共有5組GPIO,分別是PA[15:0]、PB[15:0]、PC[15:0]、PD[15:0]、PE[15:0]。STM32的所有GPIO都可以作為中斷輸入源,單片機(jī)通過復(fù)用的方式使其對(duì)處理器來說來自 GPIO 的一共有 16 個(gè)中斷Px[15:0]。具體實(shí)現(xiàn)是PA[0]、PB[0]、PC[0]、PD[0]和PE[0]共享一個(gè)GPIO中斷;PA[1]、PB[1]、PC[1]、PD[1]和PE[1]共享一個(gè)GPIO中斷;……PA[15]、PB[15]、PC[15]、PD[15]和PE[15]共享一個(gè)GPIO中斷。以下圖片為以EXTI0為例的外部中斷/事件線路映像:
要產(chǎn)生中斷,必須先配置好并使能中斷線。根據(jù)需要的邊沿檢測設(shè)置2個(gè)觸發(fā)寄存器,同時(shí)在中斷屏蔽寄存器的相應(yīng)位寫‘1’允許中斷請(qǐng)求。當(dāng)外部中斷線上發(fā)生了期待的邊沿時(shí),將產(chǎn)生一個(gè)中斷請(qǐng)求,對(duì)應(yīng)的掛起位也隨之被置‘1’。在掛起寄存器的對(duì)應(yīng)位寫’1’,將清除該中斷請(qǐng)求。
要把IO口作為外部中斷輸入,有以下幾個(gè)步驟:
(1)初始化 IO 口為輸入。這一步設(shè)置要作為外部中斷輸入的IO口的狀態(tài),可以設(shè)置為上拉/下拉輸入,也可以設(shè)置為浮空輸入,但浮空的時(shí)候外部一定要帶上拉,或者下拉電阻。否則可能導(dǎo)致中斷不停的觸發(fā)。在干擾較大的地方,就算使用了上拉/下拉,也建議使用外部上拉/下拉電阻,這樣可以一定程度防止外部干擾帶來的影響。
(2)開啟IO口復(fù)用時(shí)鐘,設(shè)置IO口與中斷線的映射關(guān)系。STM32的IO口與中斷線的對(duì)應(yīng)關(guān)系需要配置外部中斷配置寄存器EXTICR,這樣我們要先開啟復(fù)用時(shí)鐘,然后配置IO口與中斷線的對(duì)應(yīng)關(guān)系。才能把外部中斷與中斷線連接起來。
(3)開啟與該IO口相對(duì)的線上中斷/事件,設(shè)置觸發(fā)條件。這一步,我們要配置中斷產(chǎn)生的條件,STM32可以配置成上升沿觸發(fā),下降沿觸發(fā),或者任意電平變化觸發(fā),但是不能配置成高電平觸發(fā)和低電平觸發(fā)。這里根據(jù)自己的實(shí)際情況來配置。同時(shí)要開啟中斷線上的中斷,這里需要注意的是:如果使用外部中斷,并設(shè)置該中斷的EMR位的話,會(huì)引起軟件仿真不能跳到中斷,而硬件上是可以的。而不設(shè)置EMR,軟件仿真就可以進(jìn)入中斷服務(wù)函數(shù),并且硬件上也是可以的。建議不要配置EMR位。
(4)配置中斷分組(NVIC),并使能中斷。這一步,我們就是配置中斷的分組以及使能,對(duì)STM32的中斷來說,只有配置了 NVIC 的設(shè)置,并開啟才能被執(zhí)行,否則是不會(huì)執(zhí)行到中斷服務(wù)函數(shù)里面去的。
(5)編寫中斷服務(wù)函數(shù)。這是中斷設(shè)置的最后一步,中斷服務(wù)函數(shù),是必不可少的,如果在代碼里面開啟了中斷,但是沒編寫中斷服務(wù)函數(shù),就可能引起硬件錯(cuò)誤,從而導(dǎo)致程序崩潰。所以在開啟了某個(gè)中斷后,應(yīng)為該中斷編寫服務(wù)函數(shù)。在中斷服務(wù)函數(shù)里面編寫要執(zhí)行的中斷后的操作,并很據(jù)情況判斷是否要對(duì)中斷產(chǎn)生的標(biāo)志位進(jìn)行清零。
由原理圖可知,按鍵未按下時(shí),GPIO讀到的為高電平,按鍵按下后,IO口接地,產(chǎn)生一個(gè)電平跳變,所以外部中斷觸發(fā)方式應(yīng)該設(shè)置為下降沿觸發(fā)。
2.3程序分析
LED燈的點(diǎn)亮與實(shí)驗(yàn)一中相同,不過多贅述。程序首先對(duì)按鍵進(jìn)行初始化,初始化函數(shù)為GPIO_KEY_Config()(見附錄4),配置過程與實(shí)驗(yàn)一中GPIO配置基本一致。由于此處GPIO需要采集外界按鍵信號(hào),故GPIO模式應(yīng)該為調(diào)整為內(nèi)部上拉電阻輸入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU。
然后執(zhí)行GPIO中斷初始化函數(shù)KEY_EXIT_Init()(見附錄5),首先將連接按鍵的IO口與EXTI線鏈接到一起:
GPIO_EXTILineConfig(GPIO_KEY1_EXTI_PORT_SOURCE,GPIO_KEY1_EXTI_PIN_SOURCE);
然后將觸發(fā)方式設(shè)置為下降沿觸發(fā)并寫入中斷配置寄存器,并使能中斷: EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure)。
之后進(jìn)行中斷分組配置及中斷優(yōu)先級(jí)配置,函數(shù)為InterruptConfig()(見附錄6)。配置過程較為復(fù)雜,涉及到搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的概念。程序首先將所有外部中斷歸為NVIC_PriorityGroup_2,即2位搶占優(yōu)先級(jí)和2位響應(yīng)優(yōu)先級(jí):
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
然后將所有外部中斷信號(hào)的搶占優(yōu)先級(jí)規(guī)定為0、1、2,使其可以相互區(qū)別,并將配置好的參數(shù)寫入對(duì)應(yīng)寄存器中,完成配置:
NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY2_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY3_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_Init(&NVIC_InitStructure)。
初始化完成后,程序進(jìn)入等待按鍵中斷觸發(fā)狀態(tài),一旦按鍵按下,則進(jìn)入中斷服務(wù)函數(shù)EXTI9_5_IRQHandler()(見附錄7)中。在函數(shù)中對(duì)LED燈進(jìn)行點(diǎn)亮、熄滅操作,并重置中斷產(chǎn)生標(biāo)志位。
實(shí)驗(yàn)流程圖如下(主函數(shù)代碼見附錄8):
硬件連接方式如下圖所示:
2.3實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)
三、定時(shí)器實(shí)驗(yàn)
3.1實(shí)驗(yàn)要求
利用STM32的通用定時(shí)器 TIM5 產(chǎn)生一個(gè)1S的中斷,在中斷函數(shù)中實(shí)現(xiàn) LED1、LED2、LED3、LED4同時(shí)翻轉(zhuǎn)的效果。
3.2原理分析
實(shí)驗(yàn)主要考察對(duì)STM32F10X系列單片機(jī)定時(shí)器的使用。
實(shí)驗(yàn)中使用的STM32F107單片機(jī)有多達(dá)10個(gè)定時(shí)器,包括:
◇多達(dá)4個(gè)16位定時(shí)器,每個(gè)定時(shí)器有多達(dá)4個(gè)用于輸入捕獲/輸出比較/PWM 或脈沖計(jì)數(shù)的通道和增量編碼器輸入
◇1個(gè)16位帶死區(qū)控制和緊急剎車,用于電機(jī)控制的 PWM 高級(jí)控制定時(shí)器
◇2個(gè)獨(dú)立的看門狗定時(shí)器(獨(dú)立的和窗口型的)
◇系統(tǒng)時(shí)間定時(shí)器:24 位自減型計(jì)數(shù)器
◇2個(gè) 16 位基本定時(shí)器用于驅(qū)動(dòng)DAC
根據(jù)時(shí)鐘樹可知,系統(tǒng)時(shí)鐘經(jīng)過分頻之后,進(jìn)入TIM5的時(shí)鐘模塊入口,在經(jīng)過預(yù)分頻處理,才供給TIM5作時(shí)鐘使用。預(yù)分頻器的系數(shù)為:TIMx_PSC,當(dāng)TIMx_PSC = 0時(shí)表示不分頻,則TIM5定時(shí)器的時(shí)鐘
用CK_CNT =模塊入口時(shí)鐘72MHz;當(dāng)TIMx_PSC = 1時(shí)表示不分頻,則TIM5定時(shí)器的時(shí)鐘用CK_CNT=模塊入口時(shí)鐘36MHz;以此類推。公式為:CK_CNT =fCK_PSC/(PSC[15:0]+1),其中PSC最大為65535。
其次是TIM5計(jì)數(shù)器計(jì)數(shù)值的設(shè)置,TIM5計(jì)數(shù)器以CK_CNT為時(shí)鐘計(jì)數(shù),向下計(jì)數(shù)到0或向上計(jì)數(shù)到設(shè)定值(TIMx_ARR)則產(chǎn)生中斷。以向上計(jì)數(shù)為例,從 0 開始計(jì)數(shù)到設(shè)定值TIMx_ARR 時(shí)產(chǎn)生中斷。要產(chǎn)生一秒一次中斷則要使計(jì)數(shù)器的值乘以預(yù)分頻的值=系統(tǒng)時(shí)鐘72MHz,其中計(jì)數(shù)器的值和預(yù)分頻值都必須小于65535。我們使預(yù)分頻值為7200,計(jì)數(shù)器值為10000,則7200 * 10000 = 72,000,000即72M。其中拆分方法很多35000*2000 = 72,000,000,只要注意計(jì)數(shù)器的值和預(yù)分頻值都必須小于65535即可。當(dāng)計(jì)數(shù)值溢出后,會(huì)改變計(jì)數(shù)溢出標(biāo)志位,并產(chǎn)生定時(shí)器中斷,實(shí)驗(yàn)中使用其產(chǎn)生中斷來進(jìn)行LED燈翻轉(zhuǎn)。
3.3程序分析
LED初始化部分與實(shí)驗(yàn)一相同,完成初始化后,點(diǎn)亮所有LED燈。定時(shí)器配置函數(shù)為TIM5_Init()(見附錄6)。配置函數(shù)首先使能計(jì)數(shù)器時(shí)鐘:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); 然后自動(dòng)裝載計(jì)數(shù)值,計(jì)數(shù)從0開始:
TIM_TimeBaseStructure.TIM_Period =(1001); 并將計(jì)數(shù)器設(shè)置為向上計(jì)數(shù):
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 最后寫入計(jì)時(shí)器配置寄存器,完成配置:
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure)。
配置完成后,還要對(duì)計(jì)數(shù)器溢出標(biāo)志位進(jìn)行清零,并打開溢出中斷,使能計(jì)數(shù)器以開始計(jì)數(shù)。
TIM_ClearITPendingBit(TIM5, TIM_IT_Update);TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);TIM_Cmd(TIM5, ENABLE)。
定時(shí)器配置完成并使能后,計(jì)數(shù)器開始工作,當(dāng)?shù)竭_(dá)預(yù)設(shè)的計(jì)數(shù)值之后,產(chǎn)生中斷信號(hào)。系統(tǒng)在進(jìn)行相關(guān)配置后可以響應(yīng)定時(shí)器產(chǎn)生的中斷,中斷配置函數(shù)為NVIC_Configuration()(見附錄7)。函數(shù)首先將中斷向量表首地址置于0x08000000:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000); 然后使能TIM5中斷:
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;最后將配置參數(shù)寫入中斷控制寄存器,完成配置: NVIC_Init(&NVIC_InitStructure)。
一旦中斷產(chǎn)生,系統(tǒng)會(huì)對(duì)中斷產(chǎn)生響應(yīng),暫停所有正在執(zhí)行的低優(yōu)先級(jí)任務(wù)且將任務(wù)信息和數(shù)據(jù)壓入對(duì)應(yīng)對(duì)戰(zhàn)區(qū),并進(jìn)入中斷服務(wù)函數(shù)TIM5_IRQHandler()(見附錄8)中進(jìn)行處理。
在中斷服務(wù)函數(shù)中判斷并清除了中斷標(biāo)志位,以便定時(shí)器下一次計(jì)數(shù)中斷產(chǎn)生。函數(shù)中調(diào)用了LED_Spark()函數(shù)(見附錄9),實(shí)現(xiàn)了LED的閃爍。
程序流程圖如下:
硬件連接方式如下圖所示:
實(shí)驗(yàn)
四、按鍵中斷控制LED燈定時(shí)閃爍
4.1實(shí)驗(yàn)要求
綜合實(shí)驗(yàn)一、二、三,利用STM32讀取外部按鍵狀態(tài),按鍵按下一次產(chǎn)生一次外部中斷在中斷處理函數(shù)中使按鍵所對(duì)應(yīng)的燈閃爍,閃爍間隔通過定時(shí)器定時(shí)控制。其中,SKEY1控制LED1以1S為間隔,閃爍3次,SKEY2控制LED2以2S為間隔閃爍3次,SKEY3控制LED3以3S為間隔,閃爍3次。
4.2原理分析
實(shí)驗(yàn)需要用到STM32的GPIO輸入輸出操作,GPIO外部中斷和內(nèi)部定時(shí)器中斷。在以上三個(gè)實(shí)驗(yàn)中,對(duì)各個(gè)部分都已經(jīng)進(jìn)行過詳盡的解釋,這里不再贅述。此實(shí)驗(yàn)需要將以上實(shí)驗(yàn)做綜合,并對(duì)時(shí)序進(jìn)行調(diào)整。難點(diǎn)為,對(duì)GPIO外部中斷和定時(shí)器內(nèi)部中斷的處理,即如何確定兩種不同中斷的優(yōu)先級(jí)。
這里的使用的方法是,將所有按鍵外部中斷置于中斷分組2,即NVIC_PriorityGroup_2中。將所有按鍵中斷搶占優(yōu)先級(jí)置為0,即最高級(jí)別中斷,響應(yīng)優(yōu)先級(jí)置分別置為1、2、3,相互區(qū)別。將定時(shí)器中斷搶占優(yōu)先級(jí)置為1,相應(yīng)優(yōu)先級(jí)社會(huì)中低于按鍵中斷,使其可以被按鍵信號(hào)中斷計(jì)時(shí),并刷新LED閃爍狀態(tài)。
4.3程序分析
這在程序初始化階段,分別對(duì)LED、按鍵外部中斷和定時(shí)器中斷進(jìn)行初始化。主函數(shù)如下:
int main(void){ /* LED初始化 */ LED_config();/* LED閃爍? */ Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();Delay(3000000);Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();Delay(3000000);Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();/* 按鍵初始化 */ GPIO_KEY_Config();/* 按鍵外部中斷初始化 */ KEY_EXIT_Init();/* 外部中斷向量初始化 */ InterruptConfig();/* 定時(shí)器5初始化 */ TIM5_Init();/* 定時(shí)器中斷初始化 */ NVIC_Configuration();/* 等待中斷觸發(fā) */ while(1){ } } 初始化完成后,等待中斷觸發(fā)。一旦按鍵按下,觸發(fā)外部中斷,則進(jìn)入外部中斷服務(wù)函數(shù),函數(shù)中將判斷哪一個(gè)按鍵被按下,記錄按下的按鍵,然后給定時(shí)器清零并開始計(jì)數(shù),且清零外部中斷標(biāo)志位。
第五篇:單片機(jī)流水燈課程設(shè)計(jì)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
基于AT89C51單片機(jī)的流水燈 引言
1.1 課題簡介
單片機(jī)全稱叫單片微型計(jì)算機(jī)(Single Chip Microcomputer),是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系統(tǒng)。
目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械了。單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,大致可分如下幾個(gè)范疇:在智能儀器儀表上的應(yīng)用,例如精密的測量設(shè)備;在工業(yè)控制中的應(yīng)用,用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng),例如工廠流水線的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等;在家用電器中的應(yīng)用可從手機(jī),電話機(jī)、小型程控交換機(jī)、樓宇自動(dòng)通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動(dòng)電話,集群移動(dòng)通信,無線電對(duì)講機(jī)等。單片機(jī)在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用,例如醫(yī)用呼吸機(jī),各種分析儀,監(jiān)護(hù)儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等;在各種大型電器中的模塊化應(yīng)用,如音樂集成單片機(jī),看似簡單的功能,微縮在純電子芯片中(有別于磁帶機(jī)的原理),就需要復(fù)雜的類似于計(jì)算機(jī)的原理。
本設(shè)計(jì)著重在于分析計(jì)算器軟件和開發(fā)過程中的環(huán)節(jié)和步驟,并從實(shí)踐經(jīng)驗(yàn)出發(fā)對(duì)計(jì)算器設(shè)計(jì)做了詳細(xì)的分析和研究。本系統(tǒng)就是充分利用了8051芯片的I/O引腳。系統(tǒng)以采用MCS-51系列單片機(jī)Intel8051為中心器件來設(shè)計(jì)LED流水燈系統(tǒng),實(shí)現(xiàn)8個(gè)LED霓虹燈的左、右循環(huán)顯示,并實(shí)現(xiàn)循環(huán)的速度可調(diào)。
1.2 設(shè)計(jì)目的
(1)學(xué)習(xí)基本理論在實(shí)踐中綜合運(yùn)用的初步經(jīng)驗(yàn),掌握電路設(shè)計(jì)的基本方法、設(shè)計(jì)步驟,培養(yǎng)綜合設(shè)計(jì)與調(diào)試能力。
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
(2)掌握匯編語言程序設(shè)計(jì)方法。
(3)培養(yǎng)實(shí)踐技能,提高分析和解決實(shí)際問題的能力。
1.3 設(shè)計(jì)任務(wù)及要求
(1)彩燈用8個(gè)發(fā)光二極管代替。
(2)電路具有控制彩燈點(diǎn)亮右移、左移、全亮及全滅等功能。(3)彩燈兩點(diǎn)移動(dòng)時(shí)間間隔為0.5秒。總體設(shè)計(jì)思路
2.1設(shè)計(jì)思路
本課題使用AT89C51單片機(jī)時(shí)無須外擴(kuò)存儲(chǔ)器。因此,本流水燈實(shí)際上就是一個(gè)帶有八個(gè)發(fā)光二極管的單片機(jī)最小應(yīng)用系統(tǒng),即為由發(fā)光二極管、晶振、復(fù)位、電源等電路和必要的軟件組成的單個(gè)單片機(jī)。
如果要讓接在P1.0口的LED1亮起來,那么只要把P1.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾矗绻釉赑1.0口的LED1熄滅,就要把P1.0口的電平變?yōu)楦唠娖剑煌恚釉赑1.1~P1.7口的其他7個(gè)LED的點(diǎn)亮和熄滅的方法同LED1。因此,要實(shí)現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1~LED8依次點(diǎn)亮、熄滅,8只LED燈便會(huì)一亮一暗的做流水燈了。同樣的道理,可以讓8個(gè)燈左移點(diǎn)亮,全亮、全滅。
在此我們還應(yīng)注意一點(diǎn),由于人眼的視覺暫留效應(yīng)以及單片機(jī)執(zhí)行每條指令的時(shí)間很短,我們?cè)诳刂贫O管亮滅的時(shí)候應(yīng)該延時(shí)一段時(shí)間,否則我們就看不到“流水”效果了。
2.2 系統(tǒng)結(jié)構(gòu)框圖
系統(tǒng)機(jī)構(gòu)框圖如圖1所示。
開關(guān)輸入AT89C51單片機(jī)圖1 系統(tǒng)結(jié)構(gòu)框圖
流水燈樣式 2.3 系統(tǒng)程序流程圖
系統(tǒng)程序總流程圖如圖2所示。
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
開始讀入四個(gè)開關(guān)的狀態(tài)否判斷開關(guān)狀態(tài)燈左移點(diǎn)亮燈右移點(diǎn)亮燈全亮燈全滅燈流動(dòng)運(yùn)行或全亮全滅結(jié)束
圖2 系統(tǒng)框圖 設(shè)計(jì)步驟
3.1硬件設(shè)計(jì)
硬件系統(tǒng)是指構(gòu)成微機(jī)系統(tǒng)的實(shí)體和裝置,通常由運(yùn)算器、控制器、存儲(chǔ)器、輸入接口電路和輸入設(shè)備、輸出接口電路和輸出設(shè)備等組成。單片機(jī)實(shí)質(zhì)上是一個(gè)硬件的芯片,在實(shí)際應(yīng)用中,通常很難直接和被控對(duì)象進(jìn)行電氣連接,必須外加各種擴(kuò)展接口電
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
路、外部設(shè)備、被控對(duì)象等硬件和軟件,才能構(gòu)成一個(gè)單片機(jī)應(yīng)用系統(tǒng)。本設(shè)計(jì)選用以AT89S51單片機(jī)為主控單元。顯示部分:8個(gè)LED燈循環(huán)亮滅。
3.2單片機(jī)時(shí)鐘電路
時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào),單片機(jī)本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地按時(shí)序進(jìn)行工作。
在MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳X1,輸出端為引腳X2,在芯片的外部跨接晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個(gè)穩(wěn)定的自激振蕩器。此電路采用12MHz的石英晶體。時(shí)鐘電路如圖3所示。
圖3 時(shí)鐘電路圖
3.3復(fù)位電路
電阻的作用是用于上電復(fù)位的,VCC以上電,由于電容兩端電壓不能突變,所以RST上為高電平,然后電容放電,RST就為低電平了,還可以用手動(dòng)復(fù)位,此電路應(yīng)用自動(dòng)復(fù)位。復(fù)位電路如圖4所示。
圖4 復(fù)位電路圖
3.4控制電路
控制電路用于控制工作電路的工作情況,根據(jù)要求來控制電路,本電路的控制電路用來控制流水燈的工作情況,當(dāng)按下1、2、3、4各個(gè)開關(guān)時(shí),電路具有左移、右移、全亮、全沒的功能,具體的控制電路如圖5所示。
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
圖5 開關(guān)電路圖
3.5工作電路
(1)工作電路就是根據(jù)總的電路的指令,來反應(yīng)工作情況。本電路的流水燈電路具體的如圖6所示。
圖6 流水燈電路圖
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
(2)根據(jù)各個(gè)模塊的功能及他們的信號(hào)傳輸,連接電路如圖7所示。
圖7 整體電路圖 軟件設(shè)計(jì)
4.1設(shè)計(jì)要求
本系統(tǒng)的功能就時(shí)實(shí)現(xiàn)流水燈的循環(huán)點(diǎn)亮,主要有四個(gè)功能,第一,按下第一個(gè)按鈕,彩燈向上點(diǎn)亮循環(huán),按下第二個(gè),彩燈向下循環(huán)點(diǎn)亮,按下第三個(gè),彩燈全滅,按下第四個(gè),彩燈全亮。彩燈用8個(gè)發(fā)光二極管代替。電路具有的控制彩燈點(diǎn)亮右移、左移、全亮及全滅的功能用按鍵切換彩燈狀態(tài),彩燈兩點(diǎn)移動(dòng)時(shí)間間隔為0.5秒。
4.2源程序見附錄Ⅰ
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告 軟件調(diào)試
軟件調(diào)試一般分為以下四個(gè)階段:
1、編寫程序并查錯(cuò);
2、在匯編語言的編譯系統(tǒng)中編譯源程序
3、對(duì)程序進(jìn)行編譯連接,并及時(shí)發(fā)現(xiàn)程序中存在的錯(cuò)誤;
4、改正錯(cuò)誤。
在軟件調(diào)試過程中,對(duì)出現(xiàn)的錯(cuò)誤進(jìn)行了認(rèn)真的分析和修改,多次調(diào)試成功后,能夠很好的達(dá)到既定的設(shè)計(jì)效果。
此系統(tǒng)可以改進(jìn)為可以通過對(duì)開關(guān)的調(diào)節(jié)來控制流水燈電路具有控制彩燈點(diǎn)亮右移、左移、全亮及全滅等功。心得體會(huì)
經(jīng)過一段時(shí)間的努力,我們順利的完成了這次單片機(jī)課設(shè)。這是一個(gè)磨練意志的過程。從課題的選擇開始,計(jì)算器的設(shè)計(jì)、硬件和軟件系統(tǒng)的設(shè)計(jì)、到最后的Proteus軟件仿真完成,這其中經(jīng)歷了很多困難,但是更重要的是在這個(gè)過程中我得到了很大的鍛煉。一方面通過C51單片機(jī)等一些器件的設(shè)計(jì)讓我學(xué)習(xí)和掌握了單片機(jī)技術(shù)的基礎(chǔ)知識(shí)和技術(shù)要點(diǎn),也使以前學(xué)的很多知識(shí)都得到了運(yùn)用;另一方面在用Proteus軟件畫電路圖時(shí),然后再轉(zhuǎn)換成一維的WORD中進(jìn)行編輯,這個(gè)過程中讓我掌握了計(jì)算機(jī)輔助的設(shè)計(jì)技術(shù)。當(dāng)然,這是一個(gè)需要不斷的嘗試,不斷的校核,不斷的修改,最后完成一個(gè)合理的設(shè)計(jì)的過程。需要的是細(xì)心和耐心。在很大程度上培養(yǎng)了我拼搏的工作精神。使我受益匪淺,更加明確了自己專業(yè)的方向。
通過本次課設(shè),我不僅學(xué)到了關(guān)于單片機(jī)技術(shù)方面的許多專業(yè)知識(shí),同時(shí)也讓我感覺到團(tuán)隊(duì)合作的重要性。其實(shí)如何有效和快速的找到資料也是課設(shè)給我的啟發(fā),利用好圖書館和網(wǎng)絡(luò),是資源的到最好的利用。與他人交流思想是取得成功的關(guān)鍵,在交流中,不僅強(qiáng)化了自己原有的知識(shí)體系,也擴(kuò)展了自己的思維。課設(shè)是一個(gè)通過思考、發(fā)問、自己解惑并動(dòng)手、提高的過程。我會(huì)在以后的學(xué)習(xí)中不斷學(xué)習(xí),積累經(jīng)驗(yàn),完善自己。
對(duì)于這次單片機(jī)課程設(shè)計(jì)不僅鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上沒有學(xué)到過的知識(shí),掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡單的編程。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,例如對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,學(xué)習(xí)了單片機(jī)匯編語言。
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
參考文獻(xiàn)
[1] 王思明,張金敏,茍軍年等著.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì).北京:科學(xué)出版社,2012 [2] 譚浩強(qiáng)著.C程序設(shè)計(jì)(第四版).北京:清華大學(xué)出版社,2010 [3] 馮博琴,吳寧著.微型計(jì)算機(jī)原理與接口技術(shù)(第3版).北京:清華大學(xué)出版社,2011
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
附 錄Ⅰ
源程序:
START:
START1:
LOOP1:
CJNE:
SHOW1:
LOOP2:
SHOW2:
LOOP3:
LOOP4:
DELAY: D0: D1:
D2:
ORG 0000H
AJMP START
ORG 0030H
MOV SP,#60H
MOV DPTR,#TAB
JNB P0.0,LOOP1 JNB P0.1,LOOP2 JNB P0.2,LOOP3 JNB P0.3,LOOP4 AJMP START1
CLR A
MOVC A,@A+DPTR A,#11111111B,SHOW1 AJMP START
MOV P1,A
ACALL DELAY
INC DPTR
AJMP LOOP1
MOV A,#09H
MOVC A,@A+DPTR
CJNE A,#00000000B,SHOW2 AJMP START
MOV P1,A
ACALL DELAY
INC DPTR
AJMP LOOP2
MOV A,#08H
MOVC A,@A+DPTR MOV P1,A
AJMP START
MOV A,#11H
MOVC A,@A+DPTR MOV P1,A
AJMP START
MOV R0,#10
MOV R1,#200 MOV R2,#123 NOP DJNZ R2,D2 DJNZ R1,D1 DJNZ R0,D0
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
RET TAB:
DB 11111110B DB 11111101B DB 11111011B DB 11110111B DB 11101111B DB 11011111B DB 10111111B DB 01111111B DB 11111111B DB 01111111B DB 10111111B DB 11011111B DB 11101111B DB 11110111B DB 11111011B DB 11111101B DB 11111110B DB 00000000B
END