欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11682|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于AT89S52單片機交通燈控制系統(tǒng)的設(shè)計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:304641 發(fā)表于 2018-4-9 18:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif
電子線路課程設(shè)計(2)
論文(設(shè)計)題目 其于AT89S52單片機交通燈控制系統(tǒng)的設(shè)計
系    別:    物理與電子工程系  
專    業(yè):     電子信息工程   
年    級:       2007級      
學(xué)生姓名:       賓  華        
指導(dǎo)教師:      鄒 清 平      
時    間:   2010年6月20日  
目  錄
      摘  要  ………………………………………………………………………………4
      關(guān)鍵詞  ……………………………………………………………………………  4
     一、設(shè)計任務(wù)與要求  ………………………………… …………… ………… 4
      二、方案設(shè)計與論證 ……………………………  ……………… …………… 4
      方案一 …………………………………………… …………… ……………4
       方案二 ……… ……… ……………………… … …… ……………………5  
      方案三……………………………………………… ………  ……………… 5
    三、硬件單元電路設(shè)計與參數(shù)計算  …………… ……………………………5
       1. 時鐘電路模塊  ………………………………… …… ……… ……………5
      2. 復(fù)位電路模塊 ………………………… ……………… ………………… 6
      3. 主控電路模塊  …………………………………… … …………………  6
  4. 交通燈控制模塊  …………………………  ………………………………7
  5. 時間顯示電路模塊  ……………………………… ………………………7
     6. 緊急通車電路模塊  …………………………… …… ……………………8
     四、軟件設(shè)計與流程圖 ………………………… …………………………………9
     五、總原電路及元器件清單………………………………………………………10
  1.總原理圖 ………………………………… …………………………………10
  2.  PCB制板圖…………………………… ………… …………………………10
   3. 整體電路仿真圖以及仿真結(jié)果分析………………… …… …………11
   4.元件清單………………………… …………… ……………………………12
   六、安裝與調(diào)試………………… …………… …………………………………… 12
   1. 電路安裝…………………………… ………… ……………………………12
  2. 電路調(diào)試…………………………………… ………………………………12
   3. 軟件調(diào)試………………………………… …………………………………13
   七、性能測試與分析 ………………………………………………………………13
   八、結(jié)論與心得 ………………………… …………………………………………13
   九、參考文獻 ……………………… ………………………………………………14
   十、致謝 ……………………………… ……… ……………………………………14
   十一、程序清單 ……………………… ……………………………………………14
摘要:
近年來隨著科技的飛速發(fā)展,單片機的應(yīng)用正在不地走向深入,同時帶動傳統(tǒng)控制檢測日新月益更新。在實時檢測和自動控制的單片機應(yīng)用系統(tǒng)中,單片機往往是作為一個核心部件來使用,單片機方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對具體應(yīng)用對象特點的軟件結(jié)合,加以完善。交通信號燈的出現(xiàn),使交通得以有效管制,對于疏導(dǎo)交通流量、提高道路通行能力,減少交通事故有明顯效果。本系統(tǒng)采用單片機AT89S52為中心器件來設(shè)計交通燈控制器,系統(tǒng)實用性強、操作簡單、擴展性強。
關(guān)鍵詞:
1、單片機最小系統(tǒng)。
2、紅、黃、綠LED交通燈。
3、緊急通車開關(guān)。
一、設(shè)計任務(wù)與要求
     用AT89S52單片機控制一個交通信號燈系統(tǒng),晶振采用12MHZ。
    設(shè)A車道與B車道交叉組成十字路口,A是主道,B是支道。設(shè)計要求如下:
