畢業(yè)設(shè)計----交通燈仿真設(shè)計論文_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  設(shè)計要求及總體方案介紹 ………………………………………………………2</p><p>  設(shè)計課題任務(wù)………………………………………………………………2</p><p>  功能要求說明………………………………………………………………2</p><p>

2、  設(shè)計總體方案介紹及工作原理說明………………………………………3</p><p>  硬件系統(tǒng)的設(shè)計 …………………………………………………………………5</p><p>  硬件系統(tǒng)各模塊功能介紹…………………………………………………5</p><p>  電路原理圖 ………………………………………………………………8</p><p> 

3、 元器件布局圖 ……………………………………………………………8</p><p>  元器件清單 ………………………………………………………………8</p><p>  軟件系統(tǒng)的設(shè)計…………………………………………………………………9</p><p>  單片機(jī)的使用資源情況 …………………………………………………9</p><p>  軟

4、件模塊功能介紹 ………………………………………………………12</p><p>  程序流程圖 ………………………………………………………………12</p><p>  程序清單 …………………………………………………………………14</p><p>  設(shè)計總結(jié)…………………………………………………………………………15</p><p> 

5、 使用說明 …………………………………………………………………15</p><p>  仿真結(jié)果 …………………………………………………………………15</p><p>  誤差分析 …………………………………………………………………17</p><p>  設(shè)計體會 …………………………………………………………………18</p><p> 

6、 參考文獻(xiàn) ……………………………………………………………………………17</p><p>  附 錄 ………………………………………………………………………………18</p><p>  附錄一 電路原理圖……………………………………………………………18</p><p>  附錄二 元器件布局圖…………………………………………………………19</p&

7、gt;<p>  附錄三 元器件清單……………………………………………………………20</p><p>  附錄四 程序清單………………………………………………………………21</p><p>  1 設(shè)計要求及總體方案介紹</p><p>  1.1 設(shè)計課題任務(wù)</p><p>  設(shè)計一個具有特定功能的十字路口交通

8、燈。該交通燈上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“P.”, 進(jìn)入準(zhǔn)備工作狀態(tài)。按開始鍵則開始工作,按結(jié)束鍵則返回“P.”狀態(tài)。要求甲車道和乙車道兩條交叉道路上的車輛交替運(yùn)行,甲車道為主車道,每次通車時間為60秒,乙車道為次車道,每次通車時間為30秒,要求黃燈亮5秒,并且1秒閃爍一次。有應(yīng)急車輛出現(xiàn)時,紅燈全亮,應(yīng)急車輛通車時間10秒,同時禁止其他車輛通過。</p><p>  1.2 功能要求說明</p&

9、gt;<p>  本次課程設(shè)計在硬件方面的接法如下:P2口接二極管,P2.0、P2.1、P2.2口線分別來控制東西方向的綠燈、黃燈和紅燈;P2.3、P2.4、P2.5口線分別控制南北方向的紅燈、黃燈和綠燈。P0口作為數(shù)碼管的位控(這里只用到了P0.0、和P0.1兩根口線),P1口作為數(shù)碼管的段控,P3口作為輸入部分(這里用到了P3.0、P3.1、P3.2口線),控制數(shù)碼管的顯示情況和二極管的亮滅情況。</p>

10、<p>  當(dāng)交通燈上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。</p><p>  當(dāng)按下啟動按鈕K1并釋放后,數(shù)碼管顯示將會從“55”開始倒計時,每隔一秒減1,此時南北方向開始一直亮綠燈,東西方向一直亮紅燈,直到顯示為“00”時,數(shù)碼管將會從“05”開始倒計時,每隔一秒減1,此時南北方向每隔一秒黃燈就閃爍一次,東西方向亮一直紅燈,直到顯示為“00”時,數(shù)碼管將會從“25”開始倒

11、計時,此時南北方向一直亮紅燈,東西方向一直亮綠燈,直到顯示為“00”時,數(shù)碼管又將從“05”開始倒計時,此時南北方向一直亮紅燈,東西方向每隔一秒黃燈就閃爍一次;當(dāng)沒有其他鍵按下時,交通燈將這樣一直循環(huán)下去。</p><p>  當(dāng)按下結(jié)束鍵K2并釋放后,數(shù)碼管將顯示“P.”,東西南北方向無燈亮。</p><p>  當(dāng)按下緊急鍵K3并釋放后,數(shù)碼管將顯示“09”,并且每隔一秒就減1,<

