濟(jì)南大學(xué)單片機(jī)課設(shè)_第1頁(yè)
濟(jì)南大學(xué)單片機(jī)課設(shè)_第2頁(yè)
濟(jì)南大學(xué)單片機(jī)課設(shè)_第3頁(yè)
濟(jì)南大學(xué)單片機(jī)課設(shè)_第4頁(yè)
濟(jì)南大學(xué)單片機(jī)課設(shè)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 濟(jì)南大學(xué)單片機(jī)原理及應(yīng)用設(shè)計(jì)報(bào)告信息科學(xué)與工程學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目 交通燈控制 課程名稱 單片機(jī)原理及應(yīng)用 2016年7月13日 濟(jì)南大學(xué)單片機(jī)原理及應(yīng)用設(shè)計(jì)報(bào)告 目錄摘要2第一章 設(shè)計(jì)目的與要求3第二章 設(shè)計(jì)方案42.1 電源提供方案42.2 顯示界面方案42.3 輸入方案4第三章 單片機(jī)硬件系統(tǒng)電路設(shè)計(jì)53.1 總體設(shè)計(jì)53.3顯示及其驅(qū)動(dòng)模塊:6第四章 系統(tǒng)軟件設(shè)計(jì)104.1軟件總體設(shè)計(jì)104.2軟件主要子程序設(shè)計(jì):1117第五章 仿真結(jié)果191.溫度設(shè)計(jì)仿真電路如示:19圖1 溫度仿真電路圖192. 溫度仿真電路圖倒計(jì)時(shí)和紅綠燈設(shè)計(jì)仿真電路19圖2 溫度仿真電路圖倒計(jì)時(shí)和紅綠燈設(shè)

2、計(jì)仿真電路193.總體設(shè)計(jì)仿真電路20圖4 總體仿真電路圖20第六章 設(shè)計(jì)總結(jié)21附錄22 第 1 頁(yè) 摘要 本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤、LED顯示、交通燈演示系統(tǒng)組成。系統(tǒng)包括人行道、左轉(zhuǎn)、右轉(zhuǎn)、以及基本的交通燈的功能。系統(tǒng)除基本交通燈功能外,還具有倒計(jì)時(shí)、時(shí)間設(shè)置、緊急情況處理、分時(shí)段調(diào)整信號(hào)燈的點(diǎn)亮?xí)r間以及根據(jù)具體情況手動(dòng)控制等功能。隨著社會(huì)經(jīng)濟(jì)的發(fā)展,城市交通問(wèn)題越來(lái)越引起人們的關(guān)注。人、車、路三者關(guān)系的協(xié)調(diào),已成為交通管理部門需要解決的重要問(wèn)題之一。城市交通控制系統(tǒng)是用于城市交通數(shù)據(jù)監(jiān)測(cè)、交通信號(hào)燈控制與交通疏導(dǎo)的計(jì)算機(jī)綜合管理系統(tǒng),它是現(xiàn)代城市交通監(jiān)控指揮系統(tǒng)中最重要的組成部分。關(guān)鍵

3、詞:?jiǎn)纹瑱C(jī);交通燈;溫度顯示;倒計(jì)時(shí)顯示第 1 頁(yè) 第一章 設(shè)計(jì)目的與要求 要求:顯示時(shí)間,溫度,能通過(guò)按鍵設(shè)置初值。采用匯編或C語(yǔ)言編程。 具體要點(diǎn)如下: 1、 以AT89S51單片機(jī)為核心設(shè)計(jì)交通燈,掌握單片機(jī)的軟件設(shè)計(jì)及調(diào)試方法。 2、時(shí)間定時(shí):本項(xiàng)目為典型的LED顯示和中斷定時(shí)電路。利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。 3、交通規(guī)則:東西向通行時(shí)間為80s,南北向通行時(shí)間為60s,緩沖時(shí)間為3s。對(duì)兩個(gè)方向分別顯示紅、綠、黃燈,并顯示相應(yīng)的剩余時(shí)間。值得注意的是,A方向紅燈時(shí)間=B方向綠燈時(shí)間+黃燈緩沖時(shí)間。 4、溫度: DS18B20傳感器進(jìn)行采集、轉(zhuǎn)換數(shù)據(jù)