用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號。正常情況下,A、B兩車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。交通繁忙時,交通信號燈控制系統(tǒng)應(yīng)有手控開關(guān),可人為地改變信號燈的狀態(tài),以緩解交通擁擠狀況。在B 車道放行期間,若A車道有車而B車道無車,按下開關(guān)K1 使 A車道放行15s;在 A車道放行期間,若B車道有車而A車道無車,按下開關(guān)K1 使B 車道放行15s。有緊急車輛通過時,按下K2開關(guān)使 A、B車道均為紅燈,禁行20s。
二、方案設(shè)計與論證
方案一:
    交通控制系統(tǒng)主要控制AB兩車道的交通,以AT89S52單片機為核心芯片,通過控制三色LED的亮滅來控制各車道的通行;另外通過2個按鍵來模擬各車道有無車輛的情況和有緊急車輛的情況。根據(jù)設(shè)計要求,制定總體設(shè)計思想如下:
1、正常情況下運行主程序,采用0.5S延時子程序的反復(fù)調(diào)用來實現(xiàn)各種定時時間。
2、一道有車而另一道無車時,采用外部中斷1執(zhí)行中斷服務(wù)程序,并設(shè)置中斷為低優(yōu)先級中斷。
3、有緊急車輛通過時,采用外部中斷0執(zhí)行中斷服務(wù)程序,并設(shè)置中斷為高優(yōu)先級中斷,實現(xiàn)二級中斷嵌套。
該電路具有電路簡單,設(shè)計方便,顯示亮度高,耗電較少,也非常的可靠等點。
總體設(shè)計框圖如圖1所示:

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image005.gif


                                                      
  1   系統(tǒng)整體設(shè)計方框圖
方案二:
采用標準AT89S52單片機作為控制器;通行倒計時顯示采用3位數(shù)碼管;主、次通道及行人指示燈采用雙色高亮發(fā)光二極管;LED顯示采用動態(tài)掃描,以節(jié)省端口。緊急車輛通行采用實時中斷完成,識別方法采用手動按鈕。按以上系統(tǒng)構(gòu)架設(shè)計,單片機端口資源剛好滿足要求。該系統(tǒng)具有電路簡單,設(shè)計方便,顯示亮度高耗電少,可靠性高,但是占用單片機資源太多了。整個電路組成框圖如圖2所示。

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif


   
                                     2         
                              
方案三:
采用AT89C2051單片機作為控制器,通行倒計時、主、次車道及行人通行指示采用單塊LCD液晶點陣顯示器。這種方案設(shè)計占用單片機的端口最少,硬件也最少,耗電也最少;雖然顯示圖案也很精美,但由于亮度太暗,晚上還得必須開背光燈,所以較少采用。
通過以上綜合分析可以看出,方案一具有綜合設(shè)計優(yōu)點,因此城市道口交通燈控制系統(tǒng)模型采用方案一設(shè)計。
三、硬件單元電路設(shè)計與參數(shù)計算
1、時鐘電路模塊
時鐘電路由一個晶體振蕩器12MHZ和兩個30pF的瓷片電容組成。時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號,而時序所研究的是指令執(zhí)行中各信號之間的相互關(guān)系。單片機本身就如一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信
號控制下嚴格地工作。其電路如圖3所示:
                 file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif
                        圖3  時鐘電路模塊
2、復(fù)位電路模塊
   復(fù)位電路是使單片機的CPU或系統(tǒng)中的其他部件處于某一確定的初始狀態(tài),并從這狀態(tài)開始工作,除了進入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位電路以重新啟動。本設(shè)計采用的是按鍵復(fù)位電路。其電路如圖4所示:
                file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif
                          圖4  復(fù)位電路
3、主控制系統(tǒng)模塊
主控制器采用AT89S52,是ATMEL公司生產(chǎn)的一款性能穩(wěn)定的8位單片機。AT89S52具有1個8KB的FLASH程序存儲器,1個512字節(jié)的RAM,4個8位的雙向可位尋址I/O端口,3個16位定時/計數(shù)器及1個串行口和6個向量二級中斷結(jié)構(gòu)。
單片機的P0口分別用于控制南北及東西的通行燈,P2口和P3^4-P3^7口用于4組4位LED計時器的控制,緊急車輛通行時使用外中斷0(P3^2)和外中斷1(P3^3),進行手動按鍵,即可轉(zhuǎn)換。其主控電路如圖5所示:   
      file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif
                      圖5  主控制系統(tǒng)模塊
