第一篇:基于AT89S51單片機(jī)多功能交通燈控制系統(tǒng)設(shè)計(jì)下載
交通燈控制系統(tǒng)設(shè)計(jì)
摘要:本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤(pán)、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)控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則
一、方案比較、設(shè)計(jì)與論證 1 電源提供方案
為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案
方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會(huì)使系統(tǒng)復(fù)雜,且可能影響電路電平。
方案二:采用單片機(jī)控制模塊提供電源。改方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案
該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能?;谏鲜鲈?,我們考慮了三種方案:
方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號(hào)和數(shù)碼字苻,無(wú)法勝任題目要求。
方案二:完全采用點(diǎn)陣式LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作;但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數(shù)碼管與點(diǎn)陣LED 相結(jié)合的方法因?yàn)樵O(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)的顯示功能。3 輸入方案:
題目要求系統(tǒng)能手動(dòng)設(shè)燈亮?xí)r間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴(kuò)展I/O 口及鍵盤(pán),顯示等。該方案的優(yōu)點(diǎn)是:
使用靈活可編程,并且有RAM,及計(jì)數(shù)器。若用該方案,可提供較多I/O 口,但操作起來(lái)稍顯復(fù)雜。
方案二: 直接在IO口線上接上按鍵開(kāi)關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個(gè)按鍵,分別是K1、K2、K3、K4。
由于該系統(tǒng)對(duì)于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的I/O 口就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及RAM已經(jīng)夠用,故選擇方案二。
二、理論分析與計(jì)算
1.交通燈顯示時(shí)序的理論分析與計(jì)算
對(duì)于一個(gè)交通路口來(lái)說(shuō),能在最短的時(shí)間內(nèi)達(dá)到最大的車(chē)流量,就算是達(dá)到了最佳的性能,我們稱(chēng)在單位時(shí)間內(nèi)多能達(dá)到的最大車(chē)流為車(chē)流量,用公式:車(chē)流量= 車(chē)流 / 時(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)。
請(qǐng)注意圖2-1b和圖2-1d,它們?cè)谝粋€(gè)時(shí)間段中四個(gè)方向都可以通車(chē),這種狀態(tài)能在 一定的時(shí)間內(nèi)達(dá)到較大的車(chē)流量,效率特別高。
依據(jù)上述的車(chē)輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于相向的燈的狀態(tài)圖 是一樣的,所以只需寫(xiě)出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它 們的狀態(tài)在相位上相差180°。因此最終只需寫(xiě)出一組S1、S2、S3、S4的邏輯狀態(tài)表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應(yīng)的端口送邏輯值。2.交通燈顯示時(shí)間的理論分析與計(jì)算
東西和南北方向的放行時(shí)間的長(zhǎng)短是依據(jù)路口的各個(gè)方向平時(shí)的車(chē)流量來(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)改變車(chē)輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分 為主干道和次干道,主干道的放行時(shí)間大于次干道的放行時(shí)間,我們?cè)O(shè)定值時(shí)也應(yīng)以此為參 考。
三、電路圖及設(shè)計(jì)文件 1.燈控制電路設(shè)計(jì)
由于32個(gè)LED 來(lái)實(shí)現(xiàn)紅綠燈狀態(tài),若直接接在單片機(jī)的口線,路口倒計(jì)時(shí)的顯示就不 能實(shí)現(xiàn),所以本次設(shè)計(jì)中采用一種新型的電路如圖3-1 所示。
圖中74LS04的作用是倒相和驅(qū)動(dòng),它輸出的電流大約48mA,實(shí)際測(cè)試發(fā)現(xiàn)足以滿足要 求,而且發(fā)光管也能達(dá)到足夠的亮度。
觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。
圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導(dǎo)致邏輯 的錯(cuò)誤。
共四組和上述相同的電路分別代表東西南北四個(gè)方向的紅綠燈,使用兩片74LS04 作為 驅(qū)動(dòng)。
2.倒計(jì)時(shí)顯示電路設(shè)計(jì)
前面已經(jīng)分析過(guò)相向的燈的狀態(tài)和倒計(jì)時(shí)都是相同的,所以為了節(jié)省,采用兩組四個(gè)數(shù)碼管 作為倒計(jì)時(shí)的顯示;同時(shí)為了節(jié)省口資源,采用串口顯示的方式驅(qū)動(dòng)數(shù)碼管。見(jiàn)圖3-2 所 示。
四、程序設(shè)計(jì)思路與流程圖 1.主程序流程圖
主程序中主要是一個(gè)死循環(huán),不停的循環(huán)四個(gè)狀態(tài),如圖4-1 所示。
2.按鍵子程序流程圖
它包含倒計(jì)時(shí)調(diào)整和緊急狀態(tài)兩個(gè)狀態(tài)。
主程序中放了一個(gè)按鍵的判斷指令,當(dāng)有按鍵按下的時(shí)候,程序就自動(dòng)的跳轉(zhuǎn)到按鍵子 程序處理。當(dāng)檢測(cè)到K2鍵按下的時(shí)候就自動(dòng)返回到主程序。
當(dāng)出現(xiàn)緊急的情況的時(shí)候,按下K3或者K4 就切換到緊急狀態(tài),當(dāng)緊急事件處理完畢 的時(shí)候,按下K2,就可以返回正常狀態(tài)。
五、測(cè)試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測(cè)試
當(dāng)電路連接完畢后,將寫(xiě)好的測(cè)試程序刷寫(xiě)到芯片內(nèi),K1 和K2分別給端口送高電平和 低電平,通電即可檢測(cè)。2.?dāng)?shù)碼管的測(cè)試
將串口的和電路板上的接口連接,將寫(xiě)好的測(cè)試程序刷寫(xiě)到芯片內(nèi),開(kāi)電源即可測(cè)試。3.整體電路測(cè)試
系統(tǒng)上電,刷寫(xiě)好程序即可開(kāi)始測(cè)試,觀測(cè)一個(gè)周期(共計(jì)S1~S4四個(gè)狀態(tài),默認(rèn)140 秒)燈的顯示狀態(tài)是否正常,同時(shí)觀察倒計(jì)的計(jì)數(shù)是否正常。
六、總結(jié)
由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時(shí)的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。
但是在我們?cè)O(shè)計(jì)和調(diào)試的過(guò)程中,也發(fā)現(xiàn)了一些問(wèn)題,譬如紅燈和綠燈的切換還不夠迅 速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實(shí)踐中進(jìn)一步完善。參考文獻(xiàn)
[1] 李朝青.單片機(jī)原理及接口技術(shù)(修訂版).北京:北京航空航天大學(xué)出版社,1998 [2] 李廣弟.單片機(jī)基礎(chǔ).北京:北京航空航天大學(xué)出版社,1992 [3] 何立民.單片機(jī)應(yīng)用技術(shù)大全.北京:北京航空航天大學(xué)出版社,1994 [4] 張毅剛.單片機(jī)原理及接口技術(shù).哈爾濱:哈爾濱工業(yè)大學(xué)出版社,1990 [5] 譚浩強(qiáng).單片機(jī)課程設(shè)計(jì).北京:清華大學(xué)出版社,1989 Abstract This system is made up of single-chip microcomputer ,keyboard,lcd displaying module and Traffic lights system.The system includes pavement,left truning,right truning,and the basic traffic lights function.Excepting the basic traffic lights function,italso includes couting,time installing,emergency disposaling,speech cluing,lcd information displaying,adjusting the lighting time of lights based on different time and controlling with hand in accordance with circumstances and so on.附錄 系統(tǒng)總體電路圖
第二篇:?jiǎn)纹瑱C(jī):交通燈控制系統(tǒng)設(shè)計(jì)
交通燈控制系統(tǒng)設(shè)計(jì)
摘要:本系統(tǒng)由單片機(jī)系統(tǒng)、鍵盤(pán)、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)控制等功能。關(guān)鍵詞:AT89S51,交通規(guī)則
一、方案比較、設(shè)計(jì)與論證 1 電源提供方案
為使模塊穩(wěn)定工作,須有可靠電源。我們考慮了兩種電源方案
方案一:采用獨(dú)立的穩(wěn)壓電源。此方案的優(yōu)點(diǎn)是穩(wěn)定可靠,且有各種成熟電路可供選用;缺點(diǎn)是各模塊都采用獨(dú)立電源,會(huì)使系統(tǒng)復(fù)雜,且可能影響電路電平。方案二:采用單片機(jī)控制模塊提供電源。改方案的優(yōu)點(diǎn)是系統(tǒng)簡(jiǎn)明扼要,節(jié)約成本;缺點(diǎn)是輸出功率不高。綜上所述,我們選擇第二種方案。2 顯示界面方案
該系統(tǒng)要求完成倒計(jì)時(shí)、狀態(tài)燈等功能?;谏鲜鲈?,我們考慮了三種方案: 方案一:完全采用數(shù)碼管顯示。這種方案只顯示有限的符號(hào)和數(shù)碼字苻,無(wú)法勝任題目要求。
方案二:完全采用點(diǎn)陣式LED 顯示。這種方案實(shí)現(xiàn)復(fù)雜,且須完成大量的軟件工作;但功能強(qiáng)大,可方便的顯示各種英文字符,漢字,圖形等。
方案三:采用數(shù)碼管與點(diǎn)陣LED 相結(jié)合的方法因?yàn)樵O(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)的顯示功能。3 輸入方案:
題目要求系統(tǒng)能手動(dòng)設(shè)燈亮?xí)r間、緊急情況處理,我們討論了兩種方案: 方案一:采用8155擴(kuò)展I/O 口及鍵盤(pán),顯示等。該方案的優(yōu)點(diǎn)是:
使用靈活可編程,并且有RAM,及計(jì)數(shù)器。若用該方案,可提供較多I/O 口,但操作起來(lái)稍顯復(fù)雜。
方案二: 直接在IO口線上接上按鍵開(kāi)關(guān)。因?yàn)樵O(shè)計(jì)時(shí)精簡(jiǎn)和優(yōu)化了電路,所以剩余的口資源還比較多,我們使用四個(gè)按鍵,分別是K1、K2、K3、K4。由于該系統(tǒng)對(duì)于交通燈及數(shù)碼管的控制,只用單片機(jī)本身的I/O 口就可實(shí)現(xiàn),且本身的計(jì)數(shù)器及RAM已經(jīng)夠用,故選擇方案二。
二、理論分析與計(jì)算
1.交通燈顯示時(shí)序的理論分析與計(jì)算
對(duì)于一個(gè)交通路口來(lái)說(shuō),能在最短的時(shí)間內(nèi)達(dá)到最大的車(chē)流量,就算是達(dá)到了最佳的性能,我們稱(chēng)在單位時(shí)間內(nèi)多能達(dá)到的最大車(chē)流為車(chē)流量,用公式:車(chē)流量= 車(chē)流 / 時(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)。
請(qǐng)注意圖2-1b和圖2-1d,它們?cè)谝粋€(gè)時(shí)間段中四個(gè)方向都可以通車(chē),這種狀態(tài)能在
一定的時(shí)間內(nèi)達(dá)到較大的車(chē)流量,效率特別高。
依據(jù)上述的車(chē)輛行駛的狀態(tài)圖,可以列出各個(gè)路口燈的邏輯表,由于相向的燈的狀態(tài)圖
是一樣的,所以只需寫(xiě)出相鄰路口的燈的邏輯表;根據(jù)圖2-3 可以看出,相鄰路口的燈它
們的狀態(tài)在相位上相差180°。因此最終只需寫(xiě)出一組S1、S2、S3、S4的邏輯狀態(tài)表。
如表2-1 所示。
表中的“×”代表是紅燈亮(也代表邏輯上的0),“√”是代表綠燈亮(也代表邏輯上 的1),依上表,就可以向相應(yīng)的端口送邏輯值。2.交通燈顯示時(shí)間的理論分析與計(jì)算
東西和南北方向的放行時(shí)間的長(zhǎng)短是依據(jù)路口的各個(gè)方向平時(shí)的車(chē)流量來(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)改變車(chē)輛的放行時(shí)間。按照一般的規(guī)則,一個(gè)十字路口可分
為主干道和次干道,主干道的放行時(shí)間大于次干道的放行時(shí)間,我們?cè)O(shè)定值時(shí)也應(yīng)以此為參 考。
三、電路圖及設(shè)計(jì)文件 1.燈控制電路設(shè)計(jì)
由于32個(gè)LED 來(lái)實(shí)現(xiàn)紅綠燈狀態(tài),若直接接在單片機(jī)的口線,路口倒計(jì)時(shí)的顯示就不
能實(shí)現(xiàn),所以本次設(shè)計(jì)中采用一種新型的電路如圖3-1 所示。
圖中74LS04的作用是倒相和驅(qū)動(dòng),它輸出的電流大約48mA,實(shí)際測(cè)試發(fā)現(xiàn)足以滿足要
求,而且發(fā)光管也能達(dá)到足夠的亮度。
觀察圖可以看出:兩組發(fā)光管(一組紅、一組綠)由于反相器的作用,其邏輯狀態(tài)恰恰 相反。
圖中和電阻串聯(lián)的二極管的作用是為了分壓,防止因上下兩組發(fā)光管分壓不同導(dǎo)致邏輯 的錯(cuò)誤。
共四組和上述相同的電路分別代表東西南北四個(gè)方向的紅綠燈,使用兩片74LS04 作為 驅(qū)動(dòng)。
2.倒計(jì)時(shí)顯示電路設(shè)計(jì)
前面已經(jīng)分析過(guò)相向的燈的狀態(tài)和倒計(jì)時(shí)都是相同的,所以為了節(jié)省,采用兩組四個(gè)數(shù)碼管
作為倒計(jì)時(shí)的顯示;同時(shí)為了節(jié)省口資源,采用串口顯示的方式驅(qū)動(dòng)數(shù)碼管。見(jiàn)圖3-2 所 示。
四、程序設(shè)計(jì)思路與流程圖 1.主程序流程圖
主程序中主要是一個(gè)死循環(huán),不停的循環(huán)四個(gè)狀態(tài),如圖4-1 所示。
2.按鍵子程序流程圖
它包含倒計(jì)時(shí)調(diào)整和緊急狀態(tài)兩個(gè)狀態(tài)。
主程序中放了一個(gè)按鍵的判斷指令,當(dāng)有按鍵按下的時(shí)候,程序就自動(dòng)的跳轉(zhuǎn)到按鍵子
程序處理。當(dāng)檢測(cè)到K2鍵按下的時(shí)候就自動(dòng)返回到主程序。當(dāng)出現(xiàn)緊急的情況的時(shí)候,按下K3或者K4 就切換到緊急狀態(tài),當(dāng)緊急事件處理完畢 的時(shí)候,按下K2,就可以返回正常狀態(tài)。
五、測(cè)試、數(shù)據(jù)及結(jié)果分析 1.狀態(tài)燈顯示測(cè)試
當(dāng)電路連接完畢后,將寫(xiě)好的測(cè)試程序刷寫(xiě)到芯片內(nèi),K1 和K2分別給端口送高電平和
低電平,通電即可檢測(cè)。2.?dāng)?shù)碼管的測(cè)試
將串口的和電路板上的接口連接,將寫(xiě)好的測(cè)試程序刷寫(xiě)到芯片內(nèi),開(kāi)電源即可測(cè)試。
3.整體電路測(cè)試
系統(tǒng)上電,刷寫(xiě)好程序即可開(kāi)始測(cè)試,觀測(cè)一個(gè)周期(共計(jì)S1~S4四個(gè)狀態(tài),默認(rèn)140 秒)燈的顯示狀態(tài)是否正常,同時(shí)觀察倒計(jì)的計(jì)數(shù)是否正常。
六、總結(jié)
由于使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時(shí)的更新系統(tǒng),進(jìn)行不同狀態(tài)的組合。
但是在我們?cè)O(shè)計(jì)和調(diào)試的過(guò)程中,也發(fā)現(xiàn)了一些問(wèn)題,譬如紅燈和綠燈的切換還不夠迅
速,紅綠燈規(guī)則不效率還不是很高等等,這需要在實(shí)踐中進(jìn)一步完善。附錄 系統(tǒng)總體電路圖
1.滿足南北向紅綠燈亮,東西向紅燈亮,占25秒——南北向黃燈亮,東西向紅燈亮,占5秒——南北向紅燈亮,東西向綠燈亮,占25秒——南北向紅燈亮,東西向黃燈亮,占5秒。如此循環(huán),周而復(fù)始。2.十字路口要有數(shù)字顯示,提示行人把握時(shí)間:當(dāng)某方向綠燈亮?xí)r,置顯示器為24,然后以每秒減1計(jì)數(shù)方式工作,直到減為0,綠燈滅,黃燈亮。黃燈滅,紅燈亮?xí)r,再次置顯示器為29,并開(kāi)始減計(jì)數(shù),直到為0,十字路口紅綠燈交換,完成一次工作循環(huán)。
3.可手動(dòng)調(diào)整和自動(dòng)調(diào)整,夜間為黃燈閃耀。下面是一個(gè)單片機(jī)交通燈程序 /*
****************************************************************************************** * *
* Keil C 89S51 交通信號(hào)控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
****************************************************************************************** */
#include “reg51.h” #define UINT unsigned int #define ULONG unsigned long #define UCHAR unsigned char /*
信號(hào)燈變量
南北方向綠燈
sbit n_bike_g = P1^0;//自行車(chē)
sbit n_right_g = P1^1;//右轉(zhuǎn)
sbit n_up_g = P1^2;//直行
sbit n_left_g = P1^3;//左轉(zhuǎn) 調(diào)頭
南北方向紅燈
sbit n_bike_r = P1^4;//自行車(chē)
sbit n_right_r = P1^5;//右轉(zhuǎn)
sbit n_up_r = P1^6;//直行
sbit n_left_r = P1^7;//左轉(zhuǎn) 調(diào)頭 南北方向黃燈
sbit n_bike_y = P3^0;//自行車(chē)
sbit n_right_y = P3^1;//右轉(zhuǎn)
sbit n_up_y = P3^2;//直行
sbit n_left_y = P3^3;//左轉(zhuǎn) 調(diào)頭
東西方向綠燈
sbit e_bike_g = P2^0;//自行車(chē)
sbit e_right_g = P2^1;//右轉(zhuǎn)
sbit e_up_g = P2^2;//直行
東西方向紅燈
sbit e_bike_r = P2^4;//自行車(chē)
sbit e_right_r = P2^5;//右轉(zhuǎn)
sbit e_up_r = P2^6;//直行
東西方向黃燈
sbit e_bike_y = P3^4;//自行車(chē)
sbit e_right_y = P3^5;//右轉(zhuǎn)
sbit e_up_y = P3^6;//直行
*/ //延時(shí)
void delay(UINT t, UINT s){ while(t){ UINT i;
for(i = 0;i < s;i++){ } t--;} }
//信號(hào)燈狀態(tài)
void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3){
P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(150, 65535);}
void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22){ UINT i;
for(i = 0;i < 3;i ++){
P1 = P_P1;P2 = P_P2;delay(5, 65535);P1 = P_P11;P2 = P_P22;delay(5, 65535);}
P1 = P_P1;P2 = P_P2;P3 = P_P3;delay(10, 65535);} //主程序
void main(){
P1 = P2 = P3 = 0x0;while(1){
time_x(0xA5, 0x38, 0x0);
time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);time_x(0x96, 0x52, 0x0);
time_s(0x92, 0x52, 0x4, 0x96, 0x52);time_x(0x5A, 0x52, 0x0);
time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);time_x(0xF0, 0x25, 0x0);
time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);time_x(0xD2, 0x16, 0x0);
time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);} }
給你一個(gè)定時(shí)控制的信號(hào)系統(tǒng),我只做的簡(jiǎn)單的測(cè)試,至于延時(shí)我用的軟件,你自己想辦法。^_^
Dai_Weis 于 2005-5-4 13:43:23 重新給你說(shuō)明
/*
*********************************************************************************** * *
* Keil C AT89S51 交通信號(hào)控制程序 * *(C)版權(quán)所有 Dai_Weis@hotmail.com * * *
*********************************************************************************** 開(kāi)發(fā)說(shuō)明:
固定時(shí)間信號(hào)變換,南北設(shè)置調(diào)頭、左傳、直行、右轉(zhuǎn)、自行車(chē)。
東西設(shè)置左傳、直行、右轉(zhuǎn)、自行車(chē)。
時(shí)序狀態(tài):
紅 綠 紅 綠
序號(hào) 左 前 右 自 左 前 右 自 前 右 自 前 右 自1 0 1 0 0 1 0 1 1 1 1 0 0 0 2 1 0 0 1 0 1 1 0 1 0 1 0 1 0 3 0 1 0 1 1 0 1 0 1 0 1 0 1 0 4 1 1 1 1 0 0 0 0 0 1 0 1 0 1 5 1 1 0 1 0 0 1 0 0 0 1 1 1 0 */
另外修正個(gè)錯(cuò)誤
while(1){
time_x(0xA5, 0x70, 0x0);time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);
材料: 1、89S51 11.0592M 晶振
1K電阻、10UF電容
12個(gè)燈,紅、黃、綠各四個(gè),12個(gè)1K電阻
,十字路口嘛。蜂鳴器一個(gè)。
按鍵一個(gè),按鍵復(fù)位
采用AT89s51型號(hào)的單片機(jī),由于交通十字路口的對(duì)稱(chēng)性,所以一個(gè)引腳可以同時(shí)控制兩個(gè)燈,將發(fā)光二極管分別接到P1各個(gè)引腳,在其中加入一個(gè)時(shí)振蕩當(dāng)電路,來(lái)控制時(shí)間,在P3.0引腳接入蜂鳴器只黃燈亮的時(shí)候發(fā)出聲響,這里我們讓每次黃燈亮的時(shí)候發(fā)出六聲響,通過(guò)C程序的控制就可以實(shí)現(xiàn),每次循環(huán)是10秒。2、9cm*15cm萬(wàn)用板 1片 單片機(jī)及IC座 1套 12M晶振 1只 22P電容 2只 10uF電容 1只 10K電阻 1只 1K排阻 1只 兩位一體數(shù)碼管 2只 DC座 1只 自鎖開(kāi)關(guān) 1只
發(fā)光二極管紅綠黃
各4只 按鍵 7只 USB電源線 1條 導(dǎo)線
若干
1、基于51系列單片機(jī)(型號(hào):STC89C52、AT89C51/C52、AT89S51/S52,隨機(jī)選擇,如有特
殊要求請(qǐng)與店主討論)設(shè)計(jì)實(shí)現(xiàn)。(以上幾種單片機(jī)全部為51系列單片機(jī),除了名字不一樣外,功能及應(yīng)用完全一樣,互相
兼容)
2、兩個(gè)兩位一體數(shù)碼管顯示東西、南北方向時(shí)間。
3、四方向各有紅綠黃三顆燈。
4、七個(gè)按鍵操作,分別是:禁止通行、東西通行、南北通行、時(shí)間加、時(shí)間減、切換方向、確認(rèn)。
第三篇:基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)
基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)
摘要:十字路口車(chē)輛穿梭,行人熙攘,車(chē)行車(chē)道,人行人道,有條不紊。那么靠什么來(lái)實(shí)現(xiàn)這井然秩序呢?靠的就是交通信號(hào)燈的自動(dòng)指揮系統(tǒng)。交通信號(hào)燈控制方式很多。本系統(tǒng)采用MSC-51系列單片機(jī)ATSC51和可編程并行I/O接口芯片8255A為中心器件來(lái)設(shè)計(jì)交通燈控制囂,實(shí)現(xiàn)了能根據(jù)實(shí)際車(chē)流量通過(guò)8051芯片的P1口設(shè)置紅、綠燈燃亮?xí)r間的功能;紅綠燈循環(huán)點(diǎn)亮。倒計(jì)時(shí)剩5秒時(shí)黃燈閃爍警示;車(chē)輛闖紅燈報(bào)警;綠燈時(shí)間可檢測(cè)車(chē)流量并可通過(guò)雙位數(shù)碼管顯示。本系統(tǒng)實(shí)用性強(qiáng)、操作簡(jiǎn)單、擴(kuò)展功能強(qiáng)。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);交通燈
單片機(jī)技術(shù)的發(fā)展對(duì)社會(huì)進(jìn)步產(chǎn)生了巨大的影響。今天,單片機(jī)及其應(yīng)用技術(shù)的發(fā)展速度、深度及其廣度,在國(guó)防、科學(xué)研究、政治經(jīng)濟(jì)、教育文化等方面幾乎無(wú)所不及。將之用于交通燈控制系統(tǒng)設(shè)計(jì),對(duì)于疏導(dǎo)交通流量、提高道路通行能力,減少交通事故有明顯效果。
1、單片機(jī)涵義
一臺(tái)能夠工作的計(jì)算機(jī)要有這樣幾個(gè)部份構(gòu)成:CPU(進(jìn)行運(yùn)算、控制)、RAM(數(shù)據(jù)存儲(chǔ))、ROM(程序存儲(chǔ))、輸入,輸出設(shè)備(例如:串行口、并行輸出口等)。在個(gè)人計(jì)算機(jī)上這些部份被分成若干塊芯片,安裝一個(gè)稱(chēng)之為主板的印刷線路板上。而在單片機(jī)中,這些部份,全部被做到一塊集成電路芯片中了,所以就際=缸單片(單芯片)機(jī),單片機(jī)即微控制器(Microniroller μC)有一些單片機(jī)中除了上述部份外,還集成了其它部份如AID,DIA,定時(shí)計(jì)數(shù)器,RTC,各種串行接口等。
2、MSC-51芯片簡(jiǎn)介
2.1 MSC-51結(jié)構(gòu)
8051是MCS-51系列單片機(jī)的典型產(chǎn)品,8051單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí),計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線。
2.2 8255芯片簡(jiǎn)介
8255可編程并行接口芯片有三個(gè)輸入輸出端口,即A口、B口和c口,對(duì)應(yīng)于引腳PAT—PA0、PB7-PB0和PC7-PC0。其內(nèi)部還有一個(gè)控制寄存器,即控制口。通常A口、B口作為輸入輸出的數(shù)據(jù)端口。c口作為控制或狀態(tài)信息的端口,它在方式字的控制下,可以分成4位的端口,每個(gè)端口包含一個(gè)4位鎖存器。它們分別與端口A/B配合使用,可以用作控制信號(hào)輸出或作為狀態(tài)信號(hào)輸入。
8255有兩種控制命令字;一個(gè)是方式選擇控制字;另一個(gè)是c口按位置位/復(fù)位控制字。
2.3 74LS373簡(jiǎn)介
SN74LS373。SN74LS374常用的8d鎖存器。常用作地址鎖存和I/0輸出,可以用74he373代換,74H373是高速CMOS器件,功能與74LS373相同,兩者可以互換。74LS373內(nèi)有8個(gè)相同的D型(三態(tài)同相)鎖存器,由兩個(gè)控制端(11腳c或EN;1腳OUT、CONT、OE)控制。當(dāng)OE接地時(shí),若G為高電平,741Ls373接收由PPU輸出的地址信號(hào);如果G為低電平,則將地址信號(hào)鎖存。
3、系統(tǒng)硬件
3.1 交通管理的方案論證 東西、南北兩干道交于一個(gè)十字路口,各干道有一組紅、黃、綠三色的指示燈,指揮車(chē)輛和行人安全通行。紅燈亮禁止通行。綠燈亮允許通行。黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換,且黃燈燃亮?xí)r間為東西、南北兩千道的公共停車(chē)時(shí)問(wèn)。設(shè)東西道比南北道的車(chē)流量。
3.2 系統(tǒng)硬件設(shè)計(jì)
選用設(shè)備8031單片機(jī)一片選用設(shè)備:8031彈片機(jī)一片,8255并行通用接口芯片一片,74LS07兩片,MAX692‘看門(mén)狗’一片,共陰極的七段數(shù)碼管兩個(gè)雙向晶閘管若干,7805三端穩(wěn)壓電源一個(gè),紅、黃、綠交通燈各兩個(gè)。開(kāi)關(guān)鍵盤(pán)、連線若干。
4、控制器的軟件設(shè)計(jì)
4.1 每秒鐘的設(shè)定
延時(shí)方法可以有兩種:一種是利用NCS-51內(nèi)部定時(shí)器才生溢出中斷來(lái)確定1秒的時(shí)間,另一種是采用軟延時(shí)的方法。
4.2 計(jì)數(shù)器硬件延時(shí)
4.2.1 初值計(jì)算
定時(shí)器工作時(shí)必須給計(jì)數(shù)器送計(jì)數(shù)器初值,這個(gè)值是送到TH和TL中的。他是以加法記數(shù)的,并能從全1到全0時(shí)自動(dòng)產(chǎn)生溢出中斷請(qǐng)求。因此,我們可以把計(jì)數(shù)器記滿為零所需的計(jì)數(shù)值設(shè)定為c和計(jì)數(shù)初值設(shè)定為T(mén)C。
4.2.2 1秒的方法
我們采用在主程序中設(shè)定一個(gè)初值為20的軟件計(jì)數(shù)器和使TO定時(shí)5O毫秒,這樣每當(dāng)TO到50毫秒時(shí)cPu就響應(yīng)它的溢出中斷請(qǐng)求,進(jìn)入他的中斷服務(wù)子程序。在中斷服務(wù)子程序中,cPu先使軟件計(jì)數(shù)器減1,然后判斷它是否為零。為零表示1秒已到可以返回到輸出時(shí)間顯示程序。
4.3 計(jì)數(shù)器軟件延時(shí)
MCS-51的工作頻率為2-12MHZ,我們選用的8031單片機(jī)的工作頻率為6MHZ。機(jī)器周期與主頻有關(guān),機(jī)器周期是主頻的12倍,所以一個(gè)機(jī)器周期的時(shí)間為12*(1/6M)=2us。我們可以知道具體每條指令的周期數(shù),這樣我們就可以通過(guò)指令的執(zhí)行條數(shù)來(lái)確定1秒的時(shí)間。
4.4 時(shí)間及信號(hào)燈的顯示
4.4.1 8051并行口的擴(kuò)展
8051雖然有4個(gè)8位I/0端口,但真正能提供借用的只有Pl口。因?yàn)镻2和P0口通常用于傳送外部傳送地址和數(shù)據(jù),P3口也有它的第二功能。因此,8031通常需要擴(kuò)展。由于我們用外部輸入設(shè)定紅綠燈倒計(jì)時(shí)初值、數(shù)碼管的輸出顯示、紅綠黃信號(hào)燈的顯示都要用到一個(gè)I/0端口,顯然8031的端口是不夠,需要擴(kuò)展。
擴(kuò)展的方法有兩種:(1)借用外部RAM地址來(lái)擴(kuò)展I/0端口;(2)采用I/0接口新片來(lái)擴(kuò)充。我們用8255并行接口信片來(lái)擴(kuò)展I/0端口。
4.4.2 8255與8051的連接
用8051的PO口的pO.7連接8255的片選信號(hào),我們用8031的地址采用全譯碼方式,當(dāng)pO.7:0時(shí)片選有效,其他無(wú)效,pO.1用于選擇8255端口。
5、結(jié) 論
本系統(tǒng)就是充分利用了8051和8255芯片的I/O引腳。系統(tǒng)統(tǒng)采用MSC-51系列單片機(jī)Intel8051和可編程并行I/0接口芯片8255A為中心器件來(lái)設(shè)計(jì)交通燈控制器,實(shí)現(xiàn)了能根據(jù)實(shí)際車(chē)流量通過(guò)8031芯片的Pl口設(shè)置紅、綠燈燃亮?xí)r間的功能;紅綠燈循環(huán)點(diǎn)亮,倒計(jì)時(shí)剩5秒時(shí)黃燈閃爍警示(交通燈信號(hào)通過(guò)PA口輸出,顯示時(shí)間直接通過(guò)8255的PC口輸出至雙位數(shù)碼管);車(chē)輛闖紅燈報(bào)警;綠燈時(shí)間可檢測(cè)車(chē)流量并可通過(guò)雙位數(shù)碼管顯示。
參考文獻(xiàn):
[1]張毅剛,新編MCS-51單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M]哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2006
[2]王義軍,單片機(jī)原理及應(yīng)用習(xí)題與實(shí)驗(yàn)指導(dǎo)書(shū)[M],北京:中國(guó)電力出版社,2006
[3]陳明熒8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材[M],北京:清華大學(xué)出版社。2004
第四篇:基于單片機(jī)的交通燈控制系統(tǒng)設(shè)計(jì)
P10P11P12P13設(shè)置鍵加鍵減鍵模式鍵P00P01P02P03P04P05P06U18765P134P123P112P101P1.7P1.6P1.5P1.4P1.3P1.2P1.1/T2EXP1.0/T2P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0******23222***373839P37P36P35P34P22P23P24D7D4P27P26P25P24P23P22P21P20P07P06P05P04P03P02P01P0098765432110KP27LED-REDD92H1HD1D6P25LED-YELLOWD11P26LED-YELLOWLED-GREENLED-REDC31uF313029EAALEPSEND12P26R0100RP1P25LED-GREENLED-GREENC120PF9RSTD5P00P01P02P03P04P05P06LED-YELLOWD3P27LED-REDX1C220PF12M19LED-REDLED-GREENLED-YELLOWP24P23P22XTAL1AT89C51Q1PNPQ2PNPQ3PNPQ4PNPP34P35657U2SCKSDAWP24C02CA0A1A2123R151R1HR251R2HR351R3HR451R4HP36P37P21P00P01P02P03P04P05P0651R51R51R51R2H1HR19R20R21P20R223H4HXTAL2P00P01P02P03P04P05P0618D2D10D83H4H
#include
//調(diào)用單片機(jī)頭文件
#define uchar unsigned char
//宏定義“uchar”代替“unsigned char”。#define uint unsigned int
//宏定義“uint”用來(lái)定義無(wú)符號(hào)整型數(shù)。
//數(shù)碼管段選定義 0
7
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //
A B C
D
E
F 不顯示
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//斷碼
uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};uchar smg_i = 4;
//顯示數(shù)碼管的個(gè)位數(shù)
//數(shù)碼管位選定義
sbit smg_we1 = P2^0;
//數(shù)碼管位選定義 sbit smg_we2 = P2^1;sbit smg_we3 = P3^6;sbit smg_we4 = P3^7;
char dx_s = 0;//東西
南北 倒計(jì)時(shí)變量 sbit dx_red
= P2^4;
//東西紅燈 sbit dx_green = P2^3;//東西綠燈 sbit dx_yellow = P2^2;//東西黃燈
sbit nb_red
= P2^7;//南北紅燈 sbit nb_green = P2^6;//南北綠燈 sbit nb_yellow = P2^5;//南北黃燈
sbit scl=P3^4;//寫(xiě)24C02時(shí)鐘
sbit sda=P3^5;//寫(xiě)24C02數(shù)據(jù)
uchar flag_jtd_mode;//交通燈的模式 根據(jù)時(shí)間
bit flag_1s = 0;bit flag_500ms;bit flag_dx_nb;uchar flag_5m_value;uchar i;//東西南北模式
uchar flag_alarm;//模式
uchar dx_time = 30,nb_time = 20;
//東西、南北的時(shí)間 uchar flag_jdgz;
//交通管制
//---延時(shí)函數(shù)---// void delay(){;;}
void start()//起始信號(hào) { sda=1;delay();scl=1;delay();sda=0;delay();}
void stop()//停止信號(hào) { sda=0;delay();scl=1;delay();sda=1;delay();}
void respons()//應(yīng)答信號(hào) { uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}
void init()//初始狀態(tài),24C02的數(shù)據(jù)和時(shí)鐘線都拉高 { sda=1;delay();scl=1;delay();}
void writebyte(uchar date)//寫(xiě)24C02 { uchar i,temp;temp=date;for(i=0;i<8;i++){
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();} scl=0;delay();sda=1;delay();} uchar readbyte()//讀24C02 { uchar i,k;scl=0;delay();sda=1;delay();
for(i=0;i<8;i++){
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();} return k;}
void writeadd(uchar address,uchar date)//寫(xiě)24C02 {
start();//起始信號(hào)
writebyte(0xa0);//寫(xiě)入器件地址寫(xiě) respons();
writebyte(address);//寫(xiě)入存儲(chǔ)單元地址 respons();
writebyte(date);//寫(xiě)入數(shù)據(jù) respons();
stop();//停止信號(hào) }
uchar readadd(uchar address)//讀24C02 { uchar date;
start();//起始信號(hào)
writebyte(0xa0);//寫(xiě)入器件地址寫(xiě)
respons();
writebyte(address);//寫(xiě)入讀單元地址
respons();
}
start();//起始信號(hào)
writebyte(0xa1);//讀命令 respons();date=readbyte();//讀數(shù)據(jù) stop();//停止信號(hào) return date;/***********************數(shù)碼位選函數(shù)*****************************/ void smg_we_switch(uchar i){ switch(i){
case 0: smg_we1 = 0;smg_we2 = 1;smg_we3 = 1;smg_we4 = 1;break;
case 1: smg_we1 = 1;smg_we2 = 0;smg_we3 = 1;smg_we4 = 1;break;
case 2: smg_we1 = 1;smg_we2 = 1;smg_we3 = 0;smg_we4 = 1;break;
case 3: smg_we1 = 1;smg_we2 = 1;smg_we3 = 1;smg_we4 = 0;break;} }
/******************************************************************** * 名稱(chēng) : delay_1ms()* 功能 : 延時(shí)1ms函數(shù) * 輸入 : q * 輸出 : 無(wú)
***********************************************************************/ void delay_1ms(uint q){ uint i,j;for(i=0;i for(j=0;j<110;j++);} /******************************************************************** * 名稱(chēng) : display()* 功能 : 數(shù)碼管顯示 * 輸入 : 無(wú) * 輸出 : 無(wú) ***********************************************************************/ void display(){ uchar i;for(i=0;i P0 = 0xff; //消隱 smg_we_switch(i); //位選 P0 = dis_smg[i]; //段選 delay_1ms(3);} } /*********************定時(shí)器0、定時(shí)器1初始化******************/ void time0_init() { EA = 1; //開(kāi)總中斷 TMOD = 0X11;//定時(shí)器0、定時(shí)器1工作方式1 ET0 = 1; //開(kāi)定時(shí)器0中斷 TR0 = 1; //允許定時(shí)器0定時(shí) } /*********************交通燈處理函數(shù)*********************************/ void jiaotongdeng_dis(){ char dx,nb; if(flag_dx_nb == 0){ dx=dx_s;nb=dx_s-5;if(nb<=0)nb=dx_s;} if(flag_dx_nb == 1){ dx=dx_s-5;nb=dx_s;if(dx<=0)dx=dx_s;} if(flag_1s == 1){ dx_s--;flag_1s = 0; if(dx_s == 0){ if(flag_dx_nb == 1) dx_s = nb_time; //南北時(shí)間 else dx_s = dx_time; //東西時(shí)間 flag_dx_nb = ~flag_dx_nb; } } dis_smg[0] = smg_du[dx % 10];dis_smg[1] = smg_du[dx / 10];dis_smg[2] = smg_du[nb % 10];dis_smg[3] = smg_du[nb / 10]; /***********************南北時(shí)間*********************************/ if(flag_dx_nb == 0) { if(dx_s > 5) { dx_red = 1;//滅 dx_green = 0;//亮 dx_yellow = 1;//滅 nb_red = 0;//亮 nb_green = 1;//滅 nb_yellow = 1;//滅 flag_5m_value = 0; }else if(dx_s <= 5) //當(dāng)小于5秒時(shí) 黃燈要閃了 { dx_red = 1; //滅 } } dx_green = 1; //滅 nb_red = 0; //亮 nb_green = 1; //滅 nb_yellow = 1; //滅 if(flag_500ms == 0){ dx_yellow = 0;//亮 } else { } dx_yellow = 1;//滅 /***********************東西時(shí)間*********************************/ if(flag_dx_nb == 1) { if(dx_s > 5) { dx_red = 0; //亮 dx_green = 1; //滅 dx_yellow = 1; //滅 nb_red = 1; //滅 nb_green = 0; //亮 nb_yellow = 1; //滅 flag_5m_value = 0; }else if(dx_s <= 5) //當(dāng)小于5秒時(shí) 黃燈要閃了 { dx_red = 0; //滅 dx_green = 1; //滅 dx_yellow = 1; //滅 nb_red = 1; //滅 nb_green = 1; //滅 if(flag_500ms == 0) //黃燈閃爍 { } } } nb_yellow = 0;//亮 } else { nb_yellow = 1;//滅 } /********************獨(dú)立按鍵程序*****************/ uchar key_can;//按鍵值 void key()//獨(dú)立按鍵程序 { static uchar key_new;key_can = 20; //按鍵值還原 P1 |= 0x1f; if((P1 & 0x1f)!= 0x1f)//按鍵按下 { delay_1ms(1); //按鍵消抖動(dòng) if(((P1 & 0x1f)!= 0x1f)&&(key_new == 1)) { key_new = 0;switch(P1 & 0x1f){ //確認(rèn)是按鍵按下 case 0x1e: key_can = 1;break;//得到按鍵值 case 0x1d: key_can = 2;break;//得到按鍵值 case 0x1b: key_can = 3;break;//得到按鍵值 case 0x17: key_can = 4;break;//得到按鍵值 } } } else key_new = 1;} uchar menu_1,flag_s; /********************設(shè)置函數(shù)*****************/ void key_with(){ if(key_can == 4) //交通管制按鍵 { flag_jdgz ++; if(flag_jdgz > 5) flag_jdgz = 0; if(flag_jdgz == 1)// 全部亮紅燈 { dx_red = 0;//亮 dx_green = 1;//滅 dx_yellow = 1;//滅 } nb_red = 0;//亮 nb_green = 1;//滅 nb_yellow = 1;//滅 if(flag_jdgz == 2)// 東西紅燈 南北綠燈 { dx_red = 0;//亮 dx_green = 1;//滅 dx_yellow = 1;//滅 nb_red = 1;//滅 nb_green = 0;//亮 nb_yellow = 1;//滅 } if(flag_jdgz == 3)// 南北紅燈 { dx_red = 1;//滅 dx_green = 0;//亮 dx_yellow = 1;//滅 nb_red = 0;//亮 nb_green = 1;//滅 nb_yellow = 1;//滅 } if(flag_jdgz == 4)// 南北綠燈 { dx_red = 1;//滅 dx_green = 0;//亮 dx_yellow = 1;//滅 nb_red = 1;//滅 nb_green = 0;//亮 nb_yellow = 1;//滅 } if(flag_jdgz == 5)// 南北黃燈 { dx_red = 1;//滅 dx_green = 1;//滅 dx_yellow = 0;//亮 nb_red = 1;//滅 nb_green = 1;//滅 nb_yellow = 0;//亮 } } if(key_can == 1) //設(shè)置鍵 { menu_1 ++; 東西綠燈 東西綠燈 東西黃燈 if(menu_1 >= 3){ menu_1 = 0;} } if(menu_1 == 1) //設(shè)置東西的時(shí)間 { if(key_can == 2){ dx_time ++;//加1 if(dx_time > 99) dx_time = 99;} if(key_can == 3){ dx_time--;//減1 if(dx_time <= 10) dx_time = 10;} dis_smg[0] = smg_du[10];//顯示為A dis_smg[1] = smg_du[10];//顯示為A dis_smg[2] = smg_du[dx_time % 10];dis_smg[3] = smg_du[dx_time / 10]; writeadd(4,dx_time);//保存數(shù)據(jù) } if(menu_1 == 2) //設(shè)置南北的時(shí)間 { if(key_can == 2){ nb_time ++;//加1 if(nb_time > 99) nb_time = 99;} if(key_can == 3){ nb_time--;//減1 //顯示東西設(shè)置的時(shí)候 if(nb_time <= 10) nb_time = 10;} dis_smg[0] = smg_du[11];//顯示為B dis_smg[1] = smg_du[11];//顯示為B dis_smg[2] = smg_du[nb_time % 10];dis_smg[3] = smg_du[nb_time / 10]; //顯示東西設(shè)置的時(shí)候 writeadd(2,nb_time);//保存數(shù)據(jù) } } /******************************************************************** * 名稱(chēng) : main()* 功能 : 實(shí)現(xiàn)燈的閃爍 * 輸入 : 無(wú) * 輸出 : 無(wú) ***********************************************************************/ void main(){ time0_init(); init();//24C02初始化 nb_time=readadd(2);//讀取地址2處一個(gè)字節(jié)給 dx_time=readadd(4);//讀取地址4處一個(gè)字節(jié)給 if(nb_time>99)nb_time=20; if(dx_time>99)dx_time=30; dx_s = nb_time; //東西時(shí)間 while(1){ key(); if(key_can < 20) key_with(); if((menu_1 == 0)&&(flag_jdgz == 0)) } } jiaotongdeng_dis();display();/*********************定時(shí)器0中斷服務(wù)程序************************/ void time0_int()interrupt 1 { } static uchar value; //定時(shí)10ms中斷一次 TH0 = 0x3c;TL0 = 0xb0; //50ms value ++;flag_5m_value++;if(flag_5m_value % 10 == 0)flag_500ms = ~flag_500ms;if(value >= 20){ value = 0;flag_1s = 1;} 單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告 基于單片機(jī)的交通燈控制系統(tǒng) 引言 單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域具有廣泛的應(yīng)用。本文設(shè)計(jì)了基于單片機(jī)的交通燈控制系統(tǒng)以AT89C51單片機(jī)為核心芯片,通過(guò)控制三色LED燈的亮滅來(lái)控制各車(chē)道的通行。設(shè)計(jì)方案及原理 本系統(tǒng)由AT89C51單片機(jī)、紅、黃、綠LED交通信號(hào)燈、共陰極數(shù)碼管、緊急通車(chē)開(kāi)關(guān)等模塊組成該電路具有設(shè)計(jì)簡(jiǎn)單,顯示亮度高,能耗小,可靠性高燈特點(diǎn)。其總體設(shè)計(jì)框圖如圖1所示。 復(fù)位電路七段數(shù)碼管倒計(jì)時(shí)顯示電路AT89C51晶振電路A、B車(chē)道LED顯示電路按鍵電路 圖1 系統(tǒng)總體設(shè)計(jì)方框圖 2.1 系統(tǒng)設(shè)計(jì) 交通燈控制系統(tǒng)主要控制A,B兩車(chē)道的交通,以AT89C51單片機(jī)為核心芯片,通過(guò)控制三色LED燈的亮滅來(lái)控制各車(chē)道的通行;另外通過(guò)3個(gè)按鍵來(lái)模擬各車(chē)道有無(wú)車(chē)輛的情況和有緊急車(chē)輛的情況。根據(jù)設(shè)計(jì)要求,制定總體設(shè)計(jì)思想如下: (1)用AT89C51單片機(jī)控制交通燈電路,晶振采用12MHz。(2)用發(fā)光二極管模擬交通信號(hào)燈,用按鍵開(kāi)關(guān)模擬車(chē)輛檢測(cè)信號(hào)。 (3)有緊急車(chē)輛通過(guò)時(shí),按下K3開(kāi)關(guān)使A、B車(chē)道均為紅燈,禁行20s。此時(shí),第五篇:基于單片機(jī)的交通燈控制系統(tǒng)