4、。 5、顯示:要求用動(dòng)態(tài)數(shù)碼管或靜態(tài)數(shù)碼管。 第二章 設(shè)計(jì)方案 本設(shè)計(jì)以單片機(jī)為核心,以LED數(shù)碼管作為倒計(jì)時(shí)指示,根據(jù)設(shè)計(jì)的要求考慮了各功能模塊的幾種設(shè)計(jì)方案,以求最佳方案,實(shí)現(xiàn)實(shí)時(shí)顯示系統(tǒng)各種狀態(tài),系統(tǒng)還增設(shè)緊急情況處理及高峰期時(shí)間時(shí)間調(diào)整,以提高效率,緩減交通擁擠。系統(tǒng)總體設(shè)計(jì)框圖如圖所示。 單片機(jī)最小系統(tǒng) 溫度 鍵 盤輸 入 模 塊 倒計(jì)時(shí)時(shí)間顯示 電源交通燈(LED顯示)2.1 電源提供方案 為使模塊穩(wěn)定工作,須有可靠電源。本次設(shè)計(jì)考慮了兩種電源方案:方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會(huì)使系統(tǒng)復(fù)雜,且可能影響電路

5、電平。方案二:采用單片機(jī)控制模塊提供電源。該方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,選擇第二種方案。2.2 顯示界面方案 該系統(tǒng)要求完成倒計(jì)時(shí)功能?;谏鲜鲈?,本次設(shè)計(jì)考慮了兩種方案:方案一:完全采用點(diǎn)陣式LED顯示。這種方案功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等,但實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作。方案二:完全采用數(shù)碼管顯示。這種方案優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,可以完成倒計(jì)時(shí)功能。缺點(diǎn)是功能較少,只能顯示有限的符號(hào)和數(shù)碼字符。根據(jù)本設(shè)計(jì)的要求,方案二已經(jīng)滿足了要求,所以本次設(shè)計(jì)采用方案二以實(shí)現(xiàn)系統(tǒng)的顯示功能。2.3 輸入方案這里同樣討論了兩種方案:方案一:采用815

6、5擴(kuò)展I/O口、鍵盤及顯示等。該方案的優(yōu)點(diǎn)是使用靈活可編程,并且有RAM及計(jì)數(shù)器。若用該方案,可提供較多I/O口,但操作起來(lái)稍顯復(fù)雜。方案二:直接在I/O口線上接上按鍵開關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的端口資源還比較多,我們使用四個(gè)按鍵,分別是P0.6、P2.4、P1.6、P3.7依次完成南北強(qiáng)行、東西強(qiáng)行重置倒計(jì)時(shí)等功能。由于該系統(tǒng)是對(duì)交通燈及數(shù)碼管的控制,只需用單片機(jī)本身的I/O口就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及RAM已經(jīng)夠用,故選擇方案二。 第三章 單片機(jī)硬件系統(tǒng)電路設(shè)計(jì) 硬件設(shè)計(jì)是整個(gè)系統(tǒng)的基礎(chǔ),要考慮的方方面面很多,除了實(shí)現(xiàn)交通燈基本功能以外,主要還要考慮如下幾個(gè)因素:系統(tǒng)穩(wěn)定度

7、;軟件編程的易實(shí)現(xiàn)性;系統(tǒng)其它功能及性能指標(biāo);因此硬件設(shè)計(jì)至關(guān)重要?,F(xiàn)從各功能模塊的實(shí)現(xiàn)逐個(gè)進(jìn)行分析探討。3.1 總體設(shè)計(jì) 本設(shè)計(jì)以單片機(jī)為控制核心,采用模塊化設(shè)計(jì),共分以下幾個(gè)功能模塊:?jiǎn)纹瑱C(jī)控 制系統(tǒng)、鍵盤及狀態(tài)顯示、倒計(jì)時(shí)模塊、溫度顯示等。 溫度采集選用DS18B20芯片。 單片機(jī)作為整個(gè)硬件系統(tǒng)的核心,它既是協(xié)調(diào)整機(jī)工作的控制器,又是數(shù)據(jù)處理器。它由單片機(jī)振蕩電路、復(fù)位電路等組成。 鍵盤及狀態(tài)顯示,開關(guān)鍵盤輸入交通燈初始時(shí)間,通過(guò)單片機(jī)P1輸入到系統(tǒng)。 系統(tǒng)采用雙數(shù)碼管倒計(jì)時(shí)計(jì)數(shù)功能,最大顯示數(shù)字99。3.2單片機(jī)最小系統(tǒng)1振蕩電路 AT89C51是內(nèi)部具有振蕩電路的單片機(jī),只需在18