12、;/p><p>  東西南北方向全部紅燈亮。</p><p>  單片機(jī)采用AT89S52,fosc=12MHZ。其按鍵功能如表1.1所示。</p><p>  表1.1 按鍵功能</p><p>  1.3 設(shè)計總體方案介紹及工作原理說明</p><p>  1.3.1 總體方案介紹</p><

13、p>  該交通燈電路由單片機(jī)AT98S52、鍵盤接口電路、顯示接口電路、發(fā)光二極管控制電路、時鐘電路和復(fù)位電路構(gòu)成,原理框圖如圖1.1所示。</p><p>  圖1.1 原理框圖</p><p>  (1) 電源提供方面</p><p>  采用獨立的穩(wěn)壓電源,此方案的優(yōu)點是穩(wěn)定可靠,且有各種成熟電路可供使用。</p><p>&l

14、t;b> ?。?) 顯示方面</b></p><p>  完全采用數(shù)碼管顯示,用來顯示有限符號和數(shù)碼字符。</p><p>  (3) 鍵盤輸入方面</p><p>  直接在I/O口線上接按鍵開關(guān),因為設(shè)計時精簡和優(yōu)化了電路,所以剩余的口資源還比較多。我們共用到了4個按鍵,分別為:K0、K1、K2、K3。</p><p>

15、  1.3.2 工作原理</p><p>  首先時鐘電路產(chǎn)生單片機(jī)工作時所需要的時鐘信號,這是單片機(jī)能夠正常工作的前提,而單片機(jī)有無定時的基礎(chǔ)以及定多長的時間,這些還需要我們?nèi)藶榈拇_定。我是采用10ms延時程序來反復(fù)調(diào)用來定時,在我們的硬件電路中,按鍵的鍵功能程序在中斷服務(wù)中,在正常情況下會不斷運(yùn)行主程序,當(dāng)有鍵按下時,CPU去轉(zhuǎn)去執(zhí)行中斷程序,而中斷程序可以執(zhí)行三種鍵功能:第一個是十秒倒計時緊急紅燈亮;第二

16、個是結(jié)束倒計時,顯示P.;第三個是重新開始倒計時。其原理是INTO=P3.4&P3.6&P3.7,當(dāng)有鍵按下時,外部中斷0口線就會變成低電平,通過鍵掃程序來具體判斷到底是哪個鍵按下,CPU才會去執(zhí)行中斷里面的某個鍵功能。12個發(fā)光二極管是由P0口控制的,P0口與二極管之間串接一個限流電阻使二極管不易燒壞,采用送低電平有效。</p><p>  2 硬件系統(tǒng)的設(shè)計</p><p

17、>  2.1 硬件系統(tǒng)各模塊功能介紹</p><p>  2.1.1 顯示及顯示驅(qū)動電路</p><p>  在本次課程設(shè)計中,為了使硬件電路更簡單化,為了節(jié)省口線,我們采用的是二位一體共陽數(shù)碼管,顯示原理跟單個LED的顯示原理完全相同, 由于七段數(shù)碼顯示器在顯示字形代碼時需要有足夠的功率,所以需在顯示器上加顯示驅(qū)動,本設(shè)計的顯示驅(qū)動是采用74LS245芯片作為驅(qū)動,并且,無論是

18、位控線上還是段控線上都串接一個電阻,以提高其輸出功率,在這里采用220歐母電阻。顯示及驅(qū)動電路圖如圖2。</p><p>  圖2.1 顯示及驅(qū)動電路</p><p>  2.1.2 指示燈控制電路 </p><p>  本次課程設(shè)計采用P2口控制二極管的發(fā)光情況,口線送低電平有效,具體設(shè)計如下:P0.2控制東西方向的綠燈,P0.3口控制東西方向的黃燈,P0.4

19、控制東西方向的紅燈,P0.5控制南北方向的紅燈,P0.6控制南北方向的黃燈,P0.7控制南北方向的綠燈。如圖2.2所示。 </p><p>  圖2.2 指示燈控制電路</p><p>  2.1.3 鍵盤控制電路</p><p>  鍵盤是最常用的輸入設(shè)備,是實現(xiàn)人機(jī)對話的紐帶。按其結(jié)構(gòu)形式可分為非編碼鍵盤和編碼鍵盤。</p><p>