4、交通燈輸出控制模塊
道口交通燈指示采用高亮度紅、黃、綠發(fā)光二極管進行提示。其圖如圖6所示
   file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif
                        圖6  LED顯示模塊
當(dāng)R=220歐時,按公式A=(5-1.8)/R計算,電路中的電流大小應(yīng)為A=14.545mA.由于每個路口的通行雙向指示處理相同,因此每個端口應(yīng)具有3A的吸收電流能力。
5、時間顯示電路模塊
     道口通行剩余時間采用高亮紅色7段LED發(fā)光數(shù)碼管顯示,采用共陽數(shù)碼管,如用單片機吸收電流驅(qū)動,列掃描驅(qū)動使用三極管,按每段6mA電流計算,全顯示字形“8”時,每個數(shù)碼需6mA*8=48mA,由于時間顯示每個道口相同,共需要電流192mA,因此設(shè)計中也采用了中功率三極管8550.其顯示電路如圖7所示:
6、緊急通車電路模塊
   為了實現(xiàn)此功能,利用單片機中斷達到目的。利用一個手動按鈕開關(guān)接至單片機外部中斷0,同時在軟件設(shè)計時將其設(shè)定為最高優(yōu)先級,當(dāng)其按下時,四方全為紅燈,同時將中斷位置的PSW、ACC進棧保護,當(dāng)其計時完了之后,回到原來的位置進行執(zhí)行。再利用一個手動按鈕接至單片機外部中斷1當(dāng)其按下時,如果是東西道是紅燈,而南北道是綠燈,則將其置為東西是綠燈,南北是紅燈;如果是東西道是綠燈,而南北道是紅燈,則將其置為東西是紅燈,南北是綠燈。兩種情況都是執(zhí)行完后,回到斷點處繼續(xù)執(zhí)行。其電路如圖8所示:
                 file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image016.gif
                                              圖7  數(shù)碼管顯示模塊
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif
                              圖8  按鍵控制電路
三、軟件設(shè)計與流程圖
1、軟件的設(shè)計
    主程序采用查詢方式定時,調(diào)用0.5S延時子程序的次數(shù),從而獲取交通燈的各種時間。子程序采用定時器1方式1查詢式定時,定時器定時50ms,確定50ms循環(huán)20次,從而獲得1S的延時時間。
有車車道的放行的中斷服務(wù)程序首先要保護現(xiàn)場,因而需用到延時子程序,子程序采用定時器0方式1查詢式定時,定時器定時50ms,確定50ms循環(huán)20次,從而獲得1S的延時時間,保護現(xiàn)場時還需關(guān)中斷,以防止高優(yōu)先級中斷(緊急車輛通過所產(chǎn)生的中斷)出現(xiàn)導(dǎo)致程序混亂。
開中斷,由軟件查詢外中斷1,判別哪一道有車,再根據(jù)查詢情況執(zhí)行相應(yīng)的服務(wù)。待交通燈信號出現(xiàn)后,保持15S的延時,然后,關(guān)中斷,恢復(fù)現(xiàn)場,再開中斷返回主程序。
緊急車輛出現(xiàn)時的中斷服務(wù)程序也需要保護現(xiàn)場,但無須關(guān)中斷(因其為高優(yōu)先級中斷),然后執(zhí)行相應(yīng)的服務(wù),待交通燈信號出現(xiàn)后延時20S,確保緊急車輛通過交叉路口,然后,恢復(fù)現(xiàn)場,返回主程序。
2、程序流程圖           
      主程序            有車車道放行時的中斷服務(wù)程序(外中斷1)

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif


                           

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image021.gif


file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image022.gif            

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image023.gif
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image024.gif
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image025.gif
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image026.gif


     
                 
                緊急情況時的中斷服務(wù)程序(外中斷0)
  
        
     中斷響應(yīng)
   
   
   
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image027.gif                          

file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image028.gif
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image029.gif


五、總原電路及元器件清單
1.總原理圖如圖9所示
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image031.gif
                       圖9  總的原理圖