8、腳和19腳之間接上石英晶體,給單片機(jī)加工作所需直流電源,振蕩器就開始振蕩起來(lái)。振蕩電路就為單片機(jī)工作提供了所需要的時(shí)鐘脈沖信號(hào),是單片機(jī)的內(nèi)部電路、單片機(jī)的內(nèi)部程序(若有)開始工作。振蕩電路不工作,整個(gè)單片機(jī)電路都不能正常工作。AT89C51常外接6MHz、12MHz的石英晶體,18腳和19腳分別對(duì)地接了一個(gè)20pF的電容,目的是防止單片機(jī)自激。若從18腳輸入外部時(shí)鐘脈沖,則19腳接地。2復(fù)位電路 復(fù)位電路就是在RST端(9腳)外接的一個(gè)電路,目的是使單片機(jī)上的電開始工作時(shí),內(nèi)部電路從初始狀態(tài)開始工作,或者在工作中人為讓單片機(jī)重新從初始狀態(tài)開始工作。在時(shí)鐘工作的情況下,只要復(fù)位引腳高電平保持在

9、兩個(gè)機(jī)器周期以上的時(shí)間,AT89C51便能完成系統(tǒng)重置的各項(xiàng)工作,使得內(nèi)部特殊功能寄存器的內(nèi)容均被設(shè)置成已知狀態(tài),并且從地址0000H處讀入程序代碼而執(zhí)行程序。單片機(jī)最小系統(tǒng)電路如圖所示: 單片機(jī)最小系統(tǒng)電路原理圖3.3顯示及其驅(qū)動(dòng)模塊:1.鍵盤與狀態(tài)顯示功能:鍵盤在本設(shè)計(jì)中用于緊急情況的手動(dòng)控制裝置,以及定時(shí)時(shí)間的設(shè)置等功能,起到了不可缺少的重要作用。當(dāng)定時(shí)器定時(shí)為1秒時(shí)程序跳轉(zhuǎn)到時(shí)間顯示及信號(hào)燈顯示子程序,它將依次顯示信號(hào)燈時(shí)間,同時(shí)一直顯示信號(hào)燈的顏色,這時(shí)在返回定時(shí)子程序定時(shí)1秒,在顯示黃燈的下一個(gè)時(shí)間,這樣依次把所有的時(shí)間顯示完后在重新給時(shí)間計(jì)數(shù)器賦初值,重新進(jìn)入循環(huán)。按鍵設(shè)計(jì)仿真電

10、路如圖所示: 按鍵設(shè)計(jì)仿真電路 2.紅綠燈顯示: 東西、南北兩干道交于一個(gè)十字路口,各個(gè)路口有一個(gè)交通燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行。黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換,且黃燈燃亮?xí)r間為東西、南北兩干道的公共停車時(shí)間。設(shè)東西道比南北道的車流量大,指示燈燃亮的方案如表: 80s 3s 60s 3s . 東西道 綠燈亮 黃燈亮 紅燈亮 紅燈亮 . 南北道 紅燈亮 紅燈亮 綠燈亮 黃燈亮 .說(shuō)明: (1)當(dāng)東西方向?yàn)榫G燈,此道車輛通行;南北方向?yàn)榧t燈,南北道車輛禁止通過(guò),行人通行時(shí)間為80秒。 (2)黃燈閃爍3秒,警示車輛和行人紅、綠燈的狀態(tài)即將切換。 (3)當(dāng)東西

11、方向?yàn)榧t燈,此道車輛禁止通行,東西道行人可通過(guò);南北道為綠燈,此道車輛通過(guò),行人禁止通行,時(shí)間為60秒。 (4) A方向紅燈時(shí)間=硬件設(shè)計(jì)是整個(gè)系統(tǒng)的基礎(chǔ),要考慮的方方面面很多,除了實(shí)現(xiàn)交通燈基本功能以外,主要還要考慮如下幾個(gè)因素:系統(tǒng)穩(wěn)定度;軟件編程的易實(shí)現(xiàn)性;系統(tǒng)其它功能及性能指標(biāo);因此硬件設(shè)計(jì)至關(guān)重要?,F(xiàn)從各功能模塊的實(shí)現(xiàn)逐個(gè)進(jìn)行分析探討。3. 倒計(jì)時(shí)計(jì)數(shù)功能: 利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。用共陽(yáng)數(shù)碼管進(jìn)行動(dòng)態(tài)顯示。 定時(shí)器內(nèi)部結(jié)構(gòu): 方式寄存器: 方式寄存器TMOD是一個(gè)逐位定義的8位寄存器,是只能字節(jié)尋址的寄存器,字節(jié)地址為89H。 其格式如下: 4