20、;  編碼鍵盤采用硬件方法產(chǎn)生鍵碼。每按下一個鍵,鍵盤能自動生成鍵盤代碼,鍵數(shù)較多,且具有去抖動功能。這種鍵盤使用方便,但硬件較復(fù)雜。非編碼鍵盤僅提供按鍵開關(guān)工作狀態(tài),其鍵碼由軟件確定,這種鍵盤鍵數(shù)較少,硬件簡單,廣泛應(yīng)用于各種單片機(jī)應(yīng)用系統(tǒng),在單片機(jī)控制電路中,可把單片機(jī)使用的鍵盤分為獨立式和矩陣式兩種。獨立式實際上就是一組獨立的按鍵,這些按鍵可直接與單片機(jī)的I/O口連接,即每個按鍵獨占一條口線,這種接法簡單。矩陣式鍵盤也稱行列式鍵盤

21、,因為鍵的數(shù)目較多,所以鍵按行列組成矩陣。本設(shè)計中鍵盤數(shù)目較少,且為安裝方便,因此在本設(shè)計中采用獨立式接法。如圖2.3所示。</p><p>  圖2.3 鍵盤控制電路</p><p>  按從一個鍵到鍵的功能被執(zhí)行主要應(yīng)包括兩項工作:一是鍵的識別,即在鍵盤中找出被按的是哪個鍵,另一項是鍵功能的實現(xiàn)。第一項工作是使用接口電路實現(xiàn)的,而第二項工作則是通過執(zhí)行中斷服務(wù)程序來完成。具體來說,鍵

22、盤接口應(yīng)完成以下操作功能:</p><p>  (1) 鍵盤掃描,以判定是否有鍵被按下(稱之為“閉合鍵”)。</p><p>  (2) 鍵識別,以確定閉合鍵的行列位置。</p><p>  (3) 產(chǎn)生閉合鍵的鍵碼。</p><p>  (4) 排除多鍵、串鍵(復(fù)鍵)及去抖動。</p><p>  以上這些內(nèi)容通常是

23、以軟硬件結(jié)合的方式來完成的,即在軟件的配合下由接口電路來完成。但具體哪些由硬件哪些由軟件完成,要看接口電路的情況。總的原則是,硬件復(fù)雜軟件就簡單,硬件簡單軟件就得復(fù)雜一些。</p><p>  2.1.4 時鐘電路</p><p>  時鐘電路用來產(chǎn)生單片機(jī)工作所需要的時鐘信號,單片機(jī)本身就是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴(yán)格地按時序進(jìn)行

24、工作。通過在芯片的外部XTAL1和XTAL2兩個引腳跨接晶體振蕩器和微調(diào)電容,形成反饋電路,就構(gòu)成了一個穩(wěn)定的自激振蕩電路。時鐘電路為單片機(jī)產(chǎn)生時鐘脈沖序列,本設(shè)計中采用的晶振頻率為12MHz,電容為33pF。 </p><p>  2.1.5 復(fù)位電路</p><p>  復(fù)位電路用于產(chǎn)生復(fù)位信號,通過RST引腳送入單片機(jī),復(fù)位是單片機(jī)的初始操作,其主要功能是:為一些專用寄

25、存器設(shè)置初始狀態(tài)、程序狀態(tài)字PSW清0、程序計數(shù)器PC被賦值為0000H等,除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需安裝復(fù)位鍵以重新啟動。RST引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效,完成復(fù)位操作共需要24個狀態(tài)周期,復(fù)位結(jié)束后,單片機(jī)從地址0000H單元開始執(zhí)行程序,SP為07H,其它寄存器大多數(shù)被置為00H,本設(shè)計使用頻率為12MHz的晶振,所以復(fù)位信號持續(xù)時間應(yīng)超過2μ

26、s才能完成復(fù)位操作。復(fù)位電路分為上電復(fù)位、按鍵復(fù)位、按鍵脈沖復(fù)位三種,本次課程設(shè)計采用的是按鍵復(fù)位。</p><p>  2.2 電路原理圖</p><p>  電路原理圖見附錄一所示。</p><p>  2.3 元器件布局圖</p><p>  元器件布局圖見附錄二所示。</p><p>  2.4 元器件清

27、單</p><p>  元器件清單見附錄三所示。</p><p>  3 軟件系統(tǒng)的設(shè)計</p><p>  3.1 單片機(jī)的使用資源情況</p><p>  3.1.1 硬件資源使用說明</p><p>  P0口為二極管的控制端</p><p>  P1口用作地址/數(shù)據(jù)總線</p

