第一篇:?jiǎn)纹瑱C(jī)控制的循環(huán)彩燈控制系統(tǒng)的設(shè)計(jì)實(shí)習(xí)報(bào)告
一、實(shí)習(xí)目的 《單片機(jī)原理與接口技術(shù)》課程實(shí)習(xí)安排在該課程理論教學(xué)結(jié)束后進(jìn)行。其目的是通過(guò)實(shí)習(xí),使學(xué)生進(jìn)一步弄懂所學(xué)到的課本知識(shí),鞏固和深化對(duì)單片機(jī)的結(jié)構(gòu)、指令系統(tǒng)、中斷系統(tǒng)、鍵盤(pán)/顯示系統(tǒng)、接口技術(shù)、系統(tǒng)擴(kuò)展、定時(shí)/計(jì)數(shù)控制、程序設(shè)計(jì)、應(yīng)用開(kāi)發(fā)等基本理論知識(shí)的理解,提高單片機(jī)應(yīng)用技術(shù)的實(shí)踐操作技能,掌握單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)、研制方面的一般方法,培養(yǎng)利用單片機(jī)進(jìn)行科技革新、開(kāi)發(fā)和創(chuàng)新的基本能力、為畢業(yè)后從事和單片機(jī)相關(guān)的工作打下一定的基礎(chǔ)。
二、實(shí)習(xí)內(nèi)容 利用TDN86/51二合一微機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)設(shè)計(jì)一個(gè)用8051單片機(jī)控制的循環(huán)彩燈控制系統(tǒng)。
三、設(shè)計(jì)過(guò)程:
1、能輸出4種花型,并能由人工進(jìn)行花型的切換。(按鍵)*利用單片機(jī)8031的P1.7做總開(kāi)關(guān),P1.0、P1.1做花型控制開(kāi)關(guān),P1.5、P1.6做調(diào)速開(kāi)關(guān)。
實(shí)習(xí)花型:(1)使彩燈從右到左逐一循環(huán)點(diǎn)亮。(2)使彩燈交替閃爍。(3)使彩燈從右到左逐一點(diǎn)亮,當(dāng)全部點(diǎn)亮后同時(shí)閃爍一次。(4)使彩燈從中間到兩邊順序點(diǎn)亮,直至全部點(diǎn)亮;再將彩燈從兩邊到中間熄滅,直至全部熄滅。
2、循環(huán)彩燈的循環(huán)速度可調(diào)。*P1.5做加速控制開(kāi)關(guān),P1.6做減速控制開(kāi)關(guān)。
3、按鍵要求:(1)啟動(dòng)/暫停。按動(dòng)一次啟動(dòng),再按一次暫停。是一個(gè)雙態(tài)轉(zhuǎn)換鍵 *“1”---啟動(dòng),“0”---停止。(2)花型變化。按一次,立即停止當(dāng)前花型的顯示,轉(zhuǎn)換為下一種花型。4種花型可以循環(huán)切換。表1.1 撥動(dòng)開(kāi)關(guān)與對(duì)應(yīng)的花型 P1.0 P1.1 花型 0 0 花型1 1 0 花型2
花型3 1 1 花型4(3)速度+。按鍵一次,速度略加快一點(diǎn)。速度-。按鍵一次,速度略減慢一點(diǎn)。表1.2 撥動(dòng)開(kāi)關(guān)功能表
P1.5 P1.6 P1.7 功能 功能 功能 0 0 0 無(wú)加速 無(wú)減速 停止 1 1 1 加速 減速 啟動(dòng) 4在LED顯示器上顯示相應(yīng)的花型號(hào)。
5、顯像管顯示相應(yīng)數(shù)據(jù)
花型 顯像管 A 花型1 B 花型2 C 花型3 D 花型4
6、利用軟件子程序或單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)定時(shí)功能,以模擬循環(huán)速度的基準(zhǔn)值。
四、實(shí)習(xí)器材 TDN86/51二合一微機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)1臺(tái),配套計(jì)算機(jī)一臺(tái),連接導(dǎo)線若干
五、實(shí)驗(yàn)原理圖: 0 1 如上圖所示,8031的P0口接8155的AD0-7口,P2.7和P2.6分別接了8155的片選線和I0口,而8031的P1口做開(kāi)關(guān)接口,8155的PA和PC接顯像管的字位和字形,PB接LED。
六、程序及程序流程圖:
開(kāi)始
字型碼賦值給R6 初始化 字位碼初始值給人R0 總開(kāi)關(guān) 字位碼 C口
花型控制開(kāi)關(guān)
顯示數(shù)據(jù)
查表字形碼
C口 花型 顯示字形 顯示 結(jié)束 調(diào)速 P1.7=0? 否 否 P1.6=1? 是 否 P1.5=1? P1.0=0? 是 是 P1.1=0? P1.0=0? 是 否 是 否 花型1 花型2 花型3 花型4
ORG 0000H
LJMP MAIN
ORG 1000H MAIN: SETB P2.6;8155初始化 CLR P2.7 ;片選線工作 MOV R0,#00H ;指向命令/狀態(tài)口 MOV A,#07H ;命令字送A MOVX @R0,A ;裝入8155 MOV DPTR,#DTAB ;控制花型的亮滅數(shù)據(jù) MOV R4,#0FEH ;右量 MOV R2,#0FFH ;全滅 CHECK: JNB P1.7,MAIN
;總開(kāi)關(guān)
JB P1.0,NEXT 控制花型開(kāi)關(guān) JB P1.1,TWO ONE: MOV R6,#77H ;字形碼“A”(花型1)LCALL SHOW ;調(diào)用顯示程序 MOV A,R4 RL
A
;左移
MOV R4,A
MOV R0,#02H ;PB輸出 MOVX @R0,A LCALL DELAY ;調(diào)用延時(shí)程序 LJMP CHECK TWO: MOV R6,#7CH
;字型碼“B”(花型2)LCALL SHOW MOV R3,#0AAH;10101010(0亮)MOV A,R3 MOV R0,#02H
MOVX @R0,A
LCALL DELAY
MOV R3,#55H ;01010101 MOV A,R3 MOVX @R0,A LCALL DELAY LJMP CHECK NEXT: JB P1.1,FOUR THREE: MOV R6,#39H ;字型碼“C”(花型3)LCALL SHOW MOV R0,#02H
MOV A, R2
MOVX @R0,A LCALL DELAY CLR C RLC A ;帶位左移 MOV R2,A CJNE A,#00H,NEXT3 MOVX @R0,A LCALL DELAY MOV A,#0FFH ;全滅 MOVX @R0,A LCALL DELAY MOV A,#00H
;全亮
MOVX @R0,A
LCALL DELAY
LJMP MAIN NEXT3: LJMP CHECK FOUR: MOV R6,#5EH ;字型碼“D”(花型4)
LCALL SHOW MOV R0,#02H CLR A MOVC A,@A+DPTR
;查表
MOVX @R0,A LCALL DELAY
INC DPTR
CJNE A,#0FFH,NEXT4 MOVX @R0,A LCALL DELAY LJMP MAIN NEXT4: LJMP CHECK DTAB: DB 0E7H,0C3H,81H,00H
DB
81H, 0C3H, 0E7H,0FFH SHOW: MOV R0,#03H ;字位碼送PC口
MOV A,#00H
顯示程序 MOVX @R0,A MOV R0,#01H ;字位碼送PA口 MOV A,R6 MOVX @R0,A LCALL DELAY RET DELAY: JB P1.6,DELAY1 ;延時(shí)程序 JB P1.5,DELAY2 MOV R7,#5 L0: MOV R6,#100 L1: MOV R5,#100 L2: DJNZ R5,L2 DJNZ R6,L1
DJNZ R7,L0
SJMP LAST
MOV R7,#15
;減速 DELAY1: SJMP L0 MOV R7,#01 ;加速 DELAY2: SJMP L0 RET LAST: END
七、實(shí)習(xí)總結(jié): 學(xué)了一年的單片機(jī),對(duì)這門(mén)功課一直抱著最害怕的心理,因?yàn)榭傆X(jué)得很難的樣子,而且很多知識(shí)好像總是不能入腦一樣,這時(shí)記得了,轉(zhuǎn)身就會(huì)忘記,或許就是學(xué)得不牢固吧。不過(guò)它也有讓人覺(jué)得有趣的時(shí)候,就是在實(shí)驗(yàn)室做實(shí)驗(yàn)的時(shí)候。將程序輸入單片機(jī),然后接上硬件電路,成功之后就會(huì)顯示出我們要的結(jié)果,那樣是很有趣的事情。這次的實(shí)習(xí)是一個(gè)循環(huán)燈的實(shí)驗(yàn)。當(dāng)然這次不像以前那樣,總是有程序讓我們照打,然后接線,運(yùn)行就可以了?,F(xiàn)在的要我們自己的找程序,自己想怎么根據(jù)程序去接電路,一切都是要自己去動(dòng)腦袋。開(kāi)始的時(shí)候我和很多同學(xué)一樣,由開(kāi)始不知道怎么做,然后一點(diǎn)一點(diǎn)去失敗,然后終于有了概念,自己要怎樣去想怎樣去做。后來(lái)參考了別人的那個(gè)程序,然后加上自己的理解,修改了一下那個(gè)程序,將花型變化了,還有顯示的數(shù)據(jù)變化,有一個(gè)新的模式。不過(guò)其實(shí)總的結(jié)構(gòu)還是萬(wàn)變不離其中的。我每一次改變,都會(huì)試一下,看看行不行,會(huì)不會(huì)有影響等等的。最后調(diào)試到我覺(jué)得可以之后,才交功課的。學(xué)了一年的單片機(jī),幾乎都要“使盡腦汁“了,完成了還是很高興,有過(guò)構(gòu)想,要是就這樣把程序和方針的電路弄在一起,也做個(gè)電路板,還是不錯(cuò)的。
第二篇:?jiǎn)纹瑱C(jī)控制的交通燈控制系統(tǒng)設(shè)計(jì)
摘要
本設(shè)計(jì)是單片機(jī)控制的交通燈控制系統(tǒng)設(shè)計(jì)。由單片機(jī)系統(tǒng)、LED顯示、交通燈演示系統(tǒng)、鍵盤(pán)電路及其控制電路組成。該系統(tǒng)除基本交通燈功能外,還具有倒計(jì)時(shí)、緊急情況處理、調(diào)整通行時(shí)間以及根
據(jù)具體情況手動(dòng)控制等功能。
十字路口的交通燈在工作時(shí)應(yīng)具有如下特點(diǎn):紅燈表示該條道路禁止通性;黃燈表示該條道路上未過(guò)停車(chē)線的車(chē)輛禁止通行,已過(guò)停車(chē)線的車(chē)輛繼續(xù)通性;綠燈亮表示該條道路允許通行。該系統(tǒng)使用12MHZ晶振與單片機(jī)AT89S52相連接,通過(guò)軟件編程的方法實(shí)現(xiàn)十字路口的交通燈控制,輸入裝置是鍵盤(pán)開(kāi)關(guān),用于控制交通燈的運(yùn)行模式以及設(shè)置通行時(shí)間,顯示裝置是兩位的LED七段數(shù)碼管。該系統(tǒng)是由AT89S52單片機(jī)控制的,可以實(shí)現(xiàn)以下功能:
1.南北方向(主干道)車(chē)道和東西方向(支干道)兩條交叉道路上的車(chē)輛交替運(yùn)行,主干道每次通行時(shí)間都設(shè)為30秒、支干道每次通行間為20秒,時(shí)間可設(shè)置修改。
2.在綠燈轉(zhuǎn)為紅燈時(shí),要求黃燈先亮5秒鐘,才能變換運(yùn)行車(chē)道。
3.黃燈亮?xí)r,要求每秒閃亮一次。
4.東西方向、南北方向車(chē)道除了有紅、黃、綠燈指示外,每一種燈亮的時(shí)間都用顯示器進(jìn)行顯示(采
用計(jì)時(shí)的方法)。
5.一道有車(chē)而另一道無(wú)車(chē)(實(shí)驗(yàn)時(shí)用開(kāi)關(guān) K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車(chē)道放行。
6.有緊急車(chē)輛要求通過(guò)時(shí),系統(tǒng)要能禁止普通車(chē)輛通行,A、B道均為紅燈。
關(guān)鍵字:AT89S52單片機(jī),交通燈,LED顯示,鍵盤(pán)開(kāi)關(guān)電路。
目 錄
1概述…………………………………………………………………………-3-1.1設(shè)計(jì)背景 ……………………………………………………………-3-1.2設(shè)計(jì)目的 ……………………………………………………………-3-1.3設(shè)計(jì)要求 ……………………………………………………………-3-2 系統(tǒng)總體方案及硬件設(shè)計(jì) ………………………………………………-4-2.1 設(shè)計(jì)原理……………………………………………………………-4-2.2 各功能模塊設(shè)計(jì)……………………………………………………-4-2.2.1單片機(jī)AT89S52介紹 …………………………………………-4-2.2.2總體方案 ………………………………………………………-5-2.2.3時(shí)鐘電路模塊 …………………………………………………-6-2.2.4復(fù)位電路模塊 …………………………………………………-6-2.2.5交通燈演示模塊 ………………………………………………-7-2.2.6 LED顯示模塊 …………………………………………………-7-2.2.7鍵盤(pán)開(kāi)關(guān)模塊 …………………………………………………-8-3 軟件設(shè)計(jì) …………………………………………………………………-10-3.1程序流程圖 …………………………………………………………-10-3.2系統(tǒng)軟件設(shè)計(jì)………………………………………………………-11-3.2.1 LED的編程……………………………………………………-11-3.2.2交通燈模塊的編程設(shè)計(jì)………………………………………-12-3.2.3定時(shí)器程序……………………………………………………-12-3.2.4鍵盤(pán)程序………………………………………………………-13-3.2.4.1通行時(shí)間設(shè)置程序………………………………………-13-3.2.4.2緊急情況處理程序………………………………………-14-3.2.4.3狀態(tài)調(diào)整程序……………………………………………-14-4 Proreus仿真 ……………………………………………………………-15-4.1正常工作狀態(tài)………………………………………………………-15-4.2時(shí)間調(diào)整……………………………………………………………-17-4.3緊急狀況……………………………………………………………-19-4.4狀態(tài)調(diào)整……………………………………………………………-20-5課程設(shè)計(jì)體會(huì) ……………………………………………………………-22-參考文獻(xiàn)……………………………………………………………………-23-附1:源程序代碼 …………………………………………………………-24-附2:系統(tǒng)原理圖 …………………………………………………………-32-概述 1.1 設(shè)計(jì)背景
人們?cè)絹?lái)越關(guān)注城市交通問(wèn)題,而交通燈在安全行車(chē)過(guò)程中起十分重要的作用, 現(xiàn)在交通燈一般設(shè)在十字路口,在醒目位置用紅、綠、黃三種顏色的指示燈, 加上一個(gè)倒計(jì)時(shí)的顯示計(jì)時(shí)器來(lái)控制行車(chē), 對(duì)于一般情況下的安全行車(chē)、車(chē)輛分流發(fā)揮著作用, 但根據(jù)實(shí)際行車(chē)過(guò)程中出現(xiàn)的情況, 主要有如下幾個(gè)缺點(diǎn):
1、車(chē)道讓車(chē)輪流放行時(shí)間相同且固定, 在十字路口, 經(jīng)常出現(xiàn)有些車(chē)道車(chē)輛較多, 放行時(shí)間應(yīng)該長(zhǎng)些;而有些車(chē)道車(chē)輛較少,放行時(shí)間應(yīng)短些。
2、沒(méi)有考慮緊急車(chē)通過(guò)時(shí), 兩車(chē)道應(yīng)采取的措施, 譬如, 有消防車(chē)通過(guò)執(zhí)行緊急任務(wù)時(shí), 兩車(chē)道的車(chē)都應(yīng)停止, 讓緊急車(chē)輛通過(guò)。根據(jù)行車(chē)過(guò)程中出現(xiàn)的實(shí)際情況, 如何合理高效地利用交通燈指示交通情況,這是一個(gè)迫切需要解決的問(wèn)題。
1.2 設(shè)計(jì)目的
1.進(jìn)一步熟悉和掌握單片機(jī)的結(jié)構(gòu)及工作原理。
2.掌握單片機(jī)的接口技術(shù)及相關(guān)外圍芯片的外特性,控制方法。3.通過(guò)課程設(shè)計(jì),掌握以單片機(jī)核心的電路設(shè)計(jì)的基本方法和技術(shù)。4.通過(guò)實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù)。5.了解開(kāi)發(fā)單片機(jī)應(yīng)用系統(tǒng)的全過(guò)程,為今后從事相關(guān)事業(yè)打下基礎(chǔ)。
1.3 設(shè)計(jì)要求
1.設(shè)計(jì)一個(gè)十字路口的交通燈控制電路,要求南北方向(主干道)車(chē)道和東西方向(支干道)車(chē)道兩條交叉道路上的車(chē)輛交替運(yùn)行,主干道每次通行時(shí)間都設(shè)為30秒、支干道每次通行時(shí)間為20秒,時(shí)間
可設(shè)置修改。
2.在綠燈轉(zhuǎn)為紅燈時(shí),要求黃燈先亮5秒鐘,才能變換運(yùn)行車(chē)道;
3.黃燈亮?xí)r,要求每秒閃亮一次。
4.東西方向、南北方向車(chē)道除了有紅、黃、綠燈指示外,每一種燈亮的時(shí)間都用顯示器進(jìn)行顯示(采
用計(jì)時(shí)的方法)。
5.一道有車(chē)而另一道無(wú)車(chē)(實(shí)驗(yàn)時(shí)用開(kāi)關(guān) K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車(chē)道放行。
6.有緊急車(chē)輛要求通過(guò)時(shí),系統(tǒng)要能禁止普通車(chē)輛通行,A、B道均為紅燈。系統(tǒng)總體方案及硬件設(shè)計(jì)
2.1 設(shè)計(jì)原理
本設(shè)計(jì)使用的是單片機(jī)作為核心的控制元件,使得電路的可靠性比較高,功能也比較強(qiáng)大,而且可以隨時(shí)更新系統(tǒng),根據(jù)道路情況適時(shí)調(diào)整交通燈的狀態(tài),全面有效地利用交通燈指示交通情況。該設(shè)計(jì)是以單片機(jī)AT89S52為核心完成的,在硬件電路中采用P1口點(diǎn)亮交通指示燈,采用P0口和P2口作為2位LED數(shù)碼管的驅(qū)動(dòng)接口,可顯示各個(gè)方向的交通燈的持續(xù)時(shí)間,單片機(jī)外圍接有按鍵開(kāi)關(guān)電路,可以響應(yīng)外部中斷及鍵盤(pán)程序,實(shí)現(xiàn)緊急情況處理、調(diào)整交通燈的點(diǎn)亮?xí)r間等功能。芯片選用AT89C51 單片機(jī),電路由下列部分組成:時(shí)鐘電路、復(fù)位電路、鍵盤(pán)電路、交通燈演示電
路、LED顯示電路。
2.2 各功能模塊設(shè)計(jì) 2.2.1 單片機(jī)AT89S52介紹
AT89S52是一個(gè)低電壓,高性能CMOS型 8位單片機(jī),片內(nèi)含8KB的可反復(fù)擦寫(xiě)的Flash只讀程序存儲(chǔ)器(ROM)和256 B的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)。AT89S52是一個(gè)低功耗高性能單片機(jī),40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,AT89S52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。
引腳使用說(shuō)明:
I/O端口的編程實(shí)際上就是根據(jù)應(yīng)用電路的具體功能和要求對(duì)I/O寄存器進(jìn)行編程。具體步驟如下:
l.根據(jù)實(shí)際電路的要求,選擇要使用哪些I/O端口。
2.初始化端口的數(shù)據(jù)輸出寄存器,應(yīng)避免端口作為輸出時(shí)的開(kāi)始階段出現(xiàn)不確定狀態(tài),影響外圍電
路正常工作。
3.根據(jù)外圍電路功能,確定PO端口的方向,初始化端口的數(shù)據(jù)方向寄存器。對(duì)于用作輸入的端口可以不考慮方向初始化,因?yàn)镻O的復(fù)位缺省值為輸入。
4.用作輸入的PO管腳,需上拉電阻。
5.最后對(duì)I/O端口進(jìn)行輸出(寫(xiě)數(shù)據(jù)輸出寄存器)和輸入(讀端口)編程,完成對(duì)外圍電路的相應(yīng)功能。
幾個(gè)特殊管腳:
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
XTAL2:來(lái)自反向振蕩器的輸出。
RST: 復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平。
2.2.2 總體方案 此交通燈系統(tǒng)位于一個(gè)十字路口,此路口為東南西北走向。南北方向?yàn)橹鞲傻?,東西方向?yàn)橹Ц傻?。各干道有一組紅、綠、黃三色的指示燈,指揮車(chē)輛和行人安全通行。紅燈亮禁止通行,綠燈亮允許通行,黃燈亮提示人們注意紅、綠燈的狀態(tài)即將切換。
此交通燈系統(tǒng)工作過(guò)程分為4個(gè)狀態(tài)。狀態(tài)0南北方向綠燈亮,東西方向紅燈亮。過(guò)25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時(shí)5秒鐘再轉(zhuǎn)為狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。過(guò)15秒后轉(zhuǎn)為狀態(tài)3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮
一次。歷時(shí)5秒鐘又循環(huán)至狀態(tài)0。
交通燈的狀態(tài)表如下:
狀態(tài)(時(shí)間)主干道—SN 紅—R 0 1 2 3 0 0 1 1
綠—G 1 0 0 0
黃—Y 0 1/0 0 0
表01 交通燈的狀態(tài)表
注:
1:SN:南北方向。WE:東西方向。2:狀態(tài):0:熄。1:亮。1/0:閃。
2.2.3 時(shí)鐘電路模塊
時(shí)鐘電路模塊給單片機(jī)提供特定的時(shí)鐘周期,以備單片機(jī)工作使用。單片機(jī)的機(jī)器周期有6MHz和12MHz的兩種。這里采用的是12MHZ的晶振,以給單片機(jī)提供12MHz的機(jī)器周期。另外有兩個(gè)30P的電容,兩晶振引腳分別連到XTAL1和XTAL2振蕩脈沖輸入引腳。
其電路圖如圖02所示:
支干道—WE 紅—R 1 1 0 0
綠—G 0 0 1 0
黃—Y 0 0 0 1/0
圖02 時(shí)鐘電路模塊
2.2.4 復(fù)位電路模塊
單片機(jī)系統(tǒng)的復(fù)位電路采用的是上電+按鈕復(fù)位電路形式,其中電阻R采用10KΩ的阻值,電容采用
電容值為10μF的電解電容。其具體連接電路如圖03所示:
圖03 復(fù)位電路模塊 2.2.5 交通燈演示模塊
此交通燈演示模塊由單片機(jī)的P1口作信號(hào)輸出端來(lái)控制12個(gè)交通燈的亮滅,交通燈采用的是發(fā)光二極管。因?yàn)閱纹瑱C(jī)的輸出電流非常小,為了使發(fā)光二極管能夠發(fā)光或者更亮,二極管采用共陽(yáng)極接法。即陽(yáng)極通過(guò)470Ω電阻接+5V直流電源,陰極接單片機(jī)P1口。同時(shí)南北方向同色燈連同上拉電阻一起并聯(lián),東西方向也是一樣,以保證同一干道上的同色燈同時(shí)點(diǎn)亮或熄滅,并且流過(guò)二極管的電流不會(huì)因并聯(lián)
而減半。
其具體連接電路如圖04所示:
圖04交通燈演示電路 2.2.6 LED顯示模塊 由于同一干道上的兩個(gè)方向的紅燈,綠燈,黃燈點(diǎn)亮?xí)r間相同,所以南北方向只需一個(gè)數(shù)碼管顯示
相應(yīng)的時(shí)間即可,同理東西方向也只需一個(gè)。
本次交通燈設(shè)計(jì)采用兩位一體的共陰極數(shù)碼管來(lái)顯示相應(yīng)的時(shí)間。由單片機(jī)的P0口輸出字型碼,P2口的前四位P2.0~P2.3作位選端。位選端接LED的共陰極,故低電位有效。因?yàn)閱纹瑱C(jī)I/O口的驅(qū)動(dòng)電流很小,一般只有幾個(gè)毫安。為了增加驅(qū)動(dòng)能力,每個(gè)LED上都加上一個(gè)上拉電阻,接入+5V電源,本次設(shè)計(jì)采用的是排阻。當(dāng)P0口輸出低電平時(shí),LED不導(dǎo)通,上拉電阻電流灌進(jìn)單片機(jī),而當(dāng)P0口輸出高電平時(shí),LED導(dǎo)通。而且上拉電阻的電流也通過(guò)LED,這自然就增加了LED的發(fā)光亮度。
其具體連接電路如圖05所示:
圖05 LED顯示電路 2.2.7 鍵盤(pán)開(kāi)關(guān)模塊
此系統(tǒng)通過(guò)5個(gè)開(kāi)關(guān)實(shí)現(xiàn)所有的要求,開(kāi)關(guān)一端接地,另一端接單片機(jī)的P3口。K0接P3^7,當(dāng)主干道有車(chē)而支干道無(wú)車(chē)時(shí),按一下K0鍵,可以實(shí)現(xiàn)主干道通行。K1接P3^6,當(dāng)支干道有車(chē)而主干道無(wú)車(chē)時(shí),按一下K1鍵,可以實(shí)現(xiàn)支干道通行。K2接P3^3,利用中斷1的方式對(duì)緊急情況進(jìn)行處理,即使東南西北四個(gè)方向都亮紅燈停車(chē)。K4接P3^2,利用中斷0的方式對(duì)各個(gè)干道的通行時(shí)間進(jìn)行設(shè)置。在相應(yīng)中斷0期間,K0,K1起調(diào)整時(shí)間的作用。每按一下K0,主干道通行時(shí)間加一,每按一下K0,主干道通行時(shí)間加一。K3接P3^5,按一下K3,可以使系統(tǒng)退出中斷,回到主程序。
其具體連接電路如06圖示:
圖06 鍵盤(pán)開(kāi)關(guān)電路 軟件設(shè)計(jì) 3.1 系統(tǒng)流程圖
(注:判斷框SN=0,WE=0處的Y,N位置標(biāo)反了,讀者自己改正。)
3.2 系統(tǒng)軟件設(shè)計(jì) 本次單片機(jī)課程設(shè)計(jì)軟件部分利用C語(yǔ)言編程,采用模塊化程序設(shè)計(jì)。程序部分由主程序、定時(shí)器程序、T0/T1中斷服務(wù)程序、鍵盤(pán)掃描程序、交通燈點(diǎn)亮程序、LED數(shù)碼管掃描顯示程序和延時(shí)程序構(gòu)成。
3.2.1 LED的編程
本次交通燈設(shè)計(jì)采用兩位一體的共陰極數(shù)碼管來(lái)顯示相應(yīng)的時(shí)間。數(shù)碼管為七段數(shù)碼管,由8個(gè)發(fā)光二極管構(gòu)成,通過(guò)不同的組合可用來(lái)顯示數(shù)字0-9,字符A-F、H、L、P、R、U、Y、符號(hào)“-”及小數(shù)點(diǎn)“.”。
本設(shè)計(jì)只需要顯示數(shù)字0-9,來(lái)表示相應(yīng)的時(shí)間。
共陰極數(shù)碼管的8個(gè)發(fā)光二極管的陰極連接在一起接位選端。兩個(gè)兩位一體的共陰極數(shù)碼管共有4個(gè)位選端,分別接在 P2^O-P2^3,低電平有效。數(shù)碼管各個(gè)陽(yáng)極管腳接各段的驅(qū)動(dòng)電路輸出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高電平有效。
本設(shè)計(jì)采用逐位掃描的方式實(shí)現(xiàn)相應(yīng)時(shí)間的動(dòng)態(tài)顯示。先將P2^1置低電平,P2^0、P2^
2、P2^3置高電平,來(lái)選中南北方向數(shù)碼管的個(gè)位,此時(shí)P0口的數(shù)據(jù)接傳送給它顯示。經(jīng)延時(shí)一段時(shí)間,將P2^1置低電位選中南北方向數(shù)碼管的十位,此時(shí)P0口的數(shù)據(jù)接傳送給它顯示。再用同樣的方法依次驅(qū)動(dòng)?xùn)|西方向數(shù)碼管。通過(guò)不斷改變P0口、P2口的輸出,用循環(huán)掃描的方式,即可實(shí)現(xiàn)LED的動(dòng)態(tài)顯示。
LED動(dòng)態(tài)顯示的流程圖如圖08:
3.2.2交通燈模塊的編寫(xiě)設(shè)計(jì)
本次設(shè)計(jì)的交通燈演示模塊由單片機(jī)的P1口作信號(hào)輸出端來(lái)控制12個(gè)交通燈的亮滅。P1^1-P1^6依次連接南北的紅燈、綠燈、黃燈,東西的紅燈、綠燈,黃燈。所以4種狀態(tài)依次為0x6A,0x66,0x5C,0x3C。當(dāng)交通燈的剩余時(shí)間為零時(shí),改變P1口的輸出,進(jìn)而改變交通燈的點(diǎn)亮狀態(tài)。交通燈依次循環(huán)上面的4個(gè)狀態(tài),就可以實(shí)現(xiàn)指揮交通的作用。
3.2.3 定時(shí)器程序
本次設(shè)計(jì)用定時(shí)計(jì)數(shù)器T1,TMOD是定時(shí)計(jì)算器的工作方式控制寄存器,通過(guò)對(duì)該寄存器的操作可以改變T1的工作方式。T1有4種工作方式,由TMOD寄存器中間的M1、M0這兩位來(lái)決定。本次設(shè)計(jì)的定時(shí)計(jì)數(shù)器工作在工作方式1,M1、M0設(shè)定為01。定時(shí)計(jì)算器采用加1計(jì)數(shù)的方式,當(dāng)接收到一個(gè)驅(qū)動(dòng)事件時(shí)計(jì)數(shù)器加1。工作方式1的內(nèi)部計(jì)數(shù)器寬度為16位,由TH1的8位和TL1的8位組成。當(dāng)TL1溢出時(shí)將向TH1進(jìn)位,當(dāng)TH1溢出后會(huì)產(chǎn)生相應(yīng)的溢出中斷。
驅(qū)動(dòng)事件之間的時(shí)間間隔即為定時(shí)計(jì)數(shù)器的定時(shí)寬度。在定時(shí)的工作方式下,定時(shí)寬度是單片機(jī)的機(jī)械周期,也是外部時(shí)鐘頻率的1/12。本次設(shè)計(jì)的外部時(shí)鐘頻率為12MHz??芍?,接收106個(gè)驅(qū)動(dòng)事件的時(shí)間為1s。
定是1s的流程圖如圖09所示:
3.2.4 鍵盤(pán)程序
為了實(shí)現(xiàn)設(shè)置通行時(shí)間、緊急情況處理、有車(chē)放行等功能,本次設(shè)計(jì)中有鍵盤(pán)電路。通行時(shí)間設(shè)置由外部中斷0實(shí)現(xiàn),緊急情況由外部中斷1處理,有車(chē)放行是用普通的鍵盤(pán)程序?qū)崿F(xiàn)的。按鍵實(shí)際是一種常用的按鈕,按鍵未按下時(shí),鍵的兩個(gè)觸點(diǎn)處于斷開(kāi)狀態(tài),按鍵按下時(shí),兩個(gè)觸點(diǎn)閉合。按鍵是利用機(jī)械觸點(diǎn)來(lái)實(shí)現(xiàn)鍵的閉合和釋放,由于彈性作用的影響,機(jī)械觸點(diǎn)在閉合及斷開(kāi)瞬間均
有抖動(dòng)過(guò)程,從而使鍵輸入也出現(xiàn)抖動(dòng)。
抖動(dòng)時(shí)間一般為5—10ms。本次設(shè)計(jì)采用軟件的辦法消抖。在第一次檢測(cè)到有鍵按下時(shí)不動(dòng)作,延時(shí)10ms,再次檢測(cè)按鍵的狀態(tài),如果仍保持閉合狀態(tài),則確定真的有鍵按下。當(dāng)按鍵釋放后,轉(zhuǎn)入按鍵的處理程序 延時(shí)程序如下: /*延時(shí)t毫秒*/ void delay(uchar t)
{
uchar i;/*定義無(wú)符號(hào)字符常量*/ for(t;t>0;t--)/*執(zhí)行t次循環(huán)*/
{ for(i=2000;i>0;i--)/*由于時(shí)鐘脈沖是12MHz,執(zhí)行2000次循環(huán)的時(shí)間為1ms*/
{ } } }
3.2.4.1 通行時(shí)間設(shè)置程序
本次設(shè)計(jì)通過(guò)外部中斷0設(shè)置各個(gè)干道的通行時(shí)間。
外部中斷0的請(qǐng)求信號(hào)由P3^2引腳輸入,采用低電平有效的方式響應(yīng)中斷,即IT0=1。響應(yīng)中斷0期間,CPU禁止響應(yīng)其他中斷,按鍵K0,K1起調(diào)整時(shí)間的作用。采用加1的方式,每按一下K0,主干道通行時(shí)間加1,每按一下K1,支干道通行時(shí)間加1。通行時(shí)間可以直接在數(shù)碼管上顯示出來(lái)。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點(diǎn)處,從下一個(gè)狀態(tài)開(kāi)始執(zhí)行新設(shè)置的通行時(shí)間。CPU再開(kāi)放總中斷。
由于本次設(shè)計(jì)使用兩位一體的共陰極數(shù)碼管顯示時(shí)間,故設(shè)置各個(gè)干道的通行時(shí)間的范圍為0—100s??紤]道路通車(chē)的實(shí)際情況,時(shí)間太短無(wú)法通過(guò)交通路口,所以本設(shè)計(jì)中通行時(shí)間下限為6s(綠燈1s,黃燈5s)。在6—99s之間可以任意設(shè)置通行時(shí)間,更合理高效的指揮交通。
3.2.4.2 緊急情況處理程序
本次設(shè)計(jì)通過(guò)外部中斷1實(shí)現(xiàn)對(duì)緊急情況的處理。
與外部中斷0相仿。外部中斷1的請(qǐng)求信號(hào)有P3^3引腳輸入,采用低電平有效的方式相應(yīng)中斷,即IT0=1。響應(yīng)中斷1期間,CPU禁止響應(yīng)其他中斷,東南西北四個(gè)方向均亮紅燈,各個(gè)干道都禁止通行。由于不確定要持續(xù)多久,不采用倒計(jì)時(shí)的方式顯示時(shí)間,數(shù)碼管顯示00。緊急情況結(jié)束時(shí),按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點(diǎn)處,CPU再開(kāi)放總中斷。
3.2.4.3 狀態(tài)調(diào)整程序
在實(shí)際交通系統(tǒng)中,很有可能會(huì)不時(shí)的出現(xiàn)一道有車(chē)而另一道無(wú)車(chē)的情況,為了更合理高效的指揮交通,本次設(shè)計(jì)的交通燈控制系統(tǒng)能立即讓有車(chē)道放。由開(kāi)關(guān) K0 和 K1 控制。采用查詢(xún)的方式不斷掃描K0、K1,看有沒(méi)有鍵按下。按一下K0鍵,可以實(shí)現(xiàn)主干道通行,按一下K1鍵,可以實(shí)現(xiàn)支干道通行。
此時(shí)交通狀態(tài)的改變是因?yàn)榱硪宦窡o(wú)車(chē),所以不需要設(shè)置返回,直接按主程序循環(huán)指揮。也有可能較長(zhǎng)時(shí)間出現(xiàn)一道有車(chē)另一道無(wú)車(chē)的情況,只需多次按K0或K1鍵即可。Proteus仿真 4.1 正常工作狀態(tài)
本次設(shè)計(jì)的交通燈控制系統(tǒng)共有四個(gè)工作狀態(tài),分別是狀態(tài)0、狀態(tài)
1、狀態(tài)2和狀態(tài)3。開(kāi)始時(shí)先執(zhí)行狀態(tài)0,南北方向綠燈亮,東西方向紅燈亮。歷時(shí)25秒。如圖10所示:
圖10 狀態(tài)0 25秒后轉(zhuǎn)為狀態(tài)1,南北方向綠燈滅,黃燈每秒閃亮一次,東西方向還是紅燈亮。歷時(shí)5秒。如圖
11所示:
圖11 狀態(tài)1 5秒后再轉(zhuǎn)狀態(tài)2,南北方向紅燈亮,東西方向綠燈亮。歷時(shí)15秒。如圖12所示:
圖12 狀態(tài)2 15秒后轉(zhuǎn)狀態(tài)3,南北方向還是紅燈亮,東西方向綠燈滅,黃燈每秒閃亮一次。歷時(shí)5秒。如圖1
3所示:
圖13 狀態(tài)3
此狀態(tài)結(jié)束后再回到狀態(tài)0,如此循環(huán)進(jìn)行。
4.2 時(shí)間調(diào)整
按一下開(kāi)關(guān)K4,系統(tǒng)響應(yīng)外部中斷0,進(jìn)入通行時(shí)間調(diào)整程序。各個(gè)干道的通行時(shí)間有數(shù)碼管顯
示。如圖14所示:
圖14 時(shí)間調(diào)整
按鍵K0,K1起調(diào)整時(shí)間的作用,每按一下K0,主干道通行時(shí)間加1,每按一下K1,支干道通行時(shí)間加1。多次按鍵即可調(diào)整到合理的通行時(shí)間。如圖15所示:
圖15 通行時(shí)間+1 按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點(diǎn)處,從下一個(gè)狀態(tài)開(kāi)始執(zhí)行新設(shè)置的通行時(shí)間。
如圖16、17所示:
圖16 主干道按新設(shè)置的時(shí)間執(zhí)行
圖17 支干道按新設(shè)置的時(shí)間執(zhí)行
4.3 緊急情況
當(dāng)出現(xiàn)緊急情況時(shí),按一下開(kāi)關(guān)K2,系統(tǒng)響應(yīng)外部中斷1,各個(gè)方向均亮紅燈禁止通行,數(shù)碼管均顯示0。按一下K3,可以使系統(tǒng)退出中斷,回到主程序斷點(diǎn)處。如圖18所示
圖18 緊急情況 4.4 狀態(tài)調(diào)整
為了更合理高效的指揮交通,當(dāng)南北方向有車(chē)而東西方向無(wú)車(chē)時(shí),按K0,系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到狀態(tài)0,實(shí)現(xiàn)南北方向通行。如圖19所示:
圖19 南北方向有車(chē)而東西方向無(wú)車(chē)時(shí),南北放行
當(dāng)東西方向有車(chē)而南北方向無(wú)車(chē)時(shí),按K1,系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到狀態(tài)2,實(shí)現(xiàn)東西方向通行。如圖20
所示:
圖20 東西方向有車(chē)而南北方向無(wú)車(chē)時(shí),東西放行 課程設(shè)計(jì)體會(huì)
很榮幸有這次課程設(shè)計(jì)的機(jī)會(huì),我可以把理論的學(xué)習(xí)與實(shí)踐有機(jī)的結(jié)合起來(lái)。
在設(shè)計(jì)過(guò)程中,首先要分析課題,根據(jù)所學(xué)知識(shí)繪制出系統(tǒng)總體設(shè)計(jì)框圖。然后按照自己的設(shè)計(jì)思路,利用所給的元器件繪制出設(shè)計(jì)圖。在繪制設(shè)計(jì)圖連接各個(gè)元器件的時(shí)候,要盡量使布線合適,從而使所作設(shè)計(jì)圖清晰易看。繪制完設(shè)計(jì)圖后,接下來(lái)就是要根據(jù)設(shè)計(jì)所要求的功能和已完成的設(shè)計(jì)圖編寫(xiě)程序,在編程時(shí),首先應(yīng)該繪制出主程序流程圖,然后采用模塊化程序設(shè)計(jì)的方式,編寫(xiě)實(shí)現(xiàn)各個(gè)功能的子程序,再將各個(gè)子程序與主程序連接起來(lái)。在設(shè)計(jì)程序時(shí)要不斷對(duì)程序進(jìn)行修改,同時(shí)在設(shè)計(jì)程序的過(guò)程中要養(yǎng)成注釋程序的習(xí)慣,在對(duì)程序進(jìn)行修改的時(shí)候,可以通過(guò)注釋很容易的看出各句程序的功能,清晰明朗。當(dāng)程序設(shè)計(jì)出來(lái)之后,就可以通過(guò)仿真軟件對(duì)其進(jìn)行編譯,生成仿真所需要的HEX文件。將生成的文件加載到系統(tǒng)圖的單片機(jī)上,就可以進(jìn)行系統(tǒng)仿真。通過(guò)仿真,檢測(cè)所作設(shè)計(jì)是否能實(shí)現(xiàn)預(yù)期功能。本次課程設(shè)計(jì)使我對(duì)單片機(jī)的工作原理有了更深刻的認(rèn)識(shí),掌握了許多在以前學(xué)習(xí)中混淆不清的知識(shí)點(diǎn)。在翻閱相關(guān)書(shū)籍和查詢(xún)相關(guān)資料過(guò)程中學(xué)到了豐富的單片機(jī)知識(shí),開(kāi)闊了眼界,增廣了知識(shí)面。在編輯程序中,對(duì)C語(yǔ)言又有了新的認(rèn)識(shí)和理解。實(shí)物焊接中不僅鍛煉了自己的動(dòng)手能力,而且真正作到了
理論聯(lián)系實(shí)際的重要性,收益匪淺。
本次課程設(shè)計(jì)我參考的三本書(shū)。一本是余發(fā)山教授的《單片機(jī)原理及其應(yīng)用技術(shù)》,一本是在圖書(shū)館借的王為青老師編寫(xiě)的《單片機(jī)Keil Cx51應(yīng)用開(kāi)發(fā)技術(shù)》,還有一本就是賈宗璞老師的《C語(yǔ)言程序
設(shè)計(jì)》。在此向編者表示誠(chéng)摯的謝意。
本次設(shè)計(jì)中,我曾多次在課堂上向譚興國(guó)老師請(qǐng)教各個(gè)模塊設(shè)計(jì)的細(xì)節(jié)問(wèn)題,得到了譚老師的大力
幫助,在此深表感謝!
參考文獻(xiàn) [1] 余發(fā)山,王福忠.單片機(jī)原理及應(yīng)用技術(shù) 徐州:中國(guó)礦業(yè)大學(xué)出版社,2008 [2] 賈宗璞,許合利.C語(yǔ)言程序設(shè)計(jì) 徐州:中國(guó)礦業(yè)大學(xué)出版社,2007 [3] 王為青,程國(guó)剛.單片機(jī)Keil Cx51應(yīng)用開(kāi)發(fā)技術(shù) 北京:人民郵電出版社,2007
附1 源程序代碼
#include
有效*/ uchar code b[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/ uchar code c[4]={0x6A,0x66,0x5C,0x3C};/****P1口.低有效*/ char SN=25,WE=30;/*SN表示南北方向——主干道,WE表示東西方向——支干道*/ char SN_G=25,WE_G=15,Y=5;/*SN_G表示南北方向的綠燈,WE_G表示東西方向的綠燈,Y表
示黃燈*/
uchar i,k=0,count=0;/*定義無(wú)符號(hào)字符串變量*/
void delay(uchar t);/*定義函數(shù)*/
void light();/*定義函數(shù)*/ void led();/*定義函數(shù)*/ void ledthrough();/*定義函數(shù)*/ void leddrive();/*定義函數(shù)*/ sbit K0=P3^7;/*開(kāi)關(guān)K0接P3^7管腳*/ sbit K1=P3^6;/*開(kāi)關(guān)K1接P3^6管腳*/ sbit K2=P3^3;/*開(kāi)關(guān)K2接P3^3管腳*/ sbit K3=P3^5;/*開(kāi)關(guān)K3接P3^5管腳*/ sbit K4=P3^2;/*開(kāi)關(guān)K4接P3^2管腳*/
/*程序初始化*/ void init(void)
{ /*12MHz */ TMOD=0x01;/**計(jì)數(shù)器用模式1,為16位計(jì)數(shù)器*****/
TH1=(65536-50000)/256;/*0x3C*/ TL1=(65536-50000)%256;/*0xB0*//*計(jì)50000個(gè)數(shù),用時(shí)50ms*/
IT0=1;/*外部中斷為低電平觸發(fā)方式*/
ET0=1;/*允許T0中斷*/ TR0=1;/*啟動(dòng)計(jì)數(shù)器*/ EA=1;/*CPU開(kāi)放總中斷*/ EX0=1;/*允許外部中斷0中斷,即允許響應(yīng)端口P3^2(K4)中斷*/ EX1=1;/*允許外部中斷1中斷,即允許響應(yīng)端口P3^3(K2)中斷*/
}
/*中斷0處理程序*/ void int0(void)interrupt 0
{
EA=0;/*CPU禁止響應(yīng)一切中斷*/ P1=0x6C;/*東西南北方向均紅燈亮*/
TR0=!TR0;/*計(jì)數(shù)器停止工作*/
for(;;)/*無(wú)條件循環(huán)*/
{
ledthrough();/*調(diào)用通行時(shí)間顯示函數(shù)*/
/*設(shè)置南北方向通行時(shí)間*/ if(K0==0)/*P3^7=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K0==0)
{ while(!K0)/*當(dāng)松開(kāi)K0開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{
ledthrough();/*調(diào)用通行時(shí)間顯示函數(shù)*/
}
SN_G++;/*南北方向綠燈時(shí)間+1*/ if((SN_G+Y)==100)/*南北方向通行時(shí)間(綠燈加黃燈時(shí)間)為100s*/ SN_G=1;/*由于使用的是兩位數(shù)碼管,當(dāng)南北方向通行時(shí)間加到100后綠燈時(shí)間歸1*/
}
}
/*設(shè)置東西方向通行時(shí)間*/ if(K1==0)/*P3^6=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K1==0)
{ while(!K1)/*當(dāng)松開(kāi)K1開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{ ledthrough();/*調(diào)用通行時(shí)間顯示函數(shù)*/
}
WE_G++;/*東西方向綠燈時(shí)間+1*/ if((WE_G+Y)==100)/*東西方向通行時(shí)間(綠燈加黃燈時(shí)間)為100s*/ WE_G=1;/*由于使用的是兩位數(shù)碼管,當(dāng)東西方向通行時(shí)間加到100后綠燈時(shí)間歸1*/
} } /*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K3==0)
{ while(!K3)/*當(dāng)松開(kāi)K3開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{
ledthrough();/*調(diào)用通行時(shí)間顯示函數(shù)*/
}
TR0=!TR0;/*啟動(dòng)計(jì)數(shù)器*/ EA=1;/*CPU開(kāi)放總中斷*/
break;/*跳出*/
}
} } }
/*中斷1處理程序*/ void int1(void)interrupt 2
{ P1=0x6C,P0=a[0];/*東西南北方向均紅燈亮,P0口輸出0*/
EA=0;/*CPU禁止響應(yīng)一切中斷*/ TR0=!TR0;/*計(jì)數(shù)器停止工作*/
for(;;)/*無(wú)條件循環(huán)*/
{
leddrive();/*數(shù)碼管驅(qū)動(dòng)程序*/
/*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K3==0)
{ while(!K3)/*當(dāng)松開(kāi)K3開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{
leddrive();/*數(shù)碼管驅(qū)動(dòng)程序*/
}
EA=1;/*CPU開(kāi)放總中斷*/ TR0=!TR0;/*啟動(dòng)計(jì)數(shù)器*/ break;/*跳出*/ }
} }
} /*鍵盤(pán)程序*/ void key()
{
/*南北有車(chē)而東西無(wú)車(chē)*/ if(K0==0)/*K0=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K0==0)
{ while(!K0)/*當(dāng)松開(kāi)K0開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{
light();/*調(diào)用交通燈函數(shù)*/
led();/*調(diào)用數(shù)碼管函數(shù)*/
} count=0;/*清零*/
k=0;/*南北方向通車(chē),東西方向不通車(chē)*/ SN=SN_G,WE=SN_G+Y;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為
南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/
} }
/*南北無(wú)車(chē)而東西有車(chē)*/ if(K1==0)/*K1=0*/
{
delay(10);/*延時(shí),把抖動(dòng)的時(shí)間拋掉*/
if(K1==0)
{ while(!K1)/*當(dāng)松開(kāi)K1開(kāi)關(guān)時(shí),跳出循環(huán),執(zhí)行后面的程序*/
{
light();/*調(diào)用交通燈函數(shù)*/
led();/*調(diào)用數(shù)碼管函數(shù)*/
} count=0;/*清零*/
k=2;/*南北方向不通車(chē),東西方向通車(chē)*/ SN=WE_G+Y,WE=WE_G;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東
西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/
} } } /*定時(shí)函數(shù)*/
void time1(void)interrupt 1
{ TH0=0x3c;
TL0=0xb0;/*計(jì)50000個(gè)數(shù),用時(shí)50ms*/
count++;/*自增運(yùn)算*/
if(count>=20)/*當(dāng)count大于或等于20時(shí),歷時(shí)1s,執(zhí)行程序*/
{
SN--;/*自減運(yùn)算*/ WE--;/*自減運(yùn)算*/ count=0;/*清零*/ if(SN==0||WE==0)/*當(dāng)SN=0或者WE=0時(shí),執(zhí)行程序*/
{
k++;/*自增運(yùn)算*/ if(k>3)/*當(dāng)k>3時(shí),執(zhí)行程序*/
k=0;/*清零*/ switch(k)/*switch 語(yǔ)句*/
{ case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向顯示時(shí)間為南北方向綠燈通行時(shí)間,東西方向顯示時(shí)間為南北方向綠燈通行時(shí)間加黃燈閃亮?xí)r間*/ case 1:SN=Y,WE=Y;break;/*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向顯示時(shí)間為東西方向綠燈通行時(shí)間加黃燈閃亮?xí)r間,東西方向顯示時(shí)間為東西方向綠燈通行時(shí)間*/ case 3:SN=Y,WE=Y;break;/*東西南北方向顯示時(shí)間均為黃燈閃亮?xí)r間*/
} } } } /*延時(shí)t毫秒*/ void delay(uchar t)
{
uchar i;/*定義無(wú)符號(hào)字符常量*/ for(t;t>0;t--)/*執(zhí)行t次循環(huán)*/
{ for(i=2000;i>0;i--)/*由于時(shí)鐘脈沖是12MHz,執(zhí)行2000次循環(huán)的時(shí)間為1ms*/
{ } } } /*交通燈函數(shù)*/ void light()
{
P1=c[k];/*交通燈對(duì)應(yīng)著k的值變化*/ if(P1==c[1]&&count==0)/*當(dāng)南北方向亮黃燈且count=0時(shí),執(zhí)行程序*/
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;/*延時(shí)50ms*/ P1=0x6E;/*南北方向黃燈熄滅,東西方向亮紅燈*/
} else if(P1==c[3]&&count==0)/*當(dāng)東西方向亮黃燈且count=0時(shí),執(zhí)行程序*/
{
TH1=(65536-300000)/256;TL1=(65536-300000)%256;/*延時(shí)50ms*/ P1=0x7C;/*南北方向亮紅燈,東西方向黃燈熄滅*/
} } /*數(shù)碼管函數(shù)*/ void led()
{
P2=b[0],P0=a[SN%10];/*顯示南北方向個(gè)位*/
delay(5);/*延時(shí)*/
P2=b[1],P0=a[SN/10];/*顯示南北方向十位*/
delay(5);/*延時(shí)*/
P2=b[2],P0=a[WE%10];/*顯示東西方向個(gè)位*/
delay(5);/*延時(shí)*/
P2=b[3],P0=a[WE/10];/*顯示東西方向十位*/
delay(5);/*延時(shí)*/
}
/*通行時(shí)間顯示函數(shù)*/ void ledthrough()
{ P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向數(shù)碼管顯示可通行時(shí)間的個(gè)位*/
delay(5);/*延時(shí)*/
P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向數(shù)碼管顯示可通行時(shí)間的十位*/
delay(5);/*延時(shí)*/
P2=b[2],P0=a[(WE_G+Y)%10];/*東西方向數(shù)碼管顯示可通行時(shí)間的個(gè)位*/
delay(5);/*延時(shí)*/
P2=b[3],P0=a[(WE_G+Y)/10];/*東西方向數(shù)碼管顯示可通行時(shí)間的十位*/
delay(5);/*延時(shí)*/
}
/*數(shù)碼管驅(qū)動(dòng)函數(shù)*/ void leddrive()
{
P2=b[0];/*顯示南北方向個(gè)位*/
delay(5);/*延時(shí)*/
P2=b[1];/*顯示南北方向十位*/
delay(5);/*延時(shí)*/ P2=b[2];/*顯示東西方向個(gè)位*/
delay(5);/*延時(shí)*/ P2=b[3];/*顯示東西方向十位*/
delay(5);/*延時(shí)*/
} /*主函數(shù)*/ void main(void)
{
init();/*調(diào)用程序初始化函數(shù)*/
for(;;)/*無(wú)條件循環(huán)*/
{
key();/*調(diào)用鍵盤(pán)程序*/ light();/*調(diào)用交通燈函數(shù)*/ led();/*調(diào)用數(shù)碼管函數(shù)*/
} }
附2 系統(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í)間與提示信息。這種方案既滿(mǎn)足系統(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)足以滿(mǎ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.滿(mǎn)足南北向紅綠燈亮,東西向紅燈亮,占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ù)器記滿(mǎn)為零所需的計(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;}