12、. 數(shù)碼管動(dòng)態(tài)顯示 數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒(méi)有選通的數(shù)碼管就不會(huì)亮。通過(guò)分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過(guò)程中,每位數(shù)碼管

13、的點(diǎn)亮?xí)r間為12ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。本次設(shè)計(jì)選用共陽(yáng)數(shù)碼管如下圖所示: 5.溫度測(cè)量功能: 本次采用 DS18B20芯片進(jìn)行溫度采集系統(tǒng)設(shè)計(jì)  DS18B20的性能特點(diǎn)如下:獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能無(wú)須外部器件;  可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.0-5.5; 溫

14、度以9或12位數(shù)字讀數(shù);  零待機(jī)功耗;  用戶可定義報(bào)警設(shè)置;  報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;  負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作;  DS18B20詳細(xì)引腳功能描述如下表所示 序號(hào) 名稱 引腳功能描述 1 GND 電源地 2 DQ 數(shù)字信號(hào)輸入/輸出端 3 VDD外接供電電源輸入端(在寄生電源接線方式時(shí)接地)DS18B20的測(cè)溫原理:器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;

15、高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來(lái)決定,每次測(cè)量前,首先將55所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對(duì)應(yīng)的一個(gè)基數(shù)值。  減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直

16、到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過(guò)程,直到溫度寄存器值大致被測(cè)溫度值。 DS18B20可以采用兩種方式供電: 一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源供電方式,單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來(lái)完成對(duì)總線的上拉。當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10us。 本次設(shè)計(jì)采用寄生電源供電方式,即VDD端

17、接地。 第四章 系統(tǒng)軟件設(shè)計(jì)4.1軟件總體設(shè)計(jì)軟件總體設(shè)計(jì)主要完成各部分的軟件控制和協(xié)調(diào)。本系統(tǒng)主程序模塊主要完成的工作是對(duì)系統(tǒng)的初始化,發(fā)送顯示數(shù)據(jù),同時(shí)對(duì)鍵盤進(jìn)行掃描,等待外部中斷,以及根據(jù)所需要的功能進(jìn)行相應(yīng)的操作。其流程圖如圖 開始 初始化 鍵掃描,取鍵值 判斷當(dāng)前狀態(tài)溫度顯示紅綠燈 倒計(jì)時(shí) 設(shè)置鍵 盤 狀 態(tài) 狀態(tài)顯示 是否改變狀態(tài)?是否 結(jié)束 軟件在硬件平臺(tái)上構(gòu)筑,完成各部分硬件的控制和協(xié)調(diào)。系統(tǒng)功能是由軟硬件共同實(shí)現(xiàn)的,由于軟件的可伸縮性,最終實(shí)現(xiàn)的系統(tǒng)功能可強(qiáng)可弱,差別可能很大。因此,軟件是本系統(tǒng)的靈魂。軟件采用模塊化設(shè)計(jì)方法,不僅易于編程和調(diào)試,也可減小軟件故障率和提高軟件的

18、可靠性。同時(shí),對(duì)軟件進(jìn)行全面測(cè)試也是檢驗(yàn)錯(cuò)誤排除故障的重要手段。這里選用了移值性好、結(jié)構(gòu)清晰、能進(jìn)行復(fù)雜運(yùn)算的C語(yǔ)言來(lái)實(shí)現(xiàn)編程。相應(yīng)程序如下:void main()TMOD=0X01;/T0方式1TH0=(65536-10000)/256;TL0=(65536-10000)%256; /延時(shí)10ms,設(shè)計(jì)初值10000EA=1;ET0=1;TR0=1;P1=0Xf3;/ 東西通行 Init_Com(); while(1) displaydjs(); dsreset(); / tmpchange(); delay(1); tmpwritebyte(0xcc); / 0xcc送入 tmpwrite