28、><p>  P2口用作地址/數(shù)據(jù)總線</p><p>  P3.4、P3.6、P3.7口線作為鍵盤輸入端</p><p>  采用了INTO外部中斷</p><p>  既在AT89S52的P0口用來接十二個發(fā)光二極管的陰極,控制其亮與滅,P1口和P2口外接由2個LED數(shù)碼管(LED1、LED0)構(gòu)成的顯示器,用P2口作LED的段碼輸出口(P2

29、.0~P2.7對應(yīng)于LED的a~dp),P1口作LED的位控輸出線(P1.1、P1.0分別對應(yīng)于LED1、LED0),其中在P1的串行口外接2個三極管作為顯示驅(qū)動,顯示為2個數(shù)碼管(LED0~LED1)進(jìn)行動態(tài)顯示。P3口外接三個個按鍵K1、K2、K3(分別對應(yīng)于P3.4、P3.7、P3.6口)用于調(diào)整顯示接口電路。 </p><p>  3.1.2 交通燈的分配表 </p><p&g

30、t;  交通燈的口線分配如表3.1所示,“1”表示送高電平,“0”表示送低電平。</p><p>  表3.1 交通燈分配表</p><p>  3.2 軟件模塊功能介紹</p><p>  主程序模塊的主要任務(wù)是程序的初始化顯示“P.P.”,當(dāng)沒任何鍵按下時,顯示模塊將一直不變,交通燈全部是熄滅的,當(dāng)K0鍵按下并松開后開始倒計時,</p><

31、;p>  其中在時間顯示的過程中判斷是否有K0、K1和K2鍵按下,當(dāng)再次按下K0時,顯示將重新開始倒計時,如果是K1按下,將顯示“P.P.”,并且發(fā)光二極管全部熄滅,如果是K2按下,數(shù)碼管將開始十秒倒計時,并且東西南北全部亮起紅燈。</p><p>  顯示模塊包括送緩沖區(qū)模塊,BCD碼轉(zhuǎn)換和送顯示等,通過這些模塊完成了顯示的功能,并能按照我們所熟悉的時鐘時間進(jìn)行顯示。</p><p&g

32、t;  3.3 程序流程圖</p><p>  主程序的流程圖如圖3.1所示,按鍵判斷程序流程圖如圖3.2所示</p><p>  圖3.1 主程序流程圖</p><p>  圖3.2 判斷按鍵程序流程圖</p><p><b>  3.4 程序清單</b></p><p>  程序清單詳見

33、附錄五 </p><p><b>  4 設(shè)計總結(jié)</b></p><p><b>  4.1 使用說明</b></p><p>  本實驗主要是利用單片機(jī)AT89S52、數(shù)碼管和發(fā)光二極管組成,整個電路結(jié)構(gòu)比較簡單,它能實現(xiàn)以下幾個功能:</p><p><b>  時間的顯示。&l

34、t;/b></p><p>  紅黃綠燈的發(fā)光與熄滅。</p><p>  具體操作說明如下: 當(dāng)交通燈上電或按鍵復(fù)位后能自動顯示系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。當(dāng)按下啟動按鈕K1并釋放后,數(shù)碼管顯示將會從“55”開始倒計時,每隔一秒減1,此時南北方向開始一直亮綠燈,東西方向一直亮紅燈,直到顯示為“00”時,數(shù)碼管將會從“05”開始倒計時,每隔一秒減1,此時南北方向沒隔一秒黃燈

35、就閃爍一次,東西方向亮一直紅燈,直到顯示為“00”時,數(shù)碼管將會從“25”開始倒計時,此時南北方向一直亮紅燈,東西方向一直亮綠燈,直到顯示為“00”時,數(shù)碼管又將從“05”開始倒計時,此時南北方向一直亮紅燈,東西方向每隔一秒黃燈就閃爍一次;當(dāng)沒有其他鍵按下時,交通燈將這樣一直循環(huán)下去。當(dāng)按下結(jié)束鍵K2并釋放后,數(shù)碼管將顯示“P.”,東西南北方向無燈亮,當(dāng)有其它鍵按下時,就退出,去執(zhí)行該鍵的鍵功能。當(dāng)按下緊急鍵K3并釋放后,數(shù)碼管將顯示“