2.PCB制板圖如圖10所示
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image033.gif
                       圖10  PCB板
3.整體電路仿真圖以及仿真結(jié)果分析
(1)、整體電路仿真圖如圖11所示
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg
                        圖11  仿真圖
(2)、仿真結(jié)果分析
上電或按鍵復(fù)位后數(shù)碼管無顯示,東西、南北的燈都為紅燈亮;開始工作后主車道綠燈亮次車道紅燈亮50S,在這里選定它亮到5S時,主車道綠燈滅,黃燈亮;5S后主車道變?yōu)榧t燈亮次車道綠燈亮30S,在這里選定它亮到5S時,次車道黃燈亮,5S后返回重新執(zhí)行。按緊急車輛按鈕紅燈全亮顯示時間為20S;有車車道放行按鈕按下時,若主車道是綠燈、次車道是紅燈,則把主車道變?yōu)榧t燈、次車道變?yōu)榫G燈,顯示15S;若主車道是紅燈、次車道是綠燈,則把主車道變?yōu)榫G燈、次車道變?yōu)榧t燈,顯示15S;                                         
4、元件清單
  如下表所示:
  
     元件名稱
  
        型號
        數(shù)量/
        用途
      單片機
     AT89S52
         1
     控制核心
晶振  
     12MHZ
            1
     晶振電路
      電容
     30pF
         2
     晶振電路
     電解電容
     10uF
         1
     復(fù)位電路
     電阻
     5.1K
         1
    復(fù)位電路
     發(fā)光二極管
     LED
         12
  紅、黃、綠燈
     集成塊
     74LS08
         1
     按鍵電路
     電阻
     220Ω
         13
     LED限流
     電阻
     470Ω
         8
  數(shù)碼管電路
     電阻
     1K
         7
數(shù)碼管驅(qū)動、按鍵電路
四位共陽數(shù)碼管
     GC-3461BS
         1
   顯示電路
   微動開關(guān)
     
         3
   按鍵電路
   三級管PNP
     8550
         4
數(shù)碼管驅(qū)動電路
六、安裝與調(diào)試
1. 電路安裝
打好板后,按照所畫的PCB板,一一的把各個元件焊接到所制的板上即可。
2. 電路調(diào)試
電路調(diào)試是利用開發(fā)系統(tǒng)、基本測試儀器(萬用表、示波器等),檢查系統(tǒng)硬件中存在的故障。其調(diào)試可分為靜態(tài)調(diào)試與動態(tài)調(diào)試兩步進行。
靜態(tài)調(diào)試是在系統(tǒng)未工作時的一種硬件檢測。
第一步:目測。檢查外部的各種元件或者是電路是否有斷點。
第二步:用萬用表測試。先用萬用表復(fù)核目測中有疑問的連接點,再檢測各種電源與地線之間是否有短路現(xiàn)象。
第三步:加電檢測。給板加電,檢測所有的插座或是器件的電源端是否符合要求的值。
第四步:是聯(lián)機檢查。因為只有用單片機開發(fā)系統(tǒng)才能完成對用戶系統(tǒng)的調(diào)試。
動態(tài)調(diào)試
動態(tài)調(diào)試是在系統(tǒng)工作的情況下發(fā)現(xiàn)和排除系統(tǒng)硬件中存在的器件內(nèi)部故障、器件連接邏輯錯誤等的一種硬件檢查。動態(tài)調(diào)試的一般方法是由近及遠、由分到合。
由分到合是指首先按邏輯功能將系統(tǒng)硬件電路分為若干塊,當(dāng)調(diào)試電路時,與該元件無關(guān)的器件全部從系統(tǒng)中去掉,這樣可以將故障范圍限定在某個局部的電路上。當(dāng)各塊電路無故障后,將各電路逐塊加入系統(tǒng)中,在對各塊電路功能及各電路間可能存在的相互聯(lián)系進行調(diào)試。由分到合調(diào)試既告完成。
由近及遠是將信號流經(jīng)的各器件按照距離單片機的邏輯距離進行由近及的分層,然后分層調(diào)試。調(diào)試時,仍采用去掉無關(guān)元件的方法,逐層調(diào)試下去,就會定位故障元件了。
    3.軟件調(diào)試
    軟件調(diào)試是通過對擁護程序的C編程、連接、執(zhí)行發(fā)現(xiàn)程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程。運行程序后,編輯,查看程序是否有邏輯的錯誤。