19、byte(0x44); / 0x44送入 display(tmp(); 4.2軟件主要子程序設(shè)計(jì): 1.鍵盤狀態(tài)判斷: 開始 鍵按下 鍵3按下下下鍵4按下否鍵2按下下否否是否鍵1按下 返回是是是是東西強(qiáng)行南北強(qiáng)行數(shù)值增加數(shù)值減少 在設(shè)置狀態(tài)下,主程序中不斷對(duì)按鍵進(jìn)行掃描,當(dāng)檢測(cè)到按鍵時(shí)執(zhí)行情況如上圖。當(dāng)遇到緊急情況時(shí):按下按鍵1開始東西強(qiáng)行,按下按鍵2南北強(qiáng)行。當(dāng)遇到高峰期時(shí):按下按鍵3對(duì)倒計(jì)時(shí)進(jìn)行增加設(shè)置(初始值設(shè)為99),當(dāng)檢測(cè)到按鍵4鍵按下的時(shí)候就進(jìn)行減少設(shè)置。按鍵掃描程序如下:void key() if(k1=1) /對(duì)按鍵1進(jìn)行檢測(cè),不滿足條件則往下執(zhí)行delay(10); if(k

20、1=1) e2=1; /直接改變I/O口的值,進(jìn)行按鍵改變操作 e0=0; e3=1; e5=0; P2=0XC0; sec_dx=80; sec_nb=80; if(k2=1) /對(duì)按鍵2進(jìn)行檢測(cè),不滿足條件則往下執(zhí)行 delay(10);if(k2=1) e2=0; e0=1; e3=0; e5=1; P2=0XC0; sec_dx=60; sec_nb=60; if(k3=0) /對(duì)按鍵3進(jìn)行檢測(cè),不滿足條件則往下執(zhí)行 delay(10);if(k3=0) sec_dx=99; sec_nb=99;if(k4=0) /對(duì)按鍵4進(jìn)行檢測(cè),不滿足條件則往下執(zhí)行delay(10);if(k4=

21、0) sec_dx=50; sec_nb=50;2倒計(jì)時(shí)設(shè)置:利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。用共陽(yáng)數(shù)碼管進(jìn)行動(dòng)態(tài)顯示。 開始 初始化 設(shè)定初值 綠燈顯示,倒計(jì)時(shí) 黃燈閃爍 紅燈顯示,倒計(jì)時(shí)有無(wú)按鍵狀態(tài)改變?是i進(jìn)入按鍵設(shè)置新狀態(tài)是否 返回/*數(shù)碼管倒計(jì)時(shí)顯示*/void displaydjs() buf1=(sec_dx-3)%10; /第1位 東西秒十位buf2=sec_dx/10; /第2位 東西秒個(gè)位buf3=sec_nb%10; /第3位 南北秒十位buf0=(sec_nb-3)/10; /第4位 南北秒個(gè)位P0=tablebufled;delay(2)

22、;/先延時(shí),提前顯示一位了P2=dig;dig=_crol_(dig,1);led+;/*定時(shí)T0*/void time0(void) interrupt 1 / TH0=(65536-10000)/256;TL0=(65536-10000)%256;b+;if (led=4) led=0;dig=0x01; if(b=100) / 定時(shí)器中斷次數(shù)。 b=0;sec_dx-;sec_nb-;key(); /*南北黃燈閃爍判斷*/if(sec_nb<=3)&&(sec_nb>=0)&&time=0) yellowled_dx=1;/南北黃燈亮 e2=0

23、; delay(300); yellowled_dx=0; if(sec_dx<=3&&(sec_dx>=0)&&time=1) yellowled_nb=1;/南北黃燈亮 e5=0; delay(300); yellowled_nb=0; if(sec_dx=0|sec_nb=0) /東西或南北先到達(dá)1S時(shí)即開始重新計(jì)時(shí) sec_dx=set_timedx;sec_nb=set_timenb; /第一次循環(huán)結(jié)束重置 if(time=1)P1=0XF3; /東西通行 elseP1=0xde; /南北通行time=!time; /取反 3溫度系統(tǒng)設(shè)置:

24、 當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來(lái)決定,每次測(cè)量前,首先將55所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對(duì)應(yīng)的一個(gè)基數(shù)值。  減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。其輸出用于修正減法計(jì)

