第一篇:交通燈心得
交通燈實(shí)訓(xùn)心得體會(huì)
通過(guò)本次課程設(shè)計(jì),我深深的體會(huì)到了作為一個(gè)硬件工程師的艱辛。即使做一個(gè)小小的項(xiàng)目,都需要這么多的辛苦,必須考慮到問(wèn)題的任何一個(gè)細(xì)節(jié),否則最后也將是功敗垂成。
原理圖設(shè)計(jì): 當(dāng)我們選取了這樣一個(gè)題目,我們就開(kāi)始收集相關(guān)的各種資料,對(duì)題目有個(gè)大致的了解,規(guī)劃一下設(shè)計(jì)的任務(wù)將要完成哪些功能。然后就具體的每一項(xiàng)功能應(yīng)該怎樣具體的設(shè)計(jì),例如用什么方法完成這一功能,這種想法是否合理,比較使用哪個(gè)芯片來(lái)完成這項(xiàng)功能。經(jīng)過(guò)長(zhǎng)時(shí)間的查閱資料、思索、推敲,最后定出了這次設(shè)計(jì)的原理圖。
PCB板設(shè)計(jì):剛開(kāi)學(xué)的時(shí)候我們就學(xué)習(xí)了protel軟件使用,研究應(yīng)該怎樣生成正確的網(wǎng)絡(luò)表,PCB板的布局,布線,制板等工作。剛開(kāi)始由于經(jīng)驗(yàn)不足,不知道如何封裝庫(kù)里面沒(méi)有的器件和芯片而且生成的網(wǎng)絡(luò)表又有那么多的線,當(dāng)時(shí)真是一頭霧水,經(jīng)過(guò)老師和同學(xué)的幫助以及自己的摸索,最后以勉強(qiáng)合格的水準(zhǔn)畫(huà)出了這次的設(shè)計(jì)用板。
硬件焊接:在拿到板之后,按照老師的要求我們首先檢查了一下板子是否有錯(cuò)誤,這是一個(gè)非常關(guān)鍵的步驟,因?yàn)楫?dāng)你焊接上器件之后將會(huì)很難檢查。結(jié)果發(fā)現(xiàn)了真的還有一些不足,比如在畫(huà)板的過(guò)程中我們居然忘記留出電源接口,還有一些兩根電源線沒(méi)有和其他線接到一塊,另外我們給按鍵留的引腳的孔太小了,數(shù)碼管的引腳情況也給弄錯(cuò)了,這些應(yīng)該是初學(xué)這些東西經(jīng)驗(yàn)不夠和粗心造成的。這些也都給以后的學(xué)習(xí)留下了經(jīng)驗(yàn)和教訓(xùn),必須先拿到或熟悉芯片才能確定引腳的間距以及大小,制板過(guò)程必須要細(xì)心。發(fā)現(xiàn)這些錯(cuò)誤,在焊接過(guò)程中我們采取了一系列的措施來(lái)補(bǔ)救這些錯(cuò)誤。比如割斷板子上的線,用導(dǎo)線來(lái)連接等。關(guān)于焊接這塊是由我來(lái)負(fù)責(zé),因?yàn)樽约旱乃讲辉趺礃樱枰欢ǖ慕?jīng)驗(yàn)和技巧。剛開(kāi)始烙鐵和焊錫配合不到一塊,然后就是焊錫的量的控制問(wèn)題。我認(rèn)為硬件也有點(diǎn)原因,可能是烙鐵不夠熱吧。始終達(dá)不到老師焊接的那種效果,但是焊接出來(lái)還是能使用的,只是不太美觀。
編程調(diào)試:此次設(shè)計(jì)的編程,難點(diǎn)在于對(duì)LED數(shù)碼管顯示程序的編寫,由于對(duì)芯片的工作原理不是很熟悉,所以一開(kāi)始摸不著頭腦。上網(wǎng)查閱相關(guān)資料,對(duì)芯片的工作原理有個(gè)大致的了解后,程序的編寫也初見(jiàn)端倪了,所以花在編此段程序的時(shí)間最長(zhǎng);交通燈狀態(tài)的顯示則沒(méi)有費(fèi)多大力氣,因?yàn)橥ㄟ^(guò)所學(xué)的課程已經(jīng)了解了其工作原理,就是向每個(gè)相應(yīng)的口上寫“1”或“0”;中斷程序的編寫也是常規(guī)的編寫,就是保存原來(lái)狀態(tài),處理,恢復(fù)現(xiàn)場(chǎng)這一中斷的基本步驟。
通過(guò)上面的這個(gè)步驟,把程序調(diào)試好,接下來(lái)就是真正的硬件連接調(diào)試了。程序既然已經(jīng)在仿真的軟件上通過(guò)認(rèn)證,如果連接上硬件不好使的話,說(shuō)明在硬件上某個(gè)部分存在一定的問(wèn)題。這點(diǎn)得到了驗(yàn)證:硬件模擬的時(shí)候,和仿真完全不一樣,燈全亮,或者亂亮,而數(shù)碼管也沒(méi)能顯示,估計(jì)是編程還有硬件接口出現(xiàn)問(wèn)題,最后也沒(méi)能通過(guò)老師的驗(yàn)收。我們也只能再進(jìn)行修改。
最后交通燈的大部分功能都已經(jīng)基本實(shí)現(xiàn),只是關(guān)于數(shù)碼管的部分,由于對(duì)芯片不了解,所剩余的時(shí)間無(wú)幾,所以沒(méi)有辦法進(jìn)行編程調(diào)試了,這點(diǎn)真的很遺憾。有時(shí)間一定會(huì)把這一課補(bǔ)上的。
這次課程設(shè)計(jì)我感覺(jué)到了自己平時(shí)學(xué)習(xí)到的東西太淺,沒(méi)能完成好這次的任務(wù)。但從中還是學(xué)習(xí)到了不少東西,使我受益匪淺。這次課程設(shè)計(jì)中犯下了不少錯(cuò)誤,以后我會(huì)接受這些教訓(xùn),同時(shí)把這些教訓(xùn)轉(zhuǎn)換為經(jīng)驗(yàn)應(yīng)用到以后的此類設(shè)計(jì)中。最后,衷心感謝在課程設(shè)計(jì)期間老師對(duì)我們的無(wú)私幫助,還要感謝和我同組的合作者,以及所有幫助過(guò)我的同學(xué)。
第二篇:交通燈管理電路設(shè)計(jì)
交通燈管理電路設(shè)計(jì).txt懂得放手的人找到輕松,懂得遺忘的人找到自由,懂得關(guān)懷的人找到幸福!女人的聰明在于能欣賞男人的聰明。生活是燈,工作是油,若要燈亮,就要加油!相愛(ài)時(shí),飛到天邊都覺(jué)得踏實(shí),因?yàn)橛心愕臓繏?;分手后,坐在家里都覺(jué)得失重,因?yàn)闆](méi)有了方向。本文由車牌定位貢獻(xiàn)
doc文檔可能在WAP端瀏覽體驗(yàn)不佳。建議您優(yōu)先選擇TXT,或下載源文件到本機(jī)查看。
東 北 石 油 大 學(xué)
課
課 題 院 程 目 系
程
設(shè)
計(jì)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 電子科學(xué)學(xué)院 電信 07-5 班 馬深慧 070901140505 專業(yè)班級(jí) 學(xué)生姓名 學(xué)生學(xué)號(hào) 指導(dǎo)教師 2011 年 3 月 18 日
東北石油大學(xué)課程設(shè)計(jì)任務(wù)書(shū)
課程 題目 單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 電信 07-5 姓名 馬深慧 學(xué)號(hào) 070901140505 專業(yè)班級(jí)
一、設(shè)計(jì)目的: 訓(xùn)練學(xué)生綜合運(yùn)用己學(xué)課程的基本知識(shí),獨(dú)立進(jìn)行單片機(jī)應(yīng)用技術(shù)開(kāi)發(fā)工作,掌握單片機(jī)程序設(shè)計(jì)、調(diào)試,應(yīng)用電路設(shè)計(jì)、分析及調(diào)試檢測(cè)。
二、設(shè)計(jì)要求: 1.應(yīng)用 MCS-51 單片機(jī)設(shè)計(jì)交通燈管理電路; 2.該系統(tǒng)要求顯示 50s 倒計(jì)時(shí)時(shí)間,當(dāng)計(jì)到需交換紅綠燈前 10s,路口均顯示黃燈; 3.硬件設(shè)計(jì)根據(jù)設(shè)計(jì)的任務(wù)選定合適的單片機(jī),根據(jù)控制對(duì)象設(shè)計(jì)接口電路。設(shè)計(jì)的 單元電路必須有工作原理,器件的作用,分析和計(jì)算過(guò)程; 4.軟件設(shè)計(jì)根據(jù)電路工作過(guò)程,畫(huà)出軟件流程圖,根據(jù)流程圖編寫相應(yīng)的程序,進(jìn)行 調(diào)試并打印程序清單; 5.原理圖設(shè)計(jì)根據(jù)所確定的設(shè)計(jì)電路,利用 Protel 等有關(guān)工具軟件繪制電路原理圖、PCB 板圖、提供元器件清單。
三、參考資料: [1] 單片微型計(jì)算機(jī)與接口技術(shù),李群芳、黃建編著,電子工業(yè)出版社; [2] 單片機(jī)原理及應(yīng)用,張毅剛編著,高等教育出版社; [3] 51 系列單片機(jī)及 C51 程序設(shè)計(jì),王建校,楊建國(guó)等編著,科學(xué)出版社; [4] 單片機(jī)原理及接口技術(shù),李朝青編著,北京航空航天大學(xué)出版社;
完成期限 指導(dǎo)教師 專業(yè)負(fù)責(zé)人 2011.3.14—2011.3.18 2011 年 3 月 13 日
目錄
1.系統(tǒng)設(shè)計(jì) 1.系統(tǒng)設(shè)計(jì) ?? 1 1.1 設(shè)計(jì)思路 ?? 1 1.1.1 設(shè)計(jì)目的?? 1 1.1.2 設(shè)計(jì)任務(wù)和內(nèi)容?? 1 1.1.3 方案比較、設(shè)計(jì)與論證?? 1 1.1.3.1 電源提供方案 ?? 1 1.1.3.2 復(fù)位方案 ?? 2 1.1.3.3 輸入方案 ?? 2 1.1.3.4 顯示界面方案 ?? 2 1.1.3.5 交通管理的方案論證 ?? 4 1.1.4 芯片簡(jiǎn)介?? 4 2.硬件電路設(shè)計(jì) 2.硬件電路設(shè)計(jì) ?? 10 2.1 設(shè)計(jì)原理分析 ?? 11 2.1.1 交通燈顯示時(shí)序的理論分析與計(jì)算?? 11 2.1.2 交通燈顯示時(shí)間的理論分析與計(jì)算?? 13 2.1.3LED 數(shù)碼管顯示模塊?? 14 2.1.4 復(fù)位電路?? 15 2.1.5 晶振電路?? 16 3.軟件設(shè)計(jì) 3.軟件設(shè)計(jì) ?? 17 3.1 數(shù)碼管顯示子程序: ?? 17 3.1LED 紅綠燈顯示模塊程序: ?? 18 4.總結(jié) 4.總結(jié) ?? 21 5.參考文獻(xiàn) 5.參考文獻(xiàn) ?? 22 6.附錄 6.附錄 ?? 22 6.1 附錄 1:程序清單 ?? 22 6.2 附錄 2:電路設(shè)計(jì)總圖 ?? 29 1.系統(tǒng)設(shè)計(jì)
1.1 設(shè)計(jì)思路 1.1.1 設(shè)計(jì)目的 訓(xùn)練學(xué)生綜合運(yùn)用己學(xué)課程的基本知識(shí),獨(dú)立進(jìn)行單片機(jī)應(yīng)用技 術(shù)開(kāi)發(fā)工作,掌握單片機(jī)程序設(shè)計(jì)、調(diào)試,應(yīng)用電路設(shè)計(jì)、分析及調(diào) 試檢測(cè)。1.1.2 設(shè)計(jì)任務(wù)和內(nèi)容 1.應(yīng)用 MCS-51 單片機(jī)設(shè)計(jì)交通燈管理電路; 2.該系統(tǒng)要求顯示 50s 倒計(jì)時(shí)時(shí)間,當(dāng)計(jì)到需交換紅綠燈前 10s,路口均顯示黃燈; 3.硬件設(shè)計(jì)根據(jù)設(shè)計(jì)的任務(wù)選定合適的單片機(jī),根據(jù)控制對(duì)象 設(shè)計(jì)接口電路。設(shè)計(jì)的單元電路必須有工作原理,器件的作用,分析 和計(jì)算過(guò)程; 4.軟件設(shè)計(jì)根據(jù)電路工作過(guò)程,畫(huà)出軟件流程圖,根據(jù)流程圖 編寫相應(yīng)的程序,進(jìn)行調(diào)試并打印程序清單; 5.原理圖設(shè)計(jì)根據(jù)所確定的設(shè)計(jì)電路,利用 Protel 等有關(guān)工具軟 件繪制電路原理圖、PCB 板圖、提供元器件清單。1.1.3 方案比較、設(shè)計(jì)與論證 1.1.3.1 電源提供方案 為使模塊穩(wěn)定工作,須有可靠電源,采用單片機(jī)控制模塊提供電 源。此方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本; 缺點(diǎn)是輸出功率不高。1 1.1.3.2 復(fù)位方案 復(fù)位方式有兩種:按鍵復(fù)位與軟件復(fù)位。由考慮到程序的簡(jiǎn)潔,避免冗長(zhǎng),本設(shè)計(jì)采用按鍵復(fù)位,在芯片的復(fù)位端口外接復(fù)位電路,通過(guò)按鍵對(duì)單片機(jī)輸入一個(gè)高電平脈沖,達(dá)到復(fù)位的目的。1.1.3.3 輸入方案 方案一: 采用 89S52 擴(kuò)展 I/O 口及鍵盤,顯示等。該方案的優(yōu)點(diǎn)是: 使用靈活可編程,并且有 RAM,及計(jì)數(shù)器。若用該方案,可提供較多 I/O 口,但操作起來(lái)稍顯復(fù)雜。
方案二: 直接在 I/O 口線上接上按鍵開(kāi)關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用 2 個(gè)按鍵,分別是 K1、K2。由于該系統(tǒng)對(duì)于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的 I/O 口 就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及 RAM 已經(jīng)夠用,故選擇方案二 1.1.3.4 顯示界面方案 該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能。基于上述原因,我們考 慮了三種方案: 方案一: 2 完全采用數(shù)碼管顯示。這種方案只顯示有限的符號(hào)和數(shù)碼字符,無(wú)法勝任題目要求。方案二: 完全采用點(diǎn)陣式 LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量 的軟件工作; 但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形。方案三: 采用數(shù)碼管與點(diǎn)陣 LED(點(diǎn)陣式和 8 段式 LED)相結(jié)合的方法因 為設(shè)計(jì)既要求倒計(jì)時(shí)數(shù)字輸出,又要求有狀態(tài)燈輸出等,為方便觀看 并考慮到現(xiàn)實(shí)情況,用數(shù)碼管與 LED 燈分別顯示時(shí)間與提示信息。這 種方案既滿足系統(tǒng)功能要求,又減少了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。權(quán)衡利弊,第三種方案可互補(bǔ)一二方案的優(yōu)缺,決定采用方案三以實(shí)現(xiàn)系統(tǒng)的顯 示功能。整個(gè)設(shè)計(jì)以 AT89S52 單片機(jī)為核心,由數(shù)碼管顯示,數(shù)碼管顯示, LED 復(fù)位電路組成。硬件模塊入圖所示: AT89S52 單 片機(jī)
數(shù)碼管顯示 LED 數(shù)碼管 晶振電路 顯示
復(fù)位電路 3 1.1.3.5 交通管理的方案論證 東西、南北兩干道交于一個(gè)十字路口,各干道有一組紅、黃、綠 三色的指示燈,指揮車輛和行人安全通行。紅燈亮禁止通行,綠燈亮 允許通行。黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換,且黃燈燃 亮?xí)r間為東西、南北兩干道的公共停車時(shí)間。指示燈燃亮的方案如下 表所示: 40S 10S 40S 10S ??
東 西 紅 燈 黃 燈 綠 燈 黃 燈 ?? 道 亮 亮 亮 亮
南 北 綠 燈 黃 燈 紅 燈 黃 燈 ?? 道 亮 亮 亮 亮 上表說(shuō)明:(1)當(dāng)東西方向?yàn)榧t燈,此道車輛禁止通行,東西道行人可通 過(guò);南北道為綠燈,此道車輛通過(guò),行人禁止通行。時(shí)間 為 40 秒。(2)黃燈 10 秒,警示車輛和行人紅、綠燈的狀態(tài)即將切換。(3)當(dāng)東西方向?yàn)榫G燈,此道車輛通行;南北方向?yàn)榧t燈,南 北道車輛禁止通過(guò),行人通行。時(shí)間為 40 秒。(4)這樣如上表的時(shí)間和紅、綠、黃出現(xiàn)的順序依次出現(xiàn)這樣 行人和車輛就能安全暢通的通行。1.1.4 芯片簡(jiǎn)介 1.AT89S52 單片機(jī)簡(jiǎn)介 4 其引 DIP 封裝的腳圖如下:
主要性能: 與 MCS-51 單片機(jī)產(chǎn)品兼容、8K 字節(jié)在系統(tǒng)可編程 Flash 存 儲(chǔ)器、1000 次擦寫周期、全靜態(tài)操作:0Hz~33Hz、三級(jí)加 密程序存儲(chǔ)器、32 個(gè)可編程 I/O 口線、三個(gè) 16 位定時(shí)器/計(jì) 數(shù)器 八個(gè)中斷源、全雙工 UART 串行通道、低功耗空閑和掉電 模式、掉電后中斷可喚醒、看門狗定時(shí)器、雙數(shù)據(jù)指針、掉 電標(biāo)識(shí)符。功能特性描述: 5 At89s52 是一種低功耗、高性能 CMOS8 位微控制器,具有 8K 在系統(tǒng)可編程 Flash 存儲(chǔ)器。使用 Atmel 公司高密度非 易失性 存儲(chǔ)器技術(shù)制造,與工業(yè) 80C51 產(chǎn)品指令和引腳完 全兼容。片 上 Flash 允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在 單芯片上,擁有靈巧的 8 位 CPU 和在系統(tǒng) 可編程 Flash,使得 AT89S52 為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決 方案。AT89S52 具有以下標(biāo)準(zhǔn)功能: 8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè) 16 位 定時(shí)器/計(jì)數(shù)器,一個(gè) 6 向量 2 級(jí)中斷結(jié)構(gòu),全雙工串行口,片 內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏 輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允 許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式 下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直 到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可 編程 Flash AT89S52 P0 口:P0 口是一個(gè) 8 位漏極開(kāi)路的雙向 I/O 口。作為輸出 口,每位能驅(qū)動(dòng) 8 個(gè) TTL 邏輯電平。對(duì) P0 端口寫“1”時(shí),引腳 用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低 8 位 地址/數(shù)據(jù)復(fù)用。在這種模式下: P0 具有內(nèi)部上拉電阻。6 在 flash 編程時(shí),口也用來(lái)接收指令字節(jié); P0 在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P1 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)此外,P1.0 和 P1.2 分別作定時(shí)器/計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器 2 的觸發(fā)輸入(P1.1/T2EX),具體如 下表所示。在 flash 編程和校驗(yàn)時(shí),P1 口接收低 8 位地址字節(jié)。引腳號(hào)第二功能 P1.0 T2(定時(shí)器/計(jì)數(shù)器 T2 的外部計(jì)數(shù)輸入),時(shí)鐘輸出 P1.1 T2EX(定時(shí)器/計(jì)數(shù)器 T2 的捕捉/重載觸發(fā)信號(hào)和方向 控制)P1.5 MOSI(在系統(tǒng)編程用)P1.6 MISO(在系統(tǒng)編程用)P1.7 SCK(在系統(tǒng)編程用)P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P2 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 7 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或用 16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX @DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng) 用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送 1。在使用 8 位地址(如 MOVX @RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2 口輸出 P2 鎖存器的內(nèi)容。在 flash 編程和校驗(yàn)時(shí),P2 口也接收高 8 位地址字節(jié)和一些 控制信號(hào)。P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。P3 端口寫“1”時(shí),對(duì) 內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入 使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3 口亦作為 AT89S52 特殊功能(第二功能)使用,如下表所 示。在 flash 編程和校驗(yàn)時(shí),P3 口也接收一些控制信號(hào)。端口引腳 第二功能 P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 INTO(外中斷 0)P3.3 INT1(外中斷 1)P3.4 TO(定時(shí)/計(jì)數(shù)器 0)8 P3.5 T1(定時(shí)/計(jì)數(shù)器 1)P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)此外,P3 口還接收一些用于 FLASH 閃存編程和程序校驗(yàn)的控 制信號(hào)。RST——復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST 引腳出現(xiàn)兩個(gè)機(jī)器 周期以上高電平將是單片機(jī)復(fù)位。ALE/PROG——當(dāng)訪問(wèn)外部程存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地 址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節(jié)。一般情況下,ALE 仍以時(shí)鐘振蕩頻率的 1/6 輸出固定的脈沖信號(hào),因此它可對(duì) 外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存 儲(chǔ)器時(shí)將跳過(guò)一個(gè) ALE 脈沖。對(duì) FLASH 存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的 8EH 單元 的 D0 位置位,可禁止 ALE 操作。該位置位后,只有一條 MOVX 和 MOVC 指令才能將 ALE 激活。此外,該引腳會(huì)被微弱拉高,單片機(jī) 執(zhí)行外部程序時(shí),應(yīng)設(shè)置 ALE 禁止位無(wú)效。PSEN——程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀 選通信號(hào),當(dāng) AT89C52 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次 PSEN 有效,即輸出兩個(gè)脈沖,在此期間,當(dāng)訪 問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次 PSEN 信號(hào)。9 EA/VPP——外部訪問(wèn)允許,欲使 CPU 僅訪問(wèn)外部程序存儲(chǔ)器(地址為 0000H-FFFFH),EA 端必須保持低電平(接地)。需注 意的是:如果加密位 LB1 被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存 EA 端狀態(tài)。如 EA 端為高電平(接 Vcc 端),CPU 則執(zhí)行內(nèi)部程序存儲(chǔ)器 的指令。FLASH 存儲(chǔ)器編程時(shí),該引腳加上+12V 的編程允許電源 Vpp,當(dāng)然這必須是該器件是使用 12V 編程電壓 Vpp。
2.硬件電路設(shè)計(jì)
復(fù)位
晶振源 AT89S52 各路口紅綠燈 LED 倒計(jì)時(shí)顯示 10 2.1 設(shè)計(jì)原理分析 2.1.1 交通燈顯示時(shí)序的理論分析與計(jì)算 對(duì)于一個(gè)交通路口來(lái)說(shuō),能在最短的時(shí)間內(nèi)達(dá)到最大的車流量,就 算是達(dá)到了最佳的性能,我們稱在單位時(shí)間內(nèi)多能達(dá)到的最大車流 為車流量,用公式:車流量= 車流 / 時(shí)間 來(lái)表示。先設(shè)定一些標(biāo)號(hào)如圖 2-1 所示。
說(shuō)明: 此圖為直方圖,上邊為北路口燈,右邊為東路口燈,下邊為南路 口燈,左邊為西路口燈。圖 2-2 所示為一種紅綠燈規(guī)則的狀態(tài)圖,分別設(shè)定為 S1、S2、S3、S4,交通燈以這四的狀態(tài)為一個(gè)周期,循環(huán)執(zhí)行(見(jiàn)圖 2-3)。11 圖 2-1 請(qǐng)注意圖 2-1b 和圖 2-1d,它們?cè)谝粋€(gè)時(shí)間段中四個(gè)方向都可以通 車,這種狀態(tài)能在一定的時(shí)間內(nèi)達(dá)到較大的車流量,效率特別高。依據(jù)上述的車輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于 相向的燈的狀態(tài)圖是一樣的,所以只需寫出相鄰路口的燈的邏輯表; 根據(jù)圖 2-3 可以看出,相鄰路口的燈它們的狀態(tài)在相位上相差 180°。因此最終只需寫出一組 S1、S2、S3、S4 的邏輯狀態(tài)表。如表 2-1 所示。12 表 2-1 表中的“×”代表是紅燈亮(也代表邏輯上的 0),“√”是代表綠 燈亮(也代表邏輯上的 1),依上表,就可以向相應(yīng)的端口送邏輯值。
2.1.2 交通燈顯示時(shí)間的理論分析與計(jì)算 東西和南北方向的放行時(shí)間的長(zhǎng)短是依據(jù)路口的各個(gè)方向平時(shí)的車 13 流量來(lái)設(shè)定,并且 S1、S2、S3、S4 各個(gè)狀態(tài)保持的時(shí)間之有嚴(yán)格的 對(duì)應(yīng)關(guān)系,其公式如下示。T-S1+T-S2=T-S3 T-S2=T-S4 T-S1=T-S3 我們可以依據(jù)上述的標(biāo)準(zhǔn)來(lái)改變車輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分為主干道和次干道,主干道的放行時(shí)間大于次干道 的放行時(shí)間,我們?cè)O(shè)定值時(shí)也應(yīng)以此為參考 2.1.3LED 數(shù)碼管顯示模塊(1)靜態(tài)顯示方式:靜態(tài)顯示方式是指當(dāng)顯示器顯示某一字符時(shí),發(fā) 光二極管的位選始終被選中。在這種顯示方式下,每一個(gè) LED 數(shù)碼管 顯示器都需要一個(gè) 8 位的輸出口進(jìn)行控制。由于單片機(jī)本身提供的 I/O 口有限,實(shí)際使用中,通常通過(guò)擴(kuò)展 I/O 口的形式解決輸出口數(shù) 量不足的問(wèn)題。靜態(tài)顯示主要的優(yōu)點(diǎn)是顯示穩(wěn)定,在發(fā)光二極管導(dǎo)通電流一定的情況 下顯示器的亮度大,系統(tǒng)運(yùn)行過(guò)程中,在需要更新顯示內(nèi)容時(shí),CPU 才去執(zhí)行顯示更新子程序,這樣既節(jié)約了 CPU 的時(shí)間,又提高了 CPU 的工作效率。其不足之處是占用硬件資源較多,每個(gè) LED 數(shù)碼管需要 獨(dú)占 8 條輸出線。隨著顯示器位數(shù)的增加,需要的 I/O 口線也將增加。(2)動(dòng)態(tài)顯示方式:動(dòng)態(tài)顯示方式是指一位一位地輪流點(diǎn)亮每位顯示 器(稱為掃描),即每個(gè)數(shù)碼管的位選被輪流選中,多個(gè)數(shù)碼管公用 14 一組段選,段選數(shù)據(jù)僅對(duì)位選選中的數(shù)碼管有效。對(duì)于每一位顯示器 來(lái)說(shuō),每隔一段時(shí)間點(diǎn)亮一次。顯示器的亮度既與導(dǎo)通電流有關(guān),也 與點(diǎn)亮?xí)r間和間隔時(shí)間的比例有關(guān)。通過(guò)調(diào)整電流和時(shí)間參數(shù),可以 既保證亮度,又保證顯示。若顯示器的位數(shù)不大于 8 位,則顯示器的 公共端只需一個(gè) 8 位 I/O 口進(jìn)行動(dòng)態(tài)掃描(稱為掃描口),控制每位 顯示器所顯示的字形也需一個(gè) 8 位口(稱為段碼輸出)。15 2.1.4 復(fù)位電路 復(fù)位方式有多種,本設(shè)計(jì)采用按鍵復(fù)位。接線圖如圖程序復(fù)位 電路框圖
在設(shè)定的定時(shí)時(shí)間內(nèi),89S52 必須在 RST 引腳產(chǎn)生一個(gè)由高到低 的電平變化,以清內(nèi)部定時(shí)器.2.1.5 晶振電路 晶振電路原理圖如 3-2: 3-2 晶振模塊原理圖 選取原則:傳統(tǒng)做法,但能夠?qū)崿F(xiàn)所需,即最簡(jiǎn)單也最是實(shí)用。電容選取 30pF,晶振為 30MHz。16 3.軟件設(shè)計(jì)
3.1 數(shù)碼管顯示子程序: void normalPageShow(){ register unsigned char i, j, n;register long lTmp;unsigned char const SEG_CODE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};unsigned char const COMM[2] = {0x01, 0x02, 0x04, 0x08};for(i = 0;i < 2;i ++){ lTmp = gnValue;n = lTmp((lTmp / 10)* 10);P2 = COMM[i];P0 = SEG_CODE[n];P2 = COMM[i + 2];P0 = SEG_CODE[n];lTmp /= 10;} } main(void){ EA = 0;// global interrupt disable 26 giSysStatus = 0;initMCU();EA = 1;while(1){ if(gbFlag_1sPeriod){ gbFlag_1sPeriod = 0;gnValue-= 1;gbFlag_refreshLED = 1;if(gnValue == 10){ dsY1 = 0;dsY2 = 0;} if(gnValue == 0){ if(dsR1 == 0){ dsR1 = 1;dsR2 = 0;dsG1 = 0;dsG2 = 1;dsY1 = 0;dsY2 = 0;} else{ 27 //刷新 LED dsR1 = 0;dsR2 = 1;dsG1 = 1;dsG2 = 0;dsY1 = 0;dsY2 = 0;} } } if(gbFlag_refreshLED){ gbFlag_refreshLED = 0;normalPageShow();} } } 28 6.2 附錄 2:電路設(shè)計(jì)總圖 29 東北石油大學(xué)課程設(shè)計(jì)成績(jī)?cè)u(píng)價(jià)表
課程名稱 題目名稱 學(xué)生姓名 序號(hào) 馬深慧 評(píng)價(jià)項(xiàng)目 工作量、工作態(tài) 1 度和出勤率 學(xué)號(hào)
單片機(jī)原理及應(yīng)用課程設(shè)計(jì) 交通燈管理電路設(shè)計(jì) 070901140505 指 指導(dǎo)教 師姓名 標(biāo) 職稱 滿分 評(píng)分
按期圓滿的完成了規(guī)定的任務(wù),難易程度和工作 量符合教學(xué)要求,工作努力,遵守紀(jì)律,出勤率 高,工作作風(fēng)嚴(yán)謹(jǐn),善于與他人合作。課程設(shè)計(jì)選題合理,計(jì)算過(guò)程簡(jiǎn)練準(zhǔn)確,分析問(wèn) 20 2 課程設(shè)計(jì)質(zhì)量
題思路清晰,結(jié)構(gòu)嚴(yán)謹(jǐn),文理通順,撰寫規(guī)范,圖表完備正確。45 3 4 總分 評(píng)語(yǔ):
創(chuàng)新 答辯
工作中有創(chuàng)新意識(shí),對(duì)前人工作有一些改進(jìn)或有 一定應(yīng)用價(jià)值。能正確回答指導(dǎo)教師所提出的問(wèn)題。5 30 指導(dǎo)教師:
****年**月**日 30 1
第三篇:PLC交通燈課程設(shè)計(jì)
PLC的定義及工作原理
⒈定義:可編程控制器,簡(jiǎn)稱PLC(Programmable logic Controller),是指以計(jì)算機(jī)技術(shù)為基礎(chǔ)的新型工業(yè)控制裝置?!癙LC是一種專門為在工業(yè)環(huán)境下應(yīng)用而設(shè)計(jì)的數(shù)字運(yùn)算操作的電子裝置”。它采用可編程序的存儲(chǔ)器,用來(lái)在其內(nèi)部存儲(chǔ)執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)和算術(shù)運(yùn)算等操作的指令,并通過(guò)數(shù)字式或模擬式的輸入和輸出,控制各種類型的機(jī)械或生產(chǎn)過(guò)程。
⒉工作原理: 當(dāng)PLC投入運(yùn)行后,其工作過(guò)程一般分為三個(gè)階段,即輸入采樣、用戶程序執(zhí)行和輸出刷新三個(gè)階段。完成三個(gè)階段稱作一個(gè)掃描周期。在整個(gè)運(yùn)行期間,PLC的CPU以一定的掃描速度重復(fù)執(zhí)行三個(gè)階段。
(一)輸入采樣階段
在輸入采樣階段,PLC以掃描方式依次地讀入所有輸入狀態(tài)和數(shù)據(jù),并將它們存入I/O映象區(qū)中的相應(yīng)得單元內(nèi)。
(二)用戶程序執(zhí)行階段
在用戶程序執(zhí)行階段,PLC總是按由上而下的順序依次地掃描用戶程序(梯形圖)。
(三)輸出刷新階段
當(dāng)掃描用戶程序結(jié)束后,PLC就進(jìn)入輸出刷新階段。在此期間,CPU按照I/O映象區(qū)內(nèi)對(duì)應(yīng)的狀態(tài)和數(shù)據(jù)刷新所有的輸出鎖存電路,再經(jīng)輸出電路驅(qū)動(dòng)相應(yīng)的外設(shè)。
隨著自動(dòng)化控制技術(shù)和微電子技術(shù)的迅猛發(fā)展,PLC作為前沿的工業(yè)控制器,具有體積小、可靠性高、易操作、靈活性強(qiáng)、抗干擾能力強(qiáng)等一系列優(yōu)點(diǎn),廣泛用于自動(dòng)化控制領(lǐng)域。用內(nèi)部編程取代繼電器邏輯控制電路中大量的中間繼電器和時(shí)間繼電器,簡(jiǎn)化了控制路線,提高了系統(tǒng)控制的可靠性,這是PLC最大的優(yōu)點(diǎn)。借助于書(shū)序控制圖和梯形圖來(lái)編制用戶控制程序,實(shí)現(xiàn)自動(dòng)控制系統(tǒng)順序控制,是PLC的主要功能之一。
實(shí)訓(xùn)1
基礎(chǔ)試驗(yàn)
1.兩燈交替閃爍 指令表
梯形圖
工作過(guò)程:
按下啟動(dòng)開(kāi)關(guān)X0,Y0亮,且開(kāi)始計(jì)時(shí),2S后,T0動(dòng)作,T0常閉斷開(kāi)Y0熄滅,T0常開(kāi)閉合Y1亮,經(jīng)過(guò)2s,Y0亮;如此循環(huán),直到按下停止開(kāi)關(guān)X1。
2.利用計(jì)數(shù)器實(shí)現(xiàn)循環(huán)
指令表
梯形圖
工作過(guò)程:
按下啟動(dòng)開(kāi)關(guān)X0,Y0亮,開(kāi)始計(jì)時(shí)2S后,T0動(dòng)作,Y0熄滅,Y1亮,如此循環(huán),直到循環(huán)了5次,計(jì)數(shù)器CO動(dòng)作,常開(kāi)觸點(diǎn)閉合,整個(gè)過(guò)程停止。
實(shí)訓(xùn)2 十字路口交通燈控制系統(tǒng)
1、實(shí)訓(xùn)目的
① 了解PLC基本功能指令使用方法 ②掌握功能指令圖的輸入方法 ③學(xué)會(huì)利用功能指令進(jìn)行設(shè)計(jì) 2、實(shí)訓(xùn)的內(nèi)容
該實(shí)驗(yàn)在十字路口交通信號(hào)燈控制實(shí)驗(yàn)區(qū)內(nèi)完成,按啟動(dòng)按鈕,六盞燈按如下時(shí)序工作:第一組綠燈亮5秒后閃爍3次(滅0.5秒,亮0.5秒),黃燈亮2秒,紅燈亮10秒;第二組紅燈亮10秒,綠燈亮5秒后閃爍3次(滅0.5秒,亮0.5秒),黃燈亮2秒。
從時(shí)序圖可以看出,該系統(tǒng)有一個(gè)輸入裝置和 6個(gè)輸出裝置。下表為輸入裝置與輸出裝置與PLC的地址編號(hào)對(duì)應(yīng)表。
指令表
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ LD
M8002 SET
L0 STL
S0 LD
X000 OUT
Y000 OUT
Y003 SET
S21 SET
S31 STL
S21 OUT
Y000 OUT
T0
K50 ⒓ LD
T0 ⒔ SET
S22 ⒕ STL
S22 ⒖ OUT
T1
K30 ⒗ LDI
T1 ⒘ AND
M8013 ⒙ OUT
Y000 ⒚ LD
T1 ⒛ SET
S23 21.STL 22.OUT 23.OUT 24.LD 25.SET 26.STL 27.OUT 28.OUT 29.STL 30.OUT 31.OUT 32.LD 33.SET 34.STL 35.OUT 36.OUT 37.LD 38.SET 39.STL 40.OUT 41.LDI 42.AND 43.UT 44.LD 45.SET 46.STL 47.OUT 48.OUT 49.STL 50.STL 51.LD 52.AND 53.SET 54.RET 55.END S23 Y001 T2
K20 T2
S24
S24 Y002 T3
K100
S31 Y003 T4
K100
T4
S32
S32 Y004 T5 T5 S33
S33 T6
K30
T6
M8013 Y004
T6
S34
S34
Y005
T7
S24
S34
T3
T7
S0
附加任務(wù)
機(jī)械手手動(dòng)控制實(shí)驗(yàn)
控制要求1:
實(shí)現(xiàn)機(jī)械手左右移動(dòng)。
按下向左按鈕,機(jī)械手向左移動(dòng),到達(dá)左限位開(kāi)關(guān)后停止;按下向右按鈕,機(jī)械手向右移動(dòng),到達(dá)右限位開(kāi)關(guān)后停止。
控制要求2:
實(shí)現(xiàn)機(jī)械手上下移動(dòng)。
按下向上按鈕,機(jī)械手向上移動(dòng),到達(dá)上限位開(kāi)關(guān)后停止;按下向下按鈕,機(jī)械手向下移動(dòng),到達(dá)下限位開(kāi)關(guān)后停止。
控制要求3:
實(shí)現(xiàn)機(jī)械手左右、上下移動(dòng)。
按下向左按鈕,機(jī)械手向左移動(dòng),到達(dá)左限位開(kāi)關(guān)后停止,按下向右按鈕,機(jī)械手向右移動(dòng),到達(dá)右限位開(kāi)關(guān)后停止。
按下向上按鈕,機(jī)械手向上移動(dòng),到達(dá)上限位開(kāi)關(guān)后停止;按下向下按鈕,機(jī)械手向下移動(dòng),到達(dá)下限位開(kāi)關(guān)后停止。
控制要求4:
實(shí)現(xiàn)上述控制后,機(jī)械手電磁鐵在A位置可吸引提取物料(鐵塊)或釋放物料。機(jī)械手電磁鐵在B位置同樣可吸引提取物料(鐵塊)或釋放物料。
可手動(dòng)操作實(shí)現(xiàn)物料從A位置移動(dòng)到B位置或從B位置移到達(dá)A位置。
總
結(jié)
這是一個(gè)比較典型的十字路口交通燈的梯形圖設(shè)計(jì),最為一種設(shè)計(jì)實(shí)踐,主要是為PLC在交通控制系統(tǒng)中提出一種設(shè)計(jì)理論,為以后PLC在復(fù)雜的控制系統(tǒng)中提出一種可行的理論方案。在實(shí)際應(yīng)用中,采用PLC控制城市交通信號(hào)燈,能根據(jù)不同路況要求,隨時(shí)修改控制程序,以改變各信號(hào)燈的工作時(shí)間和工作狀況。與繼電器或邏輯電路控制系統(tǒng)相比,PLC控制系統(tǒng)具有更高的可靠性、靈活性和經(jīng)濟(jì)實(shí)用性。
通過(guò)這次設(shè)計(jì)實(shí)踐,我鞏固了PLC的基本編程方法,對(duì)PLC的工作原理和使用方法也有了更深刻的理解。在對(duì)理論的運(yùn)用中,提高了我們的工程素質(zhì),當(dāng)我們把自己想出來(lái)的程序與到PLC的時(shí)候問(wèn)題出現(xiàn)了,不是不能運(yùn)行,就是運(yùn)行的結(jié)果和要求的結(jié)果不相符。通過(guò)解決一個(gè)個(gè)在調(diào)試中出現(xiàn)的問(wèn)題,我們對(duì)PLC的理解加強(qiáng)了,看到了實(shí)踐與理論的差距,通過(guò)此次課程,讓我了解了PLC梯形圖、指令表、順序功能圖有了更好的了解,也讓我了解了關(guān)于PLC設(shè)計(jì)原理。有很多設(shè)計(jì)理念來(lái)源于實(shí)際,從中找出最合適的設(shè)計(jì)方法。
第四篇:?jiǎn)纹瑱C(jī)交通燈控制程序
#include
//*****define led port ********** sbit R1=P2^4;//east and west red led sbit Y1=P2^3;//east and west yellow led sbit G1=P2^2;//east and west green led sbit R2=P2^5;//south and north red led sbit Y2=P2^6;//south and north yellow led sbit G2=P2^7;//south and north green led
//*********define key************** sbit k0=P3^0;//emergency sbit k1=P3^1;//east and west pass sbit k2=P3^2;//south and north pass sbit k3=P3^3;//start and subtract 1 sbit k4=P3^4;//pause and add 1 sbit k5=P3^5;//set time
//*********define variable********* bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pass_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num;
//*********define key******** void delay(uint i){ uint x,y;for(x=i;x>0;x--)
for(y=110;y>0;y--);} void timer0_init(){ TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;}
void led_display(uchar dx,nb){ uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx>99){
led_w1=1;
led_w2=1;} else {
led_w1=0;
P0=table[dx1];
delay(5);
led_w1=1;
if(dx<10&&dx>0)led_w2=1;
else
{
led_w2=0;
P0=table[dx2];
delay(5);
led_w2=1;
} } if(nb>99){
led_w3=1;
led_w4=1;} else {
led_w3=0;
P0=table[nb1];
delay(5);
led_w3=3;
if(nb<10&&nb>0)led_w4=1;
else
{
led_w4=0;
P0=table[nb2];
delay(5);
led_w4=4;
} } } //*************light work********** void circle_led(){ if(!flag){
if(pass_time>5)
{
led_display(pass_time-5,pass_time);
R1=1;Y1=1;G1=0;
//east and west pass
R2=0;Y2=1;G2=1;
//south and north stop
}
if(pass_time<=5&&pass_time>0)
{
if(cnt>=10)led_display(pass_time,pass_time);
else led_display(100,pass_time);
R1=1;G1=1;
//east and west yellow led flash
if(cnt>=10)Y1=0;
else Y1=1;
R2=0;Y2=1;G2=1;
}
if(pass_time==0)
{
pass_time=nb_time;
flag=1;
} } else {
if(pass_time>5)
{
led_display(pass_time,pass_time-5);
R1=0;Y1=1;G1=1;
//east and west stop
R2=1;Y2=1;G2=0;
//south and north pass
}
if(pass_time<=5&&pass_time>0)
{
if(cnt>=10)led_display(pass_time,pass_time);
else led_display(pass_time,100);
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt>=10)Y2=0;
else Y2=1;
}
if(pass_time==0)
{
pass_time=dx_time;
flag=0;
} } }
void emergency()
//east and west,south and north stop { led_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;} void dx_pass()
//east and west pass,south and north stop { led_display(100,100);if(y_time<=5&&y_time>0){
TR1=1;
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt1>=10)Y2=0;
else Y2=1;} if(y_time==0){
TR1=0;
R1=1;Y1=1;G1=0;
R2=0;Y2=1;G2=1;} } void nb_pass()
//south and north pass,east and west stop { led_display(100,100);if(y_time<=5&&y_time>0){
TR1=1;
R1=1;G1=1;
if(cnt1>=10)Y1=0;//east and west yellow led flash
else Y1=1;
R2=0;Y2=1;G2=1;
} if(y_time==0){
TR1=0;
R1=0;Y1=1;G1=1;
R2=1;Y2=1;G2=0;} }
//***********keyboard scan************ void keyscan(){
if(!k5num)
{
if(k0==0)//*******emergency*******
{
delay(10);
if(k0==0)
{
while(!k0);
TR0=0;
k0num=1;
}
}
if(!k1num&&!k0num)
{
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);
k1num=1;
k2num=0;
y_time=5;//單方向通行時(shí),黃燈閃爍時(shí)間
TR0=0;
TR1=1;
}
}
}
if(!k2num&&!k0num)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
while(!k2);
k1num=0;
k2num=1;
y_time=5;//單方向通行時(shí),黃燈閃爍時(shí)間
TR0=0;
TR1=1;
}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
if(k1num||k2num)pass_time=dx_time;//由東西或南北通行返回時(shí),重新開(kāi)始執(zhí)行。
k0num=0;
k1num=0;
k2num=0;
k4num=0;
k5num=0;
TR0=1;
TR1=0;
flag_t=0;
}
} {
} if(!k4&&!k0num)
//pause { delay(10);if(k4==0){
while(!k4);
TR0=0;
k4num=1;} }
if(k4num==1)
//暫停鍵按下時(shí),才可以調(diào)整兩個(gè)方向通行時(shí)間 if(k5==0){ delay(10);if(k5==0){
k5num++;
while(!k5);
switch(k5num)
{
case 1:
TR0=1;
flag_t=1;//調(diào)整時(shí)間時(shí),pass_time值不變。
k5num=1;
break;
case 2:
k5num=2;
break;
case 3:
TR0=0;
k5num=0;
pass_time=dx_time;//重新賦值
break;
} } } if(k5num!=0){ if(k3==0){
delay(10);
if(k3==0)
{
while(!k3);
switch(k5num)
{
case 1:
dx_time--;
if(dx_time<10)
break;
case 2:
nb_time--;
if(nb_time<10)
break;
}
}
}
if(k4==0)
{
delay(10);
if(k4==0)
{
while(!k4);
switch(k5num)
{
case 1:
dx_time++;
if(dx_time>=100)
break;
case 2:
nb_time++;
if(nb_time>=100)
break;
}
}
}
} } } void main(){ timer0_init();dx_time=45;nb_time=30;
dx_time=99;nb_time=99;dx_time=10;nb_time=10;
pass_time=dx_time;while(1){ keyscan();if(k0num)emergency();else { switch(k4num){
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pass();
if(k2num)nb_pass();
}
break;
case 1:
switch(k5num)
{
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pass();
if(k2num)nb_pass();
}
break;
case 1:
R1=1;Y1=1;G1=1;//調(diào)整時(shí)間時(shí),關(guān)閉所有燈
R2=1;Y2=1;G2=1;
if(cnt<=10)
led_display(100,nb_time);
else
led_display(dx_time,nb_time);
break;
case 2:
R1=1;Y1=1;G1=1;//調(diào)整時(shí)間時(shí),關(guān)閉所有燈
R2=1;Y2=1;G2=1;
if(cnt<=10)
led_display(dx_time,100);
else
led_display(dx_time,nb_time);
break;
}
break;
}
}
} } void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==20){
cnt=0;
if(flag_t==0)pass_time--;//調(diào)整時(shí)間時(shí),不執(zhí)行此操作
} } void timer1()interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt1++;if(cnt1==20){
cnt1=0;
y_time--;//單方向通行時(shí),黃燈閃爍時(shí)間。
} }
第五篇:交通燈畢業(yè)設(shè)計(jì)
4.4 程序編寫
-交通燈控制程序----------
MCS-51匯編語(yǔ)言---------
用AT89S51單片機(jī),12MHz晶振-------------------
程序名:交通燈.ASM----
交通燈控制系統(tǒng)程序-----
ORG 0000H;主程序的入口地址
AJMP MAIN;ORG 0003H AJMP INTO;ORG 0100H MAIN: MOV SP, #60H SETB EX0 SETB IT0 SETB EA;CPU MOV TMOD, #10H;MOV A , #0DEH;MOV P0 MOV R2START: ACALL DELAY DJNZ R2 DISP: MOV P0 MOV R2
DISP1: ACALL DELAY;DJNZ R2 MOV R2 WARN1: CPL P0.7;ACALL DELAY DJNZ R2 MOV P0 MOV R2 YEL1: ACALL DELAY DJNZ R2 MOV P0 MOV R2 DISP2: ACALL DELAY DJNZ R2 MOV R2 WARN2: CPL P0.2;,A,#2,START,#07EH;,#28H;,DISP1;20S,#10;,WARN1;,#0BBH;,#06,YEL1;3S,#0DBH;,#28H,DISP2,#10
指向主程序 指向緊急車輛出現(xiàn)中斷程序 ;允許INT0中斷
;設(shè)外部中斷0下降沿有效 開(kāi)中斷
置定時(shí)器1為方式1 南北紅燈,東西紅燈 ;調(diào)用0.5S子程序 南北綠燈放行,紅燈禁止 置0.5S循環(huán)次數(shù) 調(diào)用0.5S延時(shí)子程序 不到繼續(xù)循環(huán)
置南北綠燈閃爍循環(huán)次數(shù) 南北綠燈閃爍 閃爍次數(shù)未到繼續(xù)循環(huán) 南北東西黃燈警告 未到繼續(xù)循環(huán) 南北紅燈,東西綠燈 ;20S未到繼續(xù)循環(huán) 東西綠燈閃爍 ACALL DELAY DJNZ R2,WARN2 MOV P0,#0BDH;南北東西黃燈 MOV R2,#06 YEL2: ACLAA DELAY DJNZ R2,YEL2 AJMP DISP;循環(huán)執(zhí)行主程序 INT0: PUSH P0 ;P0口數(shù)據(jù)壓棧保護(hù) PUSH 03H ;R3寄存器壓棧保護(hù) PUSH TH1;TH1 PUSH TL1;TL1 MOV P0 MOV R5 DELAY0: ACLAA DELAY DJNZ R5 POP TL1;POP TH1 POP 03H RETI;DELAY: MOV R3 MOV TH1,#03CH MOV TL1,#0B0H SETB TR1 LP1: JBC R3 SJMP LP1
LP2: MOV TH1 MOV TL1 DJNZ R3 RET ENT,#0DEH;,#14H;,DELAY0;10S,#0AH,LP2,#03CH,#0B0H,LP1 壓棧保護(hù) 壓棧保護(hù)
南北東西道均為紅燈置0.5S循環(huán)初值 未到繼續(xù)循環(huán) 彈?;謴?fù)現(xiàn)場(chǎng) 返回主程序