36、10”,并且每隔一秒就減1,東西南北方向全部紅燈亮,當(dāng)沒亮到顯示“00”就有其它鍵按下時,就退出,執(zhí)行該鍵的鍵功能,當(dāng)顯示到“00”時,就會自動退出中斷繼續(xù)完成主程序。</p><p><b>  4.2 仿真結(jié)果</b></p><p>  當(dāng)交通燈上電復(fù)位后,數(shù)碼管顯示“P.”,仿真結(jié)果如圖4.1所示;當(dāng)按下開始鍵K1后,南北方向就開始亮綠燈,東西方向開始亮紅燈

37、,顯示器并開始從60s倒計時,仿真結(jié)果如圖4.2所示;當(dāng)按下緊急鍵K3后,南北方向和東西方向均亮紅燈,顯示器并開始從10s倒計時,其仿真結(jié)果如圖4.3所示;當(dāng)按下結(jié)束鍵K2后,顯示器重新顯示“P.”,南北方向和東西方向的燈全部熄滅,其仿真結(jié)果如圖4.4所示。</p><p>  圖4.1 上電顯示</p><p>  圖4.2 按下開始鍵后的顯示</p><p>

38、;  圖4.3 按下緊急鍵后的顯示</p><p>  圖4.4 按下結(jié)束鍵后的顯示</p><p><b>  4.3 誤差分析</b></p><p>  本次課程設(shè)計的誤差就在于顯示時間,我采用的是調(diào)用延時程序來讓顯示器上數(shù)字共顯示一秒鐘,而循環(huán)一次的時間并不僅僅只是2次調(diào)用延時程序的時間,其間CPU還執(zhí)行其它指令,例如說將緩存區(qū)的

39、內(nèi)容送給累加器A、查表指令、將段控碼送給P2口等等,因為它們都是微秒級的,而延時程序是毫秒級的,因此在計算的過程中就可以省略了,每次循環(huán)除兩次調(diào)用延時程序外,所用時間為22微秒,而顯示一秒鐘共循環(huán)了50次,因此在顯示器上只需要顯示1秒數(shù)字,事實上多顯示了1100微秒,誤差率=1.1%。</p><p><b>  4.4 設(shè)計體會</b></p><p>  我們經(jīng)

40、過一個多星期的時間,終于完成了這次的課程設(shè)計,在這期間,通過同組成員的努力配合以及其他同學(xué)們的幫助,并提出了許多寶貴的意見,使這次設(shè)計終于完滿成功了。</p><p>  我覺得這次課程設(shè)計的難點就在于時間的定時,我原本是想用計數(shù)/定時器來定時100ms,再通過幾次循環(huán)就可以使顯示每個數(shù)在數(shù)碼管上顯示一秒,可是程序編了很多遍,最后還是沒有成功,所以我采用延時的方法,讓數(shù)碼管上的數(shù)字顯示一秒再遞減,我延時的方法如下

41、:先送個位上的數(shù)到顯示器,然后調(diào)用延時程序(用的是10ms的延時),再送上十位上的數(shù)到顯示器,然后再調(diào)用這個延時程序,因為這兩個數(shù)一共要顯示1秒鐘時間,而我送上去只花了20ms,所以我用了一個循環(huán)顯示程序,讓它循環(huán)顯示50次即可。這種方法沒有采用定時器精確,不能用在較正式的場合。</p><p>  關(guān)于交通燈的設(shè)計,我認(rèn)真查閱資料,比如說要了解89S52各個芯片的引腳功能,怎樣使用這個可編程芯片并行接口芯片,在

42、上學(xué)期理論學(xué)習(xí)的基礎(chǔ)上,又下了一次苦功夫,算是明白了設(shè)計一個系統(tǒng)的過程,也讓我體會到要成功的設(shè)計出某個東西,光靠專業(yè)知識是不夠的,必須要系統(tǒng)的知識,無論在哪個方面都要有個明白的概念,知道哪些是需要的資料。對于這次的實物,我們采用的單面板制作,但是我們是做了兩次才成功的,第一次的問題主要是線設(shè)置的比較細(xì),容易斷掉,排列的比較緊,給人的感覺就是不美觀,當(dāng)我第二次再畫PCB時,我就特意注意了這些細(xì)節(jié),重新排了一下版,調(diào)整了元器件之間的距離,并

43、加大了線的寬度,加大了焊孔的內(nèi)外直徑。</p><p>  雖然過程是辛苦的,但在這一個多星期的時間里我也學(xué)到了很多。并讓我對單片機(jī)產(chǎn)生了更大的興趣。</p><p><b>  參考文獻(xiàn)</b></p><p>  李廣弟,朱月秀.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2007.100~154</p><p>