25、數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過(guò)程,直到溫度寄存器值大致被測(cè)溫度值。溫度測(cè)量程序如下:void Init_Com(void) /進(jìn)行初始化 TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-; /*讀取一個(gè)bit*/bit tmpreadbit(void) /讀取一個(gè)bit uint i; bit dat; DS=0;i+;

26、/i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat); /*讀取一個(gè)byte date*/uchar tmpread(void) / uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里 return(dat); /*往ds18b20寫入一個(gè)byte*/void tmpwritebyte(uchar dat) /write a by

27、te to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /寫 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /寫 0 i=8;while(i>0)i-; DS=1; i+;i+; /*獲取溫度*/ uint tmp() /獲取溫度 float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwrit

28、ebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /兩個(gè)字節(jié)組成一個(gè)變量 temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp;/*溫度顯示*/void display(uint temp)/顯示程序 uchar A1,A2; A1=temp/100; A2=temp%100/10; P2=0x40; P3=tableA1;/顯示十位 delay(2); P2=0X80; P3=tableA2;/顯示個(gè)位 delay(2);  第五章 仿真結(jié)果1.溫

29、度設(shè)計(jì)仿真電路如示: 圖1 溫度仿真電路圖2. 溫度仿真電路圖倒計(jì)時(shí)和紅綠燈設(shè)計(jì)仿真電路如圖2所示: 圖2 溫度仿真電路圖倒計(jì)時(shí)和紅綠燈設(shè)計(jì)仿真電路 3.總體設(shè)計(jì)仿真電路如圖3所示: 圖4 總體仿真電路圖 第六章 設(shè)計(jì)總結(jié) 進(jìn)行了一學(xué)期的單片機(jī)學(xué)習(xí),在此次課程設(shè)計(jì)中我選擇設(shè)計(jì)了模擬交通燈,主要功能有溫度檢測(cè)并顯示、紅綠燈控制、數(shù)碼管倒計(jì)時(shí)顯示、鍵盤控制。在整個(gè)設(shè)計(jì)過(guò)程中,也將這些內(nèi)容進(jìn)行分模塊設(shè)計(jì)。 紅綠燈控制時(shí),通過(guò)控制led燈即可調(diào)節(jié)紅綠燈的亮滅狀態(tài)。而在倒計(jì)時(shí)是需要通過(guò)控制定時(shí)器T0來(lái)定時(shí):利用定時(shí)器T0產(chǎn)生每10ms一次的中斷,每100次中斷為1s。然后通過(guò)數(shù)碼管的動(dòng)態(tài)顯示,在輪流顯示

30、過(guò)程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為12ms,由于人的視覺(jué)暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。 通過(guò)對(duì)按鍵的不斷掃描,對(duì)按鍵的狀態(tài)進(jìn)行判斷。當(dāng)滿足某一狀態(tài)時(shí),則執(zhí)行相應(yīng)的程序。 在溫度檢測(cè)中,主要用了芯片DS18B20。其中,個(gè)人認(rèn)為最重要的內(nèi)容便是進(jìn)行初始化,只有當(dāng)送數(shù)的時(shí)間足夠,才能保證數(shù)據(jù)的正常采集與顯示。否則,只會(huì)顯示初始值85攝氏度。盡管在這個(gè)過(guò)程中出現(xiàn)了很多“波折”,但通過(guò)調(diào)試之后,溫度能夠正常的顯示。 整個(gè)仿真過(guò)程中,通過(guò)簡(jiǎn)單的元器件的選擇與連線就可以實(shí)現(xiàn)對(duì)電路圖的設(shè)計(jì)。然而在進(jìn)一步程

31、序指令修改過(guò)程中又遇到些問(wèn)題,不同的設(shè)計(jì)程序會(huì)對(duì)電路有不同的影響,從簡(jiǎn)單的對(duì)一個(gè)模塊程序調(diào)整到多個(gè)模塊進(jìn)行整合需要對(duì)程序的參數(shù)和程序指令、順序進(jìn)行認(rèn)真的判斷與分析。在使用Proteus軟件的過(guò)程中感受到了仿真帶來(lái)的便利,更高的應(yīng)用需要我們進(jìn)一步的探索。 電路的硬件設(shè)計(jì)和軟件程序有著緊密的聯(lián)系。一方面是在硬件電路連接中應(yīng)想著程序的設(shè)計(jì)思路;另一方面是在程序設(shè)計(jì)中要以硬件電路的連接方式為基礎(chǔ)。同時(shí),在設(shè)計(jì)過(guò)程中盡量要保持嚴(yán)謹(jǐn)性。比如:要對(duì)倒計(jì)時(shí)進(jìn)行控制顯示,一方面要想著對(duì)T0的模式進(jìn)行如何選擇,另一方面要思考怎么將控制的值顯示出來(lái)。所以整個(gè)設(shè)計(jì)過(guò)程中需要認(rèn)真與耐心。通過(guò)設(shè)計(jì)過(guò)程中的調(diào)試,發(fā)現(xiàn)自己的