七、性能測試與分析
    系統(tǒng)做好的,進行系統(tǒng)的完整調(diào)試。按照所設(shè)計的流程圖,用單片機跟蹤模式程序進行調(diào)試,配合相關(guān)的硬件動作,可以觀察LED的變化和數(shù)碼管的顯示是否正確。同樣明確延時時間長短、跳轉(zhuǎn)位置及調(diào)用的程序功能。經(jīng)過觀察各檢測,我可以看到整個系統(tǒng)的功能都能達到我的設(shè)計要求。
八、結(jié)論與心得
以往每次做課程設(shè)計,都會感覺自己收獲不少。這次單片機課程設(shè)計也不例外。做課程設(shè)計是為了讓我們對平時學(xué)習(xí)的理論知識與實際操作相結(jié)合,在理論和實驗教學(xué)基礎(chǔ)上進一步鞏固已學(xué)基本理論及應(yīng)用知識并加綜合提高,學(xué)會將知識應(yīng)用于實際的方法,提高和解決問題的能力。
第一,在編寫軟件中,在此過程中我更為熟練得掌握匯編語言各種指令的使用方法,掌握了keil軟件的使用。
第二,在軟件調(diào)試過程中,使我又一次復(fù)習(xí)了keil和proteus聯(lián)合使用的方法。在調(diào)試時曾經(jīng)遇到數(shù)碼管倒計時顯示時間兩位不能同時顯示,后來經(jīng)過查找資料不斷調(diào)試才領(lǐng)悟到原來在顯示的過程中要循環(huán)顯示才能使得顯示穩(wěn)定下來。
第三,在做原理圖和PCB的過程中,使我進一步掌握了proteus軟件的使用方法。再次熟悉了各種作圖工具的應(yīng)用,而且培養(yǎng)了我在設(shè)計原理圖時的一些技巧和好的習(xí)慣。
第四,在做實物的過程中,培養(yǎng)了我認真耐心的工作態(tài)度。我在做板子過程中,首先由于我的布線比較緊密加上孔和焊盤過小使得在打孔是出現(xiàn)刮斷線以及在焊接的時候出現(xiàn)了虛焊和聯(lián)焊等問題,后來我不得不重新再做一次板;二是由于焊接前沒檢查斷線問題,使得我的PCB在加載程序后只有燈亮,而數(shù)碼管卻不亮,后來經(jīng)過我的仔細檢查,原來是在給三級管供電的線有斷,將其連接起來后,就能顯示了,從而得以成功。
總之,通過這次課程設(shè)計,我掌握了用單片機設(shè)計交通燈的基體方法,增強了我尋找問題,解決問題的能力。培養(yǎng)了我的設(shè)計思維,此次課程設(shè)計的成功不僅幫助我更好地掌握書本知識,尤其重要的是增強了我的自信,培養(yǎng)了我獨立思考的能力。但是此次設(shè)計不中之處是不能實現(xiàn)左右彎燈,不有人行道控制燈,不能進行流量控制。
九、參考文獻
   [1]《單片機基礎(chǔ)》.李廣弟、朱月秀、冷祖祁.北京航空航天大學(xué)出版社。
   [2] 華成英 童詩白, 《模擬電子技術(shù)基礎(chǔ)(第四版)》,高等教育出版社。
   [3] 康華光,《電子技術(shù)基礎(chǔ) 數(shù)字部分(第五版)》,高等教育出版社。
   [4]《51單片機C語言常用模塊與綜合系統(tǒng)設(shè)計實例精講》.于永、戴佳、常江.電子工業(yè)出版社。
   [5]《單片機課程設(shè)計指導(dǎo)》.楊居義.清華大學(xué)出版社。
   [6]《零基礎(chǔ)學(xué)單片機C語言程序設(shè)計》.趙建領(lǐng)、薛園國.機械工業(yè)出版社。   
