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