交通管理系統(tǒng)的設(shè)計用計算機硬件實驗系統(tǒng)完成
交通管理系統(tǒng)的設(shè)計(用計算機硬件實驗系統(tǒng)完成)
1 設(shè)計的主要內(nèi)容
設(shè)計編制一個十字路口交通監(jiān)督與管理系統(tǒng),用計算機硬件實驗系統(tǒng)中的LED和開關(guān)模擬實現(xiàn)交通管理要求,基本功能描述如下:
1)交通路線分為人行道、干線和支線,人行道有紅燈和綠燈,干線和支線有紅燈、黃燈和綠燈。
2)人行道由一個按鍵控制,當(dāng)人按下按鍵后,在正常干線和支線的綠燈時間結(jié)束后,人行道綠燈亮,干線和支線紅燈亮,維持10秒后,人行道紅燈亮,干線和支線由以下情況決定。
3)正常情況下只允許干線通車,即干線綠燈亮,支線紅燈亮。
4)當(dāng)支線上有一輛及以上車輛時請設(shè)計合理的紅黃綠燈變化規(guī)則,要求干線由綠燈變紅燈規(guī)律為:綠燈變?yōu)辄S燈,持續(xù)三秒后,變?yōu)榧t燈;支線的紅燈變?yōu)榫G燈。
5)若在支線的綠燈亮25秒期間干線M(大于)4輛車到,則應(yīng)允許干線車輛通過。此時支線綠變?yōu)辄S燈,持續(xù)3秒后,干線由紅變?yōu)榫G燈。
6)當(dāng)支線綠燈亮了25秒后,支線由綠變?yōu)辄S燈,持續(xù)3秒后,變?yōu)榧t燈;干線有紅變?yōu)榫G燈,即返回正常情況,允許干線的車輛通過。
7)當(dāng)干線由紅燈變?yōu)榫G燈后,必須維持25秒后才能返回第三步。
2 任務(wù)分工
在這次課程設(shè)計過程中我們小組的分工如下:
任務(wù)
負責(zé)人
方案設(shè)計
袁 雙、李 莫
主程序1(交通管理系統(tǒng))
李 莫、袁 雙
主程序2(交通監(jiān)督系統(tǒng))
周瑜忻、王志瑜
設(shè)計報告
袁 雙、王志瑜
程序匯總、調(diào)試
周瑜忻、李 莫
3 優(yōu)化功能
在完成交通管理系統(tǒng)的基本功能的設(shè)計以后,我們小組通過討論,決定加入以下完善和
優(yōu)化功能:
1、設(shè)計了較為合理的支線紅黃綠燈變化規(guī)則,當(dāng)干線轉(zhuǎn)為支線時,若支線來車,計給予支線10秒通行時間,時間到支線通行時間結(jié)束;若線持續(xù)來車,支線通行時間擴充到10秒(倒計時),直到通行25秒,支線通行結(jié)束。
2、考慮夜間特殊時段通行,我們設(shè)計了干線和支線黃燈閃爍,人行道燈滅:表示車輛慢行,人行道注意路況小心通行。
3、擴充干線、支線和人行道交通違規(guī)監(jiān)督功能:
①在主干線通行的時候,判斷支線和人行道是否有人闖紅燈,如果有,亮燈警視,并記錄支干道闖紅燈車輛數(shù)量;
②在支線通行的時候,判斷主干線和人行道是否有人闖紅燈,如果有,亮燈警視,并記錄主干道闖紅燈車輛數(shù)量;
③在人行道通行的時候,判斷主干道和支干道是否有人闖紅燈,如果有,亮燈警視,并記錄主干道和支干道紅燈車輛數(shù)量。
4 操作說明
在程序開始運行后,系統(tǒng)的初始狀態(tài)為干線正常運行,干線綠燈亮,支線和人行道紅燈亮。具體操作方式如下:(k1:特殊時段控制鍵;k2:人行道控制鍵;k3:支線來車;k4:干線來車;8個二極管代表干線、支線和人行道的紅黃綠燈;8段LED顯示到計時間)
1、初始狀態(tài)下,人行道控制鍵按k2下,則當(dāng)干線或支線運行結(jié)束后轉(zhuǎn)為人行道通行(時間10秒),此時干線、直線紅燈亮,人行道黃燈亮。
2、人行道通行結(jié)束后,自動轉(zhuǎn)為干線通行,按下k3,代表支線來車,當(dāng)干線通行25秒結(jié)束后干線綠燈滅轉(zhuǎn)黃燈持續(xù)3秒后紅燈亮,人行道紅燈亮,支線綠燈亮。
3、當(dāng)支線通行第一個10秒內(nèi),同時k1 、k3按下代表支線又有持續(xù)來車,此時支線通行時間返回擴充到10秒,直到通行滿25秒后結(jié)束。
4、按下k1代表進入特殊時段,此時干線、支線黃燈閃爍,當(dāng)同時按下k1 k2 k3 k4代表退出特殊時段。
5、監(jiān)督功能部分,當(dāng)主干道亮紅燈的時候,按下K2時,支干道警示燈L2亮,按下K3時,L2 L3亮;當(dāng)支干道亮紅燈的時候,按下K1時,主干道警示燈L1亮,按下K3時,L2 L3亮;當(dāng)人行道亮紅燈的時候,按下K1時,主干道警示燈L1亮,按下K2時,L2亮。
5 設(shè)計方案
根據(jù)設(shè)計要求,我們采用模塊化的編程思路,這樣便于分工協(xié)作,程序便于調(diào)試。
1)主程序1(交通管理系統(tǒng))
該模塊主要是用來實現(xiàn)交通管理系統(tǒng)的邏輯判斷功能,包括判斷開關(guān)、調(diào)用相應(yīng)的子程序,具體的判斷邏輯如下:首先循環(huán)判斷是否特殊時段控制鍵k1按下,若按下則調(diào)用黃燈閃爍子程序;若未按下程序自動調(diào)用干線運行程序,在此過程則循環(huán)掃描是否有支線和人行道控制開關(guān)按下,如沒有開關(guān)按下則循環(huán)調(diào)用干線運行程序,如有開關(guān)按下則調(diào)用對應(yīng)的子程序。程序統(tǒng)一采用8254可編程硬件延時,A口作為輸出控制8段LED顯示,B口作為輸出控制二極管C口低四位作為輸入口控制開關(guān),高四位作為輸出口控制8段LED位選。
2)主程序2(交通監(jiān)督系統(tǒng))
先對十字路口主干道和枝干道紅燈信號進行判斷,如果紅燈亮?xí)r,再對主干道和枝干道闖紅燈車輛信號進行判斷,如果有車輛闖紅燈,給與紅燈亮的警示信號,并且在LED上記錄主干道和枝干道闖紅燈數(shù)量。
6 程序流程圖
由于我們所設(shè)計的交通管理及監(jiān)督系統(tǒng)的功能模塊較多,且主程序以循環(huán)掃描支撐,主程序流程圖較為復(fù)雜,所以我們將主程序與子程序分為兩個部分繪制了程序流程圖。
(1)主程序1(交通管理)流程圖
所有燈滅
主干道黃燈子程序
人行橫道通行子程序
黃燈閃爍子程序
主干道黃燈子程序
支路黃燈子程序
K2=1?
L=0?
支路通行子程序
主干道黃燈子程序
K3=1?
K1=1?
支路黃燈子程序
主干道黃燈子程序
人行橫道通行子程
主干道黃燈子程序
主干道黃燈子程序
人行橫道通行子程
K1=1?
K2=1?
L=0?
K2=1?
K3=1?
K2=1?
支路通行子程序
主干道通行子程序
開始
黃燈閃爍子程序
Y
N
Y
Y
N
Y
主干道綠燈,支路紅燈,人行道紅燈
N
延時1秒
N Y
Y
N
N Y
人行橫道通行子程序
Y N
K2=1?
N
Y Y
延時1秒 N
N
Y
(2)主程序2(交通監(jiān)督系統(tǒng))流程圖
開始
LED是否為A
否
否
否
否
否
否
否
是
是
是
是
亮1,2號燈
是否有人闖紅燈
亮2號燈,LED顯示計數(shù)
是否有車闖紅燈
人行道是否紅燈亮
支干道是否紅燈亮
亮1號燈,LED顯示計數(shù)
是否有車闖紅燈
主干道是否紅燈亮
給SI,DI數(shù)值表地址
顯示個位
個位是否為零?
十位是否為零?
個位減1
十位減1
個位加9
,
跳出子程序
,
開始
個位SI=5
十位DI=2
顯示十位
(3)干線通行子程序流程圖
N
Y
Y
N
(4)干線黃燈子程序流程圖
開始
LED個位賦值為3十位賦值為0
延時1秒
顯示十位
顯示個位
個位減1
個位是否為0
否
是
主干道黃燈亮
子程序結(jié)束
(5)支路黃燈子程序流程圖
開始
LED個位賦值為3十位賦值為0
延時1秒
顯示十位
顯示個位
個位減1
個位是否為0
否
是
支干道黃燈亮
子程序結(jié)束
(6)人行橫道通行子程序流程圖
LED個位賦值為0十位賦值為1
延時1秒
顯示十位
顯示個位
十位減1,個位加9
個位是否為0
否
是
干道綠燈燈亮
比較個位是否為0
個位減1
是
否
子程序結(jié)束
開始
7問題總結(jié)及心得體會
(1)9月6日下午(閱讀設(shè)計任務(wù),理解設(shè)計要求,完成方案設(shè)計):
問題:當(dāng)支線上有一輛及以上車輛時如何設(shè)計出合理的紅黃綠燈變化規(guī)則,小組討論出現(xiàn)分歧。一種想法為當(dāng)支線只要有車來(無論車輛多少),當(dāng)主線通行時間結(jié)束,人行道無人,支線就通車25秒;另一種想法為無論支線來車多少,當(dāng)主線通行時間結(jié)束,人行道無人,支線先只給予10秒通行時間,若后續(xù)支線又有車來,則通行時間擴充到10秒,直到支線通車25秒就結(jié)束通行,若后續(xù)支線無車倆來,則支線就只通行10秒后轉(zhuǎn)為主線通行或人行道通行。
方案:經(jīng)過小組討論一致認為該問題意在設(shè)計出合理的支線通行規(guī)則,應(yīng)充分考慮合理性,若選擇第一種就有可能造成支線通行時間過長,造成交通時間浪費;而第二種想法就合理的考慮到了支線路況車輛多少的情況,合理的避免了不必要的交通時間浪費。最后一致同意第二種方案。
(2)9月10日(優(yōu)化功能方案設(shè)計)(交通監(jiān)督系統(tǒng)):
問題:我們想設(shè)計一個交通違章監(jiān)督功能:記錄并顯示干線、支線和人行道上的違章交通情況,由于在設(shè)計基礎(chǔ)功能時已將實驗板上的輸入輸出口用完,沒有多余輸出口作為交通違章信息傳輸口。
方案:將基礎(chǔ)功能的交通管理系統(tǒng)與優(yōu)化功能的交通監(jiān)督系統(tǒng)分別在兩塊實驗板上實現(xiàn),并將兩塊實驗板聯(lián)機。將交通管理系統(tǒng)的干線、支線和人行道的輸出口引入到交通監(jiān)督系統(tǒng)的干線、支線和人行道信息輸入口。這樣交通監(jiān)督系統(tǒng)從管理系統(tǒng)讀到實時的交通信息來判段干線、支線和人行道是否有違章情況。
(3)9月13-15日(程序完成,進行調(diào)試):
問題1:第一次程序編譯鏈接都成功,調(diào)試時實驗板完全不能顯示,不清楚差錯出在實驗板還是程序有問題。
方案:經(jīng)過大家認真討論一致認為實驗板未讀入程序,說明程序輸入輸出控制字有誤,經(jīng)檢查初始化控制字有誤。
問題2:調(diào)試時實驗板LED顯示亂碼且不穩(wěn)定,由于程序太長,上時間無法找出程序問題,失誤在于,我們在編完各子程序時應(yīng)分塊調(diào)試,既是排除錯誤。
方案:將有LED顯示的各子程序分塊進行調(diào)試發(fā)現(xiàn)LED的延時顯示程序有誤,改延時子程序為應(yīng)用8254可編程硬件延時。
問題3:在統(tǒng)一調(diào)試功能時,有些功能一會能實現(xiàn)一會不能實現(xiàn),不穩(wěn)定。
方案:逐一檢查硬件(導(dǎo)線、插口),最后確定為部分導(dǎo)線插口接觸不良。
這次的課程設(shè)計,由于我們小組的分工明確而且組員們都十分的認真,所以我們可以較早的完成,我也認識到團隊的重要,團隊需要個人,個人也離不開團隊,必須發(fā)揚團結(jié)協(xié)作的精神。某個人的離群都可能導(dǎo)致導(dǎo)致整項工作的失敗。團隊設(shè)計中只有一個人知道原理是遠遠不夠的,必須讓每個人都知道,否則一個人的錯誤,就有可能導(dǎo)致整個工作失敗。因此這次課程設(shè)計是我們又一次難得的學(xué)習(xí)機會!
自動化學(xué)院2007級四班
袁雙 20075156
在為期兩周的課程設(shè)計中,我為了完成設(shè)計遇到了很多困難。在克服困難的過程中,我對已經(jīng)學(xué)習(xí)的知識有了更深入的理解,對一些不是學(xué)的很好的知識點也有了更加深入的理解。并且在這種理論聯(lián)系實際的過程中,對我們已經(jīng)學(xué)習(xí)的知識在實際生產(chǎn)中的應(yīng)用也有了大致的了解。對我的個人的綜合能力的提示有很大的幫助。
我們組的課程設(shè)計題目是交通監(jiān)督和管理系統(tǒng)。這個課題非常方便和實際相聯(lián)系。我們在構(gòu)想我們的系統(tǒng)的時候我們從簡單的紅綠燈變化聯(lián)想到了交通管理系統(tǒng)除了信號燈實際情況下還有哪些附屬設(shè)備,再聯(lián)想如何實現(xiàn)監(jiān)督功能。在這個過程中我們集思廣議,最后我們的系統(tǒng)由監(jiān)督系統(tǒng)和管理系統(tǒng)復(fù)合組成。并且由我和另外一個同學(xué)袁雙負責(zé)主系統(tǒng),我負責(zé)編譯程序,他幫我看并提出意見。并和我討論如何修改。
在交通管理系統(tǒng)的程序的編譯的時候,我遇見了相當(dāng)多的問題。例如怎么讓支路通行的過程更加的智能化。最后我聯(lián)想到我上過的一門課程《智能交通》。在課上,老師曾經(jīng)說過一個類似的問題,支路通行的時候給他10秒的時間。如果有車來了,再給他延時幾秒。霎時間我想到了怎么做了。我最后讓支路通行的時候初始給10秒時間,如果有車來,就把通行時間變成10秒。再另置一個計時器,讓他在支路開始通行的時候就計時,如果滿了25秒就退出程序并令一個特殊的變量L=0。而且這么做不但程序更加智能、人性化,還解決了支路通行子程序結(jié)束后的返回主程序判斷它是否是滿25秒結(jié)束的。
除了這個問題之外主干道滿25秒之后應(yīng)該怎么辦也讓我傷透了腦筋,最后我決定讓主干道通行滿25秒后,不在倒計時且讓信號燈閃爍。提示駕駛員謹慎駕駛。并且做一個大循環(huán)不停的檢測是否有人按下人行橫道開關(guān),支路是否有車來。
最后也是我遇見的最麻煩的一件事情,怎么才可以讓系統(tǒng)的時間準(zhǔn)確。倒計時25秒就真的是25秒。最后我不停在書上尋找,最后找到了一個方法。利用電腦里面自帶的8254和8259來做,把0給8254計數(shù)器,那么他的計數(shù)時間為十八分之一秒。然后給8254一個初始的數(shù)18。就可以完成一秒的倒計時了。
在這個工作中我遇見的問題,以后工作也有可能遇見,在這種理論聯(lián)系實際的課程之中,我的能力得到了提升,知識得到了拓寬,對實際問題的思考方式也更加的有邏輯性。
自動化學(xué)院2007級四班
李 莫 20075023
經(jīng)過這兩個星期的課程設(shè)計,我從中復(fù)習(xí)了大三上學(xué)習(xí)的計算機硬件技術(shù)基礎(chǔ),并運用其中的知識設(shè)計了十字路口交通燈系統(tǒng)。
這兩個星期的實習(xí),通過和組員的配合,我們做出了十字路口交通燈的系統(tǒng),并且對這個系統(tǒng)的功能進行了一個非常富有創(chuàng)造性的添加功能,就是我們用一個板實現(xiàn)了十字路口交通燈的基本功能的同時,用另外一塊板實現(xiàn)了對違規(guī)車輛和行人的監(jiān)督功能。
在實現(xiàn)功能的過程中,我們遇到了重重困阻,但是團隊的力量是強大的,這是我們能夠順利做成這個課程設(shè)計的主要因素。每個組員都發(fā)揮了重要的作用。
在討論設(shè)計的功能如何實現(xiàn)的時候,我們的積極的發(fā)揮自己所學(xué)習(xí)的知識以及豐富的創(chuàng)造能力和靈活的運用所學(xué)習(xí)的知識,將我們所要實現(xiàn)的功能大體上形成了一個框架。
在設(shè)計的過程中,困難是難免的。
比如在實現(xiàn)每個環(huán)節(jié)的嵌套的過程中,對第一個環(huán)節(jié)進行判斷以后,沒有跳轉(zhuǎn)到下一個環(huán)節(jié),結(jié)果發(fā)現(xiàn)系統(tǒng)只能對主干道的闖紅燈進行判斷,不能對支干道闖紅燈的進行判斷,這個問題困擾了很長一段時間,后來才發(fā)現(xiàn)自己出了這么一個低級的錯誤。
在調(diào)試的時候,無論怎么按鍵,系統(tǒng)都沒有反應(yīng),但是看程序是沒有錯誤的,進行單步調(diào)試,系統(tǒng)還是毫無反應(yīng),結(jié)果后來才發(fā)現(xiàn)是接線的時候有兩條線接反了,才導(dǎo)致了系統(tǒng)無法進行判斷。
在對違章車輛的顯示的時候,在兩個數(shù)字顯示不一樣的時候,顯示的數(shù)字會發(fā)生異常,對程序進行了仔細的觀察和思考,沒有發(fā)現(xiàn)任何的不對,進行單步調(diào)試的時候才發(fā)現(xiàn),顯示LED1的過后,跳轉(zhuǎn)到顯示LED5的時候要先顯示LED1上的數(shù)字然后過一會才回顯示LED5應(yīng)該顯示的數(shù)字,這樣讓我不知道是什么問題,后來我問我的組員,他才給我說是要加一個延時程序才能杜絕這種事情的發(fā)生,但是延時又不能太長不然會影響顯示的速度,但是也不能過短,這樣不能解決這個問題。后來加了一個1000的延時才解決了這個問題。
通過這次課程設(shè)計,我鞏固了計算機硬件技術(shù)基礎(chǔ)的知識,更重要的是我更加感受到了團隊合作的重要性,一個人的力量終究是有限的,在一個團隊中,團隊的力量不單單是每個人能力的綜合,而是每個人力量的乘積。
自動化學(xué)院2007級四班
周瑜析 20075041
這次我們負責(zé)的是交通燈的題目,當(dāng)拿到了任務(wù)書后,我們仔細分析了題目,然后組員之間仔細討論了這個題目.后來就需要我們研究如何確定輸入輸出.很顯然開關(guān)應(yīng)該作為輸入,小燈作為交通燈應(yīng)該作為輸出.現(xiàn)在主要討論行車,行人交通燈之間的關(guān)系.然后主流交通與支路交通之間的關(guān)系. 設(shè)計的問題來了:當(dāng)人行道上有人,支路上有車時,或者支路正在通車,人行道上有人,主干道有大于等于四輛車時,誰的優(yōu)先權(quán)更高。仔細研究過后,再考慮實際的交通情況,再加上題目的要求“當(dāng)行人按下控制鍵后,在正常干線或支線綠燈時間結(jié)束后,人行道變綠燈”,一致得出結(jié)論,行人優(yōu)先,故在主干或支干通車時都要檢測是否有行人鍵按下。首先要整理出程序的流程圖。假設(shè)在干線綠燈時,有行人按鍵,那么在干線綠燈25秒之后應(yīng)讓行人通行,但是在行人通行之后又要返回到干線綠燈。這個時候又有行人按鍵,支線來車的話,由于剛才設(shè)定的人有優(yōu)先權(quán),那么又是行人通行。于是邊有可能造成:干線—人行道—干線—人行道這一循環(huán),致使干線不能通過。還有如有車不按交通燈仔細行車的監(jiān)管問題.我就是負責(zé)交通監(jiān)管方面的問題。
此次設(shè)計,我們不僅要判斷主干道和支干道以及人行道是否有違規(guī)現(xiàn)象,而且還要統(tǒng)計違規(guī)車輛的個數(shù)。
因此此次設(shè)計,要涉及很多與硬件相關(guān)的知識,比如說最常見的循環(huán)延時,還有要值得注意的是確定8255控制字.這個編程序最基礎(chǔ)的東西,也是老師在課堂上講的比較多的。
以前在學(xué)習(xí)的時候,對這些硬件相關(guān)的知識還不是很了解,但在此次實驗之后,我有了新的認識和理解,加強了對相關(guān)知識的熟悉和了解。并學(xué)到了以前不知道的知識。譬如說子程序的調(diào)用,8254延時功能的級連,都是我以前都不怎么理解的東西。還有就是中斷,我在跟我同學(xué)討論相關(guān)知識,還是不怎么明白,感覺很困難。
總之,在這次實驗之后,我對匯編語言有了新的認識,掌握了大概的程序設(shè)計方法,還強化了自己處理實際問題的能力。
自動化學(xué)院2007級四班
王志瑜 20075129
8程序清單
.486
DATA SEGMENT
S DB 09H
L DB 05H
DISNM DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H,88H,83H,0C6H,0A1H,86H,8EH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,20BH ;控制字
MOV AL,81H
OUT DX,AL
*******************主程序1(交通管理系統(tǒng))***********************
T1: MOV CX,1000
T100: LOOP T100
MOV DX,20AH ;判斷特殊時間黃燈閃爍開關(guān)
IN AL,DX
AND AL,01H
CMP AL,01H
JE T10
JMP T11
T10: CALL Yellow ;黃燈閃爍子程序
T11: CALL LmG ;調(diào)用主干道通行子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
MOV DX,20AH ;判斷人行開關(guān)
IN AL,DX
AND AL,02H
CMP AL,02H
JNE T2
CALL LmY ;調(diào)用主干道黃燈子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
CALL LpG ;調(diào)用人行橫道通行子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
JMP T1
T2: MOV DX,20AH ;判斷支線開關(guān)
IN AL,DX
AND AL,04H
CMP AL,04H
JNE T40
JE T21
T21: CALL LmY ;調(diào)用主干道黃燈子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
CALL LbG ;調(diào)用支路通行子程序
CALL LbY ;調(diào)用支路黃燈子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
MOV AL,L ;判斷支路通行時間是否滿25秒
CMP AL,00H
JE T3
JMP T1
T3: MOV DX,20AH ;判斷人行開關(guān)
IN AL,DX
AND AL,02H
CMP AL,02H
JNE T1
CALL LpG ;調(diào)用人行橫道通行子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
JMP T1
T40: MOV DX,20AH
IN AL,DX
AND AL,04H
CMP AL,04H
JNE T401
CALL LmY ;調(diào)用主干道黃燈子程序
CALL LbG ;調(diào)用支線通行子程序
CALL LbY ;調(diào)用支線黃燈子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
MOV AL,L ;判斷支線通行時間是否滿25秒
CMP AL,00H
JE T3
JMP T1
T401: MOV DX,20AH ;判斷人行開關(guān)
IN AL,DX
AND AL,02H
CMP AL,02H
JNE T402
CALL LmY ;調(diào)用主干道黃燈子程序
CALL LpG ;調(diào)用人行橫道通行子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
JMP T1
**********延時程序************
T402: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
T41: INT 1AH ;讀日時鐘中斷向量
CMP BX,DX
JE T42
MOV AL,32H ;主干道綠燈,支路紅燈,人行道紅燈
MOV DX,209H
OUT DX,AL
MOV DX,20AH ;判斷特殊時間黃燈閃爍開關(guān)
IN AL,DX
AND AL,01H
CMP AL,01H
JE T411
JMP T41
T411: CALL Yellow ;黃燈閃爍子程序
JMP T1
T412: JMP T41
T42: MOV DX,20AH ;判斷支線是否來車
IN AL,DX
AND AL,04H
CMP AL,04H
JNE T421
CALL LmY ;調(diào)用主干道黃燈子程序
CALL LbG ;調(diào)用支線通行子程序
CALL LbY ;調(diào)用支線黃燈子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
MOV AL,L ;判斷支線通行時間是否滿25秒
CMP AL,00H
JE T3
JMP T1
T421: MOV DX,20AH ;判斷人行開關(guān)
IN AL,DX
AND AL,02H
CMP AL,02H
JNE T422
CALL LmY ;調(diào)用主干道黃燈子程序
CALL LpG ;調(diào)用人行橫道通行子程序
MOV DX,208H ;顯示LED清除
MOV AL,0FFH
OUT DX,AL
JMP T1
T422: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
T43: INT 1AH
CMP BX,DX
JE T40
MOV AL,00H ;所有燈滅
MOV DX,209H
OUT DX,AL
JMP T43
*******************特殊時段子程序***********************
Yellow PROC NEAR ;黃燈閃爍子程序
Y0: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
Y1: INT 1AH ;讀日時鐘
CMP BX,DX
JE Y2
R1: MOV DX,209H ;主干道黃燈,支路黃燈,人行橫道燈滅
MOV AL,48H
OUT DX,AL
MOV DX,20AH ;判斷是否退出特殊時段
IN AL,DX
AND AL,0FH
CMP AL,0FH
JE R3
JMP Y1
Y2: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
Y3: INT 1AH ;讀日時鐘
CMP BX,DX
JE Y0
R2: MOV DX,209H ;所有燈滅
MOV AL,00H
OUT DX,AL
MOV DX,20AH ;判斷是否退出特殊時段
IN AL,DX
AND AL,0FH
CMP AL,0FH
JE R3
JMP Y3
R3: RET
Yellow ENDP
******************干線通行子程序**********************
LmG PROC NEAR ;主干道通行子程序
LEA SI,DISNM
ADD SI,5
LEA DI,DISNM
ADD DI,2
K0: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
K1: INT 1AH
CMP BX,DX
JE K2
K12: MOV CX,1000
K120: MOV AL,[DI] ;顯示十位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,10H
MOV DX,20AH
OUT DX,AL
LOOP K120
MOV CX,1000
K121: MOV AL,[SI] ;顯示個位數(shù)
MOV DX,208H
OUT DX,AL
MOV DX,20AH
MOV AL,20H
OUT DX,AL
LOOP K121
MOV AL,32H
MOV DX,209H
OUT DX,AL
JMP K1
K2: LEA BX,DISNM ;判斷個位是否為零
CMP BX,SI
JE K3
DEC SI ;個位減1
JMP K0
K3: LEA BX,DISNM ;判斷十位是否為零
CMP DI,BX
JE K4
DEC DI ;十位減1
ADD SI,9 ;個位加9
JMP K0
K4: RET
LmG ENDP
******************干線黃燈閃爍子程序**********************
LmY PROC NEAR ;主干道黃燈子程序
LEA SI,DISNM ;LED個位數(shù)為3
ADD SI,3
LEA DI,DISNM ;LEC十位數(shù)為0
Q5: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
Q6: INT 1AH
CMP BX,DX
JE Q7
MOV CX,1000
Q61: MOV AL,[DI] ;顯示十位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,10H
MOV DX,20AH
OUT DX,AL
LOOP Q61
MOV CX,1000
Q62: MOV AL,[SI] ;顯示個位數(shù)
MOV DX,208H
OUT DX,AL
MOV DX,20AH
MOV AL,20H
OUT DX,AL
LOOP Q62
MOV AL,52H
MOV DX,209H
OUT DX,AL
JMP Q6
Q7: DEC SI ;個位減1
LEA BX,DISNM ;判斷個位是否為零
CMP BX,SI
JE Q8
JMP Q5
Q8: RET
LmY ENDP
*******************人行道通行子程序***********************
LpG PROC NEAR
LEA SI,DISNM ;給人行道通行時間10s
ADD SI,0
LEA DI,DISNM
ADD DI,1
W0: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
W1: INT 1AH
CMP BX,DX
JE W2
MOV CX,1000
W11: MOV AL,[DI] ;顯示十位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,40H
MOV DX,20AH
OUT DX,AL
LOOP W11
MOV CX,1000
W12: MOV AL,[SI] ;顯示個位數(shù)
MOV DX,208H
OUT DX,AL
MOV DX,20AH
MOV AL,80H
OUT DX,AL
LOOP W12
MOV AL,91H
MOV DX,209H
OUT DX,AL
JMP W1
W2: LEA BX,DISNM ;判斷個位是否為0
CMP BX,SI
JE W3
DEC SI
JMP W0
W3: LEA BX,DISNM ;判斷十位是否為0
CMP DI,BX
JE W4
DEC DI
ADD SI,9
JMP W0
W4: RET
LpG ENDP
*******************支線通行子程序***********************
LbG PROC NEAR
LEA SI,DISNM ;支線通車10s
ADD SI,0
LEA DI,DISNM
ADD DI,1
MOV AL,05H ;令L=5
MOV L,AL
MOV AL,19H ;令S=25
MOV S,AL
E0: MOV AL,36H ;8254可編程硬件延時1s
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
E1: INT 1AH
CMP BX,DX
JE E2
MOV CX,1000
TD1: MOV AL,[DI] ;顯十位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,20H
MOV DX,20AH
OUT DX,AL
LOOP TD1
MOV CX,1000
TD2: MOV AL,[SI] ;顯個位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,40H
MOV DX,20AH
OUT DX,AL
LOOP TD2
MOV AL,86H
MOV DX,209H
OUT DX,AL
MOV DX,20AH ;判斷主干通行條件是否達成
IN AL,DX
AND AL,08H
CMP AL,08H
JE E4
MOV DX,20AH ;判斷支路是否繼續(xù)來車
IN AL,DX
AND AL,05H
CMP AL,05H
JE E6
E11: JMP E1
E2: LEA AX,DISNM ;判斷個位是否為0
CMP AX,SI
JE E3
DEC SI
MOV AL,S ;判斷是否滿25秒
CMP AL,00H
JE E5
MOV AL,S ;S=S-1
DEC AL
MOV S,AL
JMP E0
E3: LEA AX,DISNM ;判斷十位是否為0
CMP AX,DI
JE E4
DEC DI
ADD SI,9
MOV AL,S ;判斷是否滿25s
CMP AL,00H
JE E5
MOV AL,S ;s=s-1
DEC AL
MOV S,AL
JMP E0
E4: RET
E5: MOV AL,00H ;令L=0
MOV L,AL
JMP E4
E6: LEA SI,DISNM ;持續(xù)來車支線通車擴充到10s
ADD SI,0
LEA DI,DISNM
ADD DI,1
JMP E11
LbG ENDP
******************支線黃燈閃爍子程序********************
LbY PROC NEAR
LEA SI,DISNM ;支線黃燈時間顯示
ADD SI,3
LEA DI,DISNM
G5: MOV AL,36H
OUT 43H,AL
MOV AL,0
OUT 40H,AL
OUT 40H,AL
MOV AH,0
INT 1AH
ADD DX,18
MOV BX,DX
G6: INT 1AH
CMP BX,DX
JE G7
MOV CX,1000
G61: MOV AL,[DI] ;顯十位數(shù)
MOV DX,208H
OUT DX,AL
MOV AL,20H
MOV DX,20AH
OUT DX,AL
LOOP G61
MOV CX,1000
G62: MOV AL,[SI] ;顯個位數(shù)
MOV DX,208H
OUT DX,AL
MOV DX,20AH
MOV AL,40H
OUT DX,AL
LOOP G62
MOV AL,8AH
MOV DX,209H
OUT DX,AL
JMP G6
G7: LEA BX,DISNM ;判斷個位是否為0
CMP BX,SI
JE G8
DEC SI
JMP G5
G8: RET
LbY ENDP
CODE ENDS
END START
***********************主程序2(交通監(jiān)督系統(tǒng))************************
.486
DATA SEGMENT
MESS1 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H,88H
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;初始化程序
MOV DS,AX
MOV DX,20BH
MOV AL,89H
OUT DX,AL
A1: MOV DX,209H ;給SI初始地址