十、致謝
    通過本次畢業(yè)設(shè)計,我在指導(dǎo)老師鄒清平的精心指導(dǎo)和嚴格要求下,獲得了豐富的理論知識,極大地提高了實踐能力,并對當(dāng)前電子領(lǐng)域的研究狀況和發(fā)展方向有了一定的了解,單片機領(lǐng)域這對我今后進一步學(xué)習(xí)電子方面的知識有極大的幫助。另外,此次畢業(yè)設(shè)計還獲得了我們同學(xué)的大力支持。在此我忠心感謝鄒清平以及各位同學(xué)的指導(dǎo)和支持。在未來的工作和學(xué)習(xí)中,我將以更好的成績來加報各位老師和同學(xué)。
十一 、程序清單
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define time 50000
#define on 0
#define off 1
sbitRED_ZHU = P0^0; //南北 紅燈   
sbitYELLOW_ZHU = P0^1;//南北 黃燈
sbitGREEN_ZHU = P0^2; //南北 綠燈
sbitRED_ZHI = P0^3; //東西 紅燈
sbitYELLOW_ZHI = P0^4; //東西 黃燈
sbitGREEN_ZHI = P0^5; //東西 綠燈
sbitP23 = P3^4;
sbitP22 = P3^5; //東西方向數(shù)碼管位選
sbitP21 = P3^6;
sbitP20 = P3^7; //南北方向數(shù)碼管位選
sbitint0_key = P3^2;
sbitint1_key = P3^3;
voiddisplay1(uchar,uchar);
voiddisplay2(uchar,uchar);
voiddelayms(uint k);
uchartemp1,temp2,temp3,temp4,temp5,temp6;
/*===============倒計時=========================*/
ucharN = 50,Y = 45,Z = 50,M = 75,G = 80,U =80;
ucharC50ms,t0;
ucharseg = 1;
ucharflag=0,led_data_temp;
voidInitialT1(void)
{
        TMOD = 0x11; //定時器0,1工作在方式1
        TH1 = (65536 - time)/256; //相當(dāng)于(65536-time)/256;
        TL1 = (65536 - time)%256;//初值為time(50ms)
        TR1 = 1;//開定時器1中斷
        ET1 = 1;//允許定時器1中斷   
        ET0 = 1;
        TH0 = (65536 - time)/256;
        TL0 = (65536 - time)%256;
            
        EX0 = 1; //允許外部中斷0
        IE0 = 1;//啟動外部中斷0
        PX0 = 1;
        EX1=1;
        IE1=1;
        EA = 1; //開總中斷
}
void  int0(void) interrupt 0       //外中斷0
{   
        flag = 0;
        led_data_temp = P0;
        t0 = 20;
        if(!int0_key)
        {
           delayms(10);
           if(!int0_key)
           {
              while(!int0_key);
              TH0 = (65536 - time)/256;
              TL0 = (65536 - time)%256;
              TR1 = 0;   
              TR0 = 1;
              EX0 = 0;
              EX1 = 0;
              C50ms = 0;
           }
        }
}
void  int1(void) interrupt 2       //外部中斷1
{   
        t0=15;  
        flag = 1;
        led_data_temp = P0;
        if(((RED_ZHU == 0) && (GREEN_ZHI== 0))||((YELLOW_ZHI == 0)&&(RED_ZHU == 0)))
           {
              P0 = 0xff;
               GREEN_ZHU = 0;
              RED_ZHI = 0;
           }
        else          //if((RED_ZHI ==0)&&(GREEN_ZHU == 0))
           {
              P0 = 0xff;
              GREEN_ZHI = 0;
              RED_ZHU = 0;
           }
        if(!int1_key)
        {
           delayms(10);
           if(!int1_key)
           {
              while(!int1_key);
              TH0 = (65536 - time)/256;
              TL0 = (65536 - time)%256;
              TR1 = 0;   
              TR0 = 1;
              EX0 = 0;
              EX1 = 0;
              C50ms = 0;
           }
        }
}
voidISRT0(void) interrupt 1//定時器0中斷服務(wù)子程序
{      
        temp1 = N,temp2 = Y,temp3 = Z,temp4 =M,temp5 = G,temp6 = U;
        TH0 = (65536 - time)/256;
        TL0 = (65536 - time)%256; //重裝初值time
        YELLOW_ZHU=1;      //如果在黃5S時進行熄滅黃燈
        YELLOW_ZHI=1;
        if(!flag)
        {
           P0 = 0xf6;
        }
        
        C50ms++;
        if(C50ms > 19)
        {
          t0--;      
          C50ms = 0;
        }
           
        if(t0 == 0)
        {  
           P0 = led_data_temp;
           N = temp1,Y = temp2,Z = temp3,M =temp4,G = temp5,U = temp6;
           TR0 = 0;//禁止定時器1中斷
           TR1 = 1;//開定時器1中
           EX1 = 1;
           //EX0 = 1;
           C50ms = 0;
           return;
        }
}
voidISRT1(void) interrupt 3  //定時器1中斷服務(wù)子程序
{   
        TH1 = (65536 - time)/256;
        TL1 = (65536 - time)%256; //重裝初值time
        C50ms++;
        if(C50ms > 19)
        {
          N--;
          M--;
          Y--;
          Z--;
          G--;
          U--;
          C50ms = 0;
        }
}
/*=================延時=======================*/
voidDelay10uS(uchar second)
{
        uint i;
        while((second--) != 0)
        {
           for(i = 0;i < 5;i++)
           {}
        }
}
voiddelayms(uint k)
{
  uinti,j;
  for(i = 0;i < k;i++)
    for(j = 0;j < 120;j++);
}
/*==================數(shù)碼管控制========================*/
ucharcode discode[]=
        {0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數(shù)碼管0-9代碼
                     
voiddisplay1(uchar num1,uchar num2)  //控制南數(shù)碼管顯示
{
        P2=discode[num1]; P21=on; Delay10uS(10);P21=off;  //低位
        P2=discode[num2]; P20=on; Delay10uS(10);P20=off;  //高位   
}
voiddisplay2(uchar num3,uchar num4)  //控制東西數(shù)碼管顯示
{
        P2 = discode[num3]; P23 = on;Delay10uS(10); P23 = off;  //低位
        P2 = discode[num4]; P22 = on;Delay10uS(10); P22 = off;  //高位
}
/*===================主函數(shù)=================================*/
main()
{
/*=============初始狀態(tài):東西南北都紅燈==================*/
    RED_ZHU=on;
    RED_ZHI=on;
        delayms(1000);
        RED_ZHU = off;
        RED_ZHI = off;
        InitialT1();
        while(1)
         {   
             // 初始化計時器        
        /*=============狀態(tài)1:東西綠燈(45s) 南北紅燈(40s)==================*/
        /*=============狀態(tài)2:東西黃燈(5s) 南北紅燈(5s)=================*/
           RED_ZHI = on;
           GREEN_ZHU = on;
           while(N != 0)
           {         
              if(TR0 == 1)  
              {   
               display2(t0/10,t0%10);//  當(dāng)t0=20時東西、南北紅燈(20s)
               display1(t0/10,t0%10);// 當(dāng)t0=15時東西、南北紅、綠燈交換點亮   
              }
              else
              {            
                 if(N == 5)
                  {
                     while(Z != 0)
                     {
                         if(TR0 == 1)  
                         {   
                            display2(t0/10,t0%10);
                            display1(t0/10,t0%10);
                         }
                         else
                         {
                             display1(N/10,N%10);  // 東西黃燈(5s)
                             display2(Z/10,Z%10);  //  南北紅燈(5s)
                             GREEN_ZHU = off;
                             YELLOW_ZHU = on;
                         }                     
                     }                  
                  }
                  else
                  {
                      display1(N/10,N%10);  // 東西綠燈(45s)
                       display2(Y/10,Y%10); //   南北紅燈(40s)
                  }
               }
           }
                  
           GREEN_ZHU = off;
           RED_ZHI = off;
           YELLOW_ZHU = off;
            
           P0 = 0xff; //數(shù)碼管全關(guān)掉
           Delay10uS(1);
        
        /*=============狀態(tài)3:東西紅燈(20s) 南北綠燈(25s)==================*/
        /*=============狀態(tài)4:東西紅燈(5s) 南北黃燈(5s)==================*/
           GREEN_ZHI = on;
           RED_ZHU = on;
           while(G != 0)
           {              
              if(TR0 == 1)  
              {   
                  display2(t0/10,t0%10);
                  display1(t0/10,t0%10);
              }
              else
              {               
                  if(G == 5)
                  {
                      while(U != 0)
                      {
                          if(TR0 == 1)
                         {   
                            display2(t0/10,t0%10);
                            display1(t0/10,t0%10);
                         }
                         else
                         {
                             display2(G/10,G%10);// 東西紅燈(5s)
                             display1(U/10,U%10);// 南北黃燈(5s)
                             GREEN_ZHI = off;
                             YELLOW_ZHI = on;
                         }            
                      }            
                  }
                  else
                  {
                      display2(G/10,G%10);// 東西紅燈(25s)
                      display1(M/10,M%10);// 南北綠燈(20s)
                  }
              }            
           }
           GREEN_ZHI = off;
           RED_ZHU = off;
           YELLOW_ZHI = off;
           P0 = 0xff;
           Delay10uS(1);
            /*=====================重新賦值===============================*/
           N =50,Y = 45,Z = 50,M = 75,G = 80,U=80;
         }
}
物理與電子工程系軟件課程設(shè)計成績評定表
專業(yè):電子信息工程   年級:2007  班級:07電本 2    成員:賓華
  
課題名稱
  
基于AT89S52單片機交通燈控制系統(tǒng)的設(shè)計      
  
  
設(shè)計任務(wù)與要求
    用AT89S52單片機控制一個交通信號燈系統(tǒng),晶振采用12MHZ。
  
設(shè)A車道與B車道交叉組成十字路口,A是主道,B是支道。設(shè)計要求如下:
  
用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號。正常情況下,A、B兩車道輪流放行,A車道放行50s,其中5s用于警告;B車道放行30s,其中5s用于警告。交通繁忙時,交通信號燈控制系統(tǒng)應(yīng)有手控開關(guān),可人為地改變信號燈的狀態(tài),以緩解交通擁擠狀況。在B 車道放行期間,若A車道有車而B車道無車,按下開關(guān)K1 使 A車道放行15s;在 A車道放行期間,若B車道有車而A車道無車,按下開關(guān)K1 使B 車道放行15s。有緊急車輛通過時,按下K2開關(guān)使 A、B車道均為紅燈,禁行20s。
  
  
  
指導(dǎo)教師評語
該生能在老師的嚴格要求下順利完成整個課程設(shè)計工作和論文的撰寫。程序能正確的運行,達到了所要求的所有功能,界面安排合理,論文符合要求。在整個課程設(shè)計的過程中,態(tài)度端正,學(xué)習(xí)也比較認真,時間安排也很合理,能基本在每個階段完成相應(yīng)的任務(wù),做到時間上前緊后松。當(dāng)然,在這其間也存在一些不足和需要提高的地方。例如,知識面不夠廣,處理問題和運用知識的能力還有待提高,不能積極主動和老師交流工作的進程,希望該生在以后的工作學(xué)習(xí)中注意這些問題,爭取更大的提高和進步。
  
  
        建議成績:               指導(dǎo)教師:
  
課程設(shè)計指導(dǎo)小組評定
  
  
  
  
  
  
                           
  
       評定成績:
  
  
  
課程設(shè)計指導(dǎo)負責(zé)人:
  
                                         年     月    日
  

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:362969 發(fā)表于 2018-7-2 15:25 | 只看該作者
有沒有原文檔呀
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表