44、;  Li Guangdi, Zhu Yue-Xiu. Microcontroller-based [M]. Beijing: Beijing University of Aeronautics and Astronautics Press, 2007.100 ~ 154</p><p>  張毅坤.單片微型計算機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,1998.125~130 </p>&

45、lt;p>  ZHANG Yikun. Single Chip Microcomputer Principle and Application [M]. Xi'an: Xidian University Press, 1998.125 ~ 130 </p><p>  李光飛.單片機(jī)課程設(shè)計實例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2004.55~63</p><p> 

46、 Li Guangfei. Microcontroller examples to guide curriculum design [M]. Beijing Beijing University of Aeronautics and Astronautics Press, 2004.55 ~ 63</p><p>  謝自美.電子線路·設(shè)計·實驗·測試[M].武漢:華中大學(xué)出版社,2

47、006.242~247</p><p>  Xie Zimei. Electronic circuit? design ? Experimental ? Test [M]. Wuhan: Huazhong University Press, 2006.242 ~ 247</p><p>  李東生,張勇,許四毛.protel99s電路設(shè)計與應(yīng)用[M].北京:電子工業(yè)出版社,2004.78

48、~110</p><p>  Li Dongsheng, Zhang Yong, Xu Simao. Protel99s circuit design and application [M]. Beijing: Electronic Industry Press, 2004.78 ~ 110</p><p>  漲紅潤,馬平安,張亞凡.單片機(jī)原理及應(yīng)用[M].北京:科學(xué)出版社,2002.&

49、lt;/p><p><b>  113~118</b></p><p>  Zhang Hongrun, Ma Pingan, Ya-who. Microcontroller Theory and Application [M]. Beijing: Science Press, 2002.113~118</p><p><b>  附

50、錄</b></p><p>  附錄一 電路原理圖</p><p>  附錄二 元器件布局圖</p><p><b>  附錄五 程序清單</b></p><p><b>  本程序的相關(guān)設(shè)定:</b></p><p>  顯示器的設(shè)定:P0.0——P0.1

51、控制顯示器的個位和十位的位選碼</p><p>  P1.0——P1.7控制顯示器的段選碼</p><p>  按鍵的設(shè)定: P3.0——P3.2控制交通燈的開啟準(zhǔn)備,返回準(zhǔn)備,緊急事件狀態(tài)</p><p>  A_BIT EQU 60H ;數(shù)碼管個位數(shù)存放內(nèi)存位置 </p><p>  B_BIT EQU 61H ;數(shù)碼管十位數(shù)存放內(nèi)存位置

52、 </p><p>  TEMP EQU 62H ;計數(shù)器數(shù)值存放內(nèi)存位置 </p><p>  ORG 0000H</p><p>  LJMP MAIN</p><p>  MAIN: MOV 79H, #11H ;程序開始</p><p>  MOV 7AH, #10H;準(zhǔn)備

53、狀態(tài)</p><p>  MOV P2, #00H;交通燈全部滅</p><p>  YY: LCALL DIS;調(diào)用準(zhǔn)備狀態(tài)顯示</p><p><b>  LCALL KEY</b></p><p>  LJMP YY;無按鍵返回開始</p><p>  ;

54、################準(zhǔn)備狀態(tài)顯示程序#############</p><p>  DIS: MOV R0, #79H;顯示程序</p><p>  MOV R3, #01H</p><p>  MOV A, R3</p><p>  LDD: MOV P0, A<

55、/p><p>  MOV A, @R0</p><p>  MOV DPTR, #TABLE</p><p>  MOVC A, @A+DPTR</p><p>  DIR1: MOV P1, A</p><p>  LCALL DL ;延時1ms</

56、p><p><b>  INC R0</b></p><p>  MOV A, R3</p><p>  JB ACC.1, LDD1</p><p><b>  RL A</b></p><p>  MOV R3, A</p>

57、<p><b>  LJMP LDD</b></p><p>  LDD1: RET</p><p>  ;****************延時1ms子程序****************</p><p>  DL: MOV R5, #5 ;延時1ms程序</p><p>  DDL

58、1: MOV R6, #100</p><p>  DDL2: DJNZ R6, DDL2</p><p>  DJNZ R5, DDL1</p><p><b>  RET</b></p><p>  ;%%%%%%%%%%%%%%%%%%%%數(shù)據(jù)列表%%%%%%%%%%%%%%

59、%%%%</p><p>  TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, </p><p><b>  0F8H </b></p><p>  DB 80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8EH, 0FFH, 0C