32、想法會(huì)和仿真結(jié)果有區(qū)別,但在一番修改與調(diào)試之后,基本能夠達(dá)到自己的要求,所以本次設(shè)計(jì)也算是比較成功。從中,我在這次課程設(shè)計(jì)中也清楚的意識(shí)到,對(duì)一門課,尤其是像單片機(jī)一類要求操作能力比較強(qiáng)的課,不能僅僅局限于課本知識(shí)的學(xué)習(xí)與積累,更多的是能夠在實(shí)踐中去發(fā)現(xiàn)問(wèn)題,然后再去解決問(wèn)題。設(shè)計(jì)過(guò)程中感覺(jué)到自己的不足,然后經(jīng)過(guò)查閱資料、和同學(xué)交流思想,明白自己應(yīng)該改進(jìn)的地方,并在這個(gè)改進(jìn)的過(guò)程中逐步的提高自己分析與解決問(wèn)題的能力。 附錄#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define ui

33、nt unsigned intsbit DS=P17; /define interfaceuint temp; / variable of temperaturesbit k1=P07;sbit k2=P24;sbit k3=P16;sbit k4=P37;sbit e0=P10;sbit e2=P12;sbit e3=P13;sbit e5=P15;unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8;sbit yellowled_nb=P

34、14;/南北黃燈sbit yellowled_dx=P11;/東西黃燈uchar data dig;/位選uchar data led;/偏移量uchar data buf4;uchar data sec_dx=80;/東西數(shù)碼指示值uchar data sec_nb=80;/南北數(shù)碼指示值uchar data set_timedx=60;uchar data set_timenb=60;/倒計(jì)時(shí)設(shè)置的鍵值保存uchar data b;/定時(shí)器中斷次數(shù)bit time;/燈狀態(tài)循環(huán)標(biāo)志void displaydjs();/顯示子程序void delay(uint count) /delay u

35、int j,k;for(j=0;j<count;j+)for(k=0;k<114;k+);/*按鍵檢測(cè)*/void key() if(k1=1)delay(10);if(k1=1) e2=1; e0=0; e3=1; e5=0; P2=0XC0;/ delay(1000); sec_dx=80; sec_nb=80; if(k2=1)delay(10);if(k2=1) e2=0; e0=1; e3=0; e5=1; P2=0XC0;/ delay(1000); sec_dx=60; sec_nb=60; if(k3=0)delay(10);if(k3=0) sec_dx=99;

36、sec_nb=99;if(k4=0)delay(10);if(k4=0) sec_dx=50; sec_nb=50;/*定時(shí)T0*/void time0(void) interrupt 1 / TH0=(65536-10000)/256;TL0=(65536-10000)%256;b+;if (led=4) led=0;dig=0x01; if(b=100) / 定時(shí)器中斷次數(shù)。 b=0;sec_dx-;sec_nb-;key(); /*南北黃燈閃爍判斷*/if(sec_nb<=3)&&(sec_nb>=0)&&time=0) yellowled_d

37、x=1;/南北黃燈亮 e2=0; delay(300); yellowled_dx=0; if(sec_dx<=3&&(sec_dx>=0)&&time=1) yellowled_nb=1;/南北黃燈亮 e5=0; delay(300); yellowled_nb=0; if(sec_dx=0|sec_nb=0) /東西或南北先到達(dá)1S時(shí)即開始重新計(jì)時(shí) sec_dx=set_timedx;sec_nb=set_timenb; /第一次循環(huán)結(jié)束重置 if(time=1)P1=0XF3; /東西通行 elseP1=0xde; /南北通行time=!tim

38、e; /取反 void Init_Com(void) TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1;void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;/*讀取一個(gè)bit*/bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);/*讀取一個(gè)byte date*/uchar tmpread(void) / uchar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論