60、H</p><p>  ;##################按鍵掃描子程序##############</p><p>  KEY: MOV P3, #0FFH</p><p>  MOV A, P3 </p><p>  ANL A, #0FFH</p><p>

61、;<b>  CPL A</b></p><p>  JZ EKEY ;A=00H時無鍵按下,A≠00H時有鍵按下</p><p>  LCALL DEL10 ;去抖動,調(diào)用10ms延時程序</p><p>  MOV A, P3</p><p>  A

62、NL A, #0FFH</p><p><b>  CPL A</b></p><p>  JZ EKEY</p><p>  MOV B, A</p><p>  KEY2: MOV A, P3</p><p>  ANL A,

63、 #0FFH ;判鍵是否釋放</p><p><b>  CPL A</b></p><p>  JNZ KEY2</p><p>  LCALL DEL10</p><p>  MOV A, B</p><p><b>  CPL A</

64、b></p><p>  YY2: JNB ACC.0, PKEY1 ;k1鍵按下</p><p>  JNB ACC.1, PKEY2 ;k2鍵按下</p><p>  JNB ACC.2, PKEY3 ;K3鍵按下</p><p>  EKEY: RET</p><p&

65、gt;  ;************按鍵2的功能************</p><p>  PKEY2: LJMP MAIN</p><p>  ;************按鍵3的功能************</p><p>  PKEY3: MOV TEMP, #10 ;初始化計數(shù)器,從10開始</p><p>

66、;  MOV P2, #00H</p><p>  SETB P2.2</p><p>  SETB P2.5</p><p>  JINJI: MOV R0, #12</p><p>  LCALL DISPLAY1</p><p>  DEC TEMP

67、 ;對計數(shù)器減1 </p><p>  MOV A, TEMP </p><p>  CJNE A,#0, JINJI ;判斷計數(shù)器是否滿0?</p><p>  MOV R0, #12</p><p>  LCALL DISPLAY1</p><p>  MOV P2,

68、 #00H</p><p>  LCALL MAIN</p><p>  ;*************按鍵1的功能************</p><p>  PKEY1:MOV TEMP, #55 ;初始化計數(shù)器,從60開始 </p><p>  SETB P2.0 ;南北方向紅燈亮

69、</p><p>  SETB P2.5 ;東西方向綠燈亮 </p><p>  STLOP1: MOV R0, #12</p><p>  ACALL DISPLAY1 ;調(diào)用顯示子程序 </p><p>  DEC TEMP ;對計數(shù)器減1 <

70、/p><p>  MOV A, TEMP ; </p><p>  CJNE A,#0, STLOP1 ;判斷計數(shù)器是否滿0? </p><p>  CLR P2.0 ;南北方向紅燈滅 </p><p>  SETB P2.5 ;東西方向綠燈 </p>

71、<p>  ACALL SHAN ;調(diào)用黃燈閃爍程 </p><p>  STAR2: MOV TEMP, #25 ;重新開始開始60秒倒數(shù)</p><p>  MOV P2, #00H</p><p>  SETB P2.3 ;東西方向紅燈亮</p><

72、;p>  SETB P2.2 ;南北方向綠燈亮 </p><p>  STLOP2: MOV R0, #12</p><p>  ACALL DISPLAY1 ;調(diào)用數(shù)碼管顯示子程序 </p><p>  DEC TEMP ;計數(shù)器減一 </p><p&g

73、t;  MOV A, TEMP </p><p>  CJNE A,#0, STLOP2 ;判斷計數(shù)器是否為0? </p><p>  SETB P2.2 </p><p>  CLR P2.3 </p><p>  ACALL SHAN ;調(diào)用黃燈閃爍子程?</p>

74、<p>  CLR P2.2 </p><p>  LJMP PKEY1 ; </p><p>  ;####################顯示子程序1###################</p><p>  DISPLAY1: MOV A, TEMP </p><p>  MOV B,

75、 #10 </p><p><b>  DIV AB </b></p><p>  MOV B_BIT, B ;個位在B </p><p>  MOV A_BIT, A ;十位在A </p><p>  MOV DPTR, #TABLE ;指定查表啟始地址 <

76、/p><p>  DPL1: MOV R1, #250 </p><p>  DPLOP1: MOV A, A_BIT ;取個位數(shù) </p><p>  MOVC A, @A+DPTR ;查個位數(shù)的7段代碼 </p><p>  MOV P1, A ;送出個位的7段代碼 &

77、lt;/p><p>  SETB P0.0 ; 開個位顯示 </p><p>  ACALL D1MS ;顯示162微秒 </p><p>  CLR P0.0 ;關(guān)閉個位顯示,防止鬼影 </p><p>  MOV A, B_BIT ;取十位數(shù) &

78、lt;/p><p>  MOVC A, @A+DPTR ;查十位數(shù)的7段代碼 </p><p>  MOV P1, A ;送出十位的7段代碼 </p><p>  SETB P0.1 ;開十位顯? </p><p>  ACALL D1MS ;顯示162微秒

79、 </p><p>  CLR P0.1 ;關(guān)閉十位顯示,防止鬼影 </p><p>  DJNZ R1, DPLOP1 ;循環(huán)執(zhí)行250次 </p><p>  DJNZ R0, DPL1 ;循環(huán)執(zhí)行250X4=1000次 </p><p><b>  RET</b

80、></p><p>  ;#####################顯示子程序2#################</p><p>  DISPLAY2: MOV A,TEMP </p><p>  MOV B,#10 </p><p><b>  DIV AB </b></p><

81、p>  MOV B_BIT, B ;個位在B </p><p>  MOV A_BIT, A ;十位在A </p><p>  MOV DPTR, #TABLE ;指定查表啟始地址 </p><p>  DPPL1: MOV R1, #250 </p><p>  DP

82、LOPP1: MOV A, A_BIT ;取個位數(shù) </p><p>  MOVC A, @A+DPTR ;查個位數(shù)的7段代碼 </p><p>  MOV P1, A ;送出個位的7段代碼 </p><p>  SETB P0.0 ;開個位顯示 </p><p

83、>  ACALL D1MS1 ;顯示162微秒 </p><p>  CLR P0.0 ;關(guān)閉個位顯示,防止鬼影 </p><p>  MOV A, B_BIT ;取十位數(shù) </p><p>  MOVC A, @A+DPTR ;查十位數(shù)的7段代碼 </p>&l

84、t;p>  MOV P1, A ;送出十位的7段代碼 </p><p>  SETB P0.1 ;開十位顯? </p><p>  ACALL D1MS1 ;顯示162微秒 </p><p>  CLR P0.1 ;關(guān)閉十位顯示,防止鬼影 </p>

85、<p>  DJNZ R1, DPLOPP1 ;循環(huán)執(zhí)行250次 </p><p>  DJNZ R0, DPPL1 ;循環(huán)執(zhí)行250X4=1000次 </p><p><b>  RET </b></p><p>  ;#################黃燈閃爍子程序##############

86、### </p><p>  SHAN: MOV TEMP, #5 ; </p><p>  ROUND: SETB P2.1 ; </p><p>  SETB P2.4 ;</p><p>  MOV R0, #6</p><p>  ACALL DISPLAY1

87、;黃燈閃爍五次 </p><p>  CLR P2.1 ;每次間隔一秒 </p><p>  CLR P2.4 ;</p><p>  MOV R0, #6</p><p>  ACALL DISPLAY1 </p><p>  DJNZ TEMP,ROUND ;<

88、/p><p>  MOV R0,#6</p><p>  LCALL DISPLAY1 </p><p><b>  RET ;</b></p><p>  ;####################延時子程序1#################</p><p>  D1MS: MOV R7,

89、 #80 ;2+2X80=162微秒,延時按12MHZ計算</p><p>  LCALL KEY </p><p>  DJNZ R7, $ ; </p><p><b>  RET ;</b></p><p>  ;####################延時子程序2##########

90、#######</p><p>  D1MS1: MOV R7, #80 ;2+2X80=162微秒,延時按12MHZ計算 </p><p>  DJNZ R7, $ </p><p><b>  RET ; </b></p><p>  ;#################

91、一秒延時子程序################</p><p>  DELAY: MOV R6, #10 </p><p>  YL3: MOV R4, #100 </p><p>  XL2: MOV R5, #71 </p><p>  DL1: LCALL KEY

92、;一秒延時子程序 </p><p>  DJNZ R5,DL1 </p><p>  DJNZ R4,XL2 </p><p>  DJNZ R6,YL3 </p><p><b>  RET ;</b></p><p>  ;################10毫秒延時子程序#####

93、##########</p><p>  DEL10: MOV R7, #14H ;</p><p>  DEL1: MOV R6, #0FFH</p><p>  DEL2: DJNZ R6, DEL2</p><p>  DJNZ R7, DEL1</p><p&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論