




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
紅綠燈控制系統的設計與制作摘要摘要隨著城市化的不斷進步,交通問題逐漸成為人們日益關注的熱點,因此如何制定一套完善的紅綠燈控制系統,是實現交通順暢的重要保障。本人設計主要采用AT89C51單片機作為核心器件,設計一套紅綠燈控制系統,并通過系統調試,實現設計的運作。該系統具備輕便、安裝簡單、可操作性強、實用性高等優點,適合多種情況使用。本設計基于AT89C51單片機的紅綠燈控制系統,其中有兩個LED數碼顯示管,采用的是模塊化的設計方法,主要的模塊包括單片機模塊,發光二極管模塊,控制模塊,以及顯示模塊等等。運用KEILuVision4編譯系統進行軟件編程,生成目標代碼,并下載到單片機當中,實現軟硬件相結合,最終實現了本系統所需要實現的功能。關鍵詞:紅綠燈;單片機;數碼管;KEILuVision4目錄目錄TOC\o"1-3"\h\u摘要 第一章引言 1.1研究背景及意義 1.2研究內容 第二章系統設計方案 2.1總體方案 2.2總設計圖 2.3設計方案分析 2.3.1倒計時顯示界面 2.3.2紅綠燈 第三章硬件系統設計 3.1單片機的選擇 3.2最小系統設計 3.2.1復位電路 3.2.2振蕩電路 3.3顯示設計 3.4發光二極管模擬紅綠燈 3.5按鍵模擬 第四章系統軟件設計 4.1軟件編譯環境測試 4.1.1C語言介紹 4.1.2KeiluVision4介紹 4.2系統總體設計 第五章系統調試及實物制作 5.1系統調試 5.2實物制作流程 總結與展望 參考文獻 致謝 附件:原理圖和程序清單 第一章引言第一章引言1.1研究背景及意義隨著時代不斷的發展,人們逐漸意識到,要想提升城市化的管理水平,就必須要做好城市交通管理,而城市交通管理的關鍵在于紅綠燈控制系統的應用方面。紅綠燈控制系統的設計是一個十分復雜的過程,紅綠燈系統之間的協調不僅僅局限于某一個路口之間,更重要的是整個區域之間每一個道路系統的整體性配合。從紅綠燈開始出現到如今,經歷多種發展階段。目前為止,紅綠燈控制系統已經形成了一個完善的機制,對交通起到了有效的維護作用。倘若在每一個交通路口都需要安排交警來進行交通的維護,那么不僅僅會浪費人力資源,同時還存在人工監管方面的缺陷,所以這種方法并不能減少交通事故的產生,因此有必要設計一個以單片機為核心的紅綠燈控制系統,實現自動化控制,具備較強的社會意義和價值。1.2研究內容根據課題的要求進行紅綠燈控制系統的硬件設計和軟件編程,并完成實物的制作與調試。章節內容為:第一章:主要介紹了本文的研究背景和意義,以及研究內容。第二部:主要介紹了系統的設計方案,如何來完成紅綠燈控制系統。第三章:主要介紹了系統的硬件設計,單片機的型號選擇,各電路模塊的硬件搭建,模塊設計包含了單片機最小系統、顯示模塊、按鍵模塊。第四章:主要介紹了編程系統的使用,采用了KEILuVision4軟件作為編程軟件完成系統程序的設計和編譯。第五章:主要介紹了系統的調試過程,在實際制作遇到的一些問題和實物制作的流程,最后寫了總結與展望,以及對老師的感謝。第二章系統設計方案第二章系統設計方案2.1總體方案本文的紅綠燈控制系統主要有單片機,交通顯示以及數碼管顯示等部分組成,除了基本的維護交通的作用之外,還擁有倒計時的功能。在一個十字路口,每一個干道都配備紅綠燈,不僅如此,每個路口也有左轉向燈,與執行分離。該系統設置的紅綠燈間隔時間為60秒,分三種工作狀態,分別是正常、繁忙以及特殊。在正常狀態之下,首先是南北通行,時間為40秒,當時間到數到5秒時,南北直行燈轉為黃燈,此后轉變為左轉向燈,時間為20秒,當倒數到第5秒時,左轉燈轉變為黃燈0秒后開始東西直行,時間為40秒,當時間到5秒,開始變為左轉向燈,時間為20秒,倒數到5秒之后開始變成黃燈,然后又是南北通行。緊急模式之下,禁止直行和左轉,四個方向全為紅燈。特殊模式之下,四個方向全為黃燈,夜間通行。運用單片機的定時計數器中斷系統實現倒計時,其中倒計時工作通過計時器進行控制,每過0.05秒中斷一次,第20次恰好過了1秒,這個時候便實現了倒計時的目的。2.2總設計圖圖2.1總設計圖2.3設計方案分析本文的設計系統主要分為倒計時,紅綠燈以及控制模塊,主要希望可以試想一下基本功能,首先是時間的顯示,以及時間的倒數功能,其次是紅綠燈之間的相互轉換,然后是南北直行,東西直行,南北左轉,東西左轉四種模式的切換。系統硬件圖如下所示。圖2.2系統整體框架圖2.3.1倒計時顯示界面系統主要需要完成倒計時的功能以及狀態燈的轉化功能,所以我們主要有兩種方案的選擇。第一種是完全使用數碼管,這種顯示方法比較簡單,并且程序設計起來比較簡單,需要的端口較少。第二種方法采用點陣式的LED顯示,這種方法比較復雜,并且需要設計復雜的軟件設計,但是功能比較完善,可以顯示各種圖形和字符。經過方案的對比,在本次畢業設計當中,由于實驗情況,實驗素材以及成本的限制,我們決定采用第一種數碼管方案以來進行倒計時的顯示。2.3.2紅綠燈在系統設計當中,擬采用LED燈來模擬紅綠燈。LED具備體積小、電流小、安裝方便、使用壽命長等特點,可以使用各種電源進行供電。在使用的過程當中需要串接適合的限流電阻,才能保障其正常使用。第三章硬件系統設計第三章硬件系統設計3.1單片機的選擇AT89C51是一種帶4k字節flash可編程、可擦除的低電壓存儲器,能與傳統型的MCS-51指令集和輸出管角相兼容。AT89C51是一種十分高級的微型控制器,在很多嵌入式控制系統當中利用AT89C51,會變得十分高效便捷。如圖是其引腳圖以及內部結構圖。圖3.1AT89C51引腳圖及內部結構圖3.2最小系統設計單片機的最小系統的組成有處理數據的單片機芯片,能夠進行計時,提供晶振頻率的震蕩電路以及初始化系統的復位電路這三個模塊組成,如圖3.2所示圖3.2單片機最小系統3.2.1復位電路復位單片機的原理是一個上電復位和單片機的復位引腳外部接連的電阻器、電容器,當開啟復位電路,可以通過外部電容器充電,達成復位操作。當電源接通時,微控制器的引腳高電平降低,所述電容器在持續兩個機器周期的基礎上,可以實現微控制器的復位操作。為了實現手動復位,需要設置一個開關與所述電容器并聯連接。通過推動微控制器的引腳得到一個高電平。同時鑒于對電容器需要進行充電,于是保留高電平以實現單片機的復位。如圖是復位電路圖。圖3.3復位電路圖3.2.2振蕩電路在整個單片機系統當中,晶體振蕩器的作用十分的中澳,它需要整合單片機里面電路,用來創造單片機內需的時鐘頻率。單片機運行的速度越快,則代表晶振創造的時鐘頻率越高。單片機的所有指令的執行都是在晶振提供的時鐘頻率基礎之上進行的,而單片機晶振的主要功能就是給系統提供基本的時鐘信號,在單片機的時鐘電路設計過程當中,主要可以分為內部時鐘方式,以及外部時鐘方式。外部時鐘方式的主要工作原理就是將外部原有的時鐘信號導入到單片機工作系統當中,這種外部時鐘方式更多的適用于多個單品及共同工作的狀態,有利于同步每一個單片機。在這個系統中,使用內部時鐘方式。單片機的內部放大器由一個外部晶體管振蕩器和一個電容器,并聯諧振電路產生平穩的自激振蕩器,其供給了振蕩時鐘的內部時鐘電路。下圖為振蕩電路圖,它選擇的晶振為11.0592MHz和兩個22pF的電容器。圖3.4振蕩電路圖3.3顯示設計本設計采用的是將七個發光的二極管的陰極連在一起,組成一個公共陰極,在陽極端輸入高電平,就會使得發光二極管點亮,不會影響輸入低電平的發光二極管。如圖所示。圖3.5共陰極以及二位數碼管LED顯示包括靜態以及動態顯示、靜態顯示,指的是當LED顯示器顯示某一個字符的時候,其對應的發光二極管始終處于流通或者是停滯的狀態,要想實現靜態顯示,必須要有一個八位的輸出控口進行控制,這種顯示方法需要占用較多的資源,所以一般適合使用在較少的顯示位置,當靜態顯示的過程當中僅需要較小的電流,就可以使LED燈達到較高的亮度,因此可以通過芯片直接驅動。動態顯示是依次點亮每一個數碼管,對于顯示器來說,他有多個接口電路,所以需要兩個輸出口,才能將數碼管的段控線并聯在一起。由一個八位的I/O口進行控制,不僅如此還要有一個輸出口來實現信號的控制。所謂位控指的就是控制LED顯示器的公共端,位控信號的數目應該與顯示器的個數相等,這種動態顯示的電路主要特點就是成本較低,并且電路組裝起來比靜態顯示更加方便。動態顯示和靜態顯示的主要區別在于:動態顯示方式硬件電路比較單一,而靜態顯示方式的程序比較單一。在本系統的設計當中,使用的是兩個二位一體的共陰數碼管,無論鏈接幾個共陰數碼管,其都是一樣的顯示原理。動態顯示方式使用的是動態掃描的手段來使數碼管變亮,盡管只能依次點亮數碼管,但是由于人員在觀察的過程當中受到暫留效應的影響,只要間隔時間達到一定的要求,就可以在人眼中實現同時顯示。圖3.6二位數碼管3.4發光二極管模擬紅綠燈發光二極管屬于半導體二極管,可以把電能轉換為光能,縮寫為LED。其和普通的二極管類似,又有單向的導電性。當給發光二極管施加正電壓之后,從p區注入到N區的空穴以及從N區注入到P區的電子,在PN結附近數微米內分別與N區的電子以及P區的空穴復合,產生自發輻射的熒光。不同的半導體材料擁有不同狀態,電池和空穴復活的過程當中,可以產生不同的能量,釋放的能量越多表示,他們所散發的波長就越短。因此常常使用紅黃綠三種顏色的二極管作為紅綠燈的模擬。3.5按鍵模擬單片機鍵盤有獨立鍵盤和矩陣式鍵盤兩種:獨立鍵盤每一個I/O口上只接一個按鍵,按鍵的另一端接電源或接地(一般接地),這種接法程序比較簡單且系統更加穩定;而矩陣式鍵盤式接法程序比較復雜,但是占用的I/O少。根據本設計的需要這里選用了獨立式鍵盤接法。獨立式鍵盤的實現方法是利用單片機I/O口讀取口的電平高低來判斷是否有鍵按下。將常開按鍵的一端接地,另一端接一個I/O口,程序開始時將此I/O口置于高電平,平時無鍵按下時I/O口保護高電平。當有鍵按下時,此I/O口與地短路迫使I/O口為低電平。按鍵釋放后,單片機內部的上拉電阻使I/O口仍然保持高電平。我們所要做的就是在程序中查尋此I/O口的電平狀態就可以了解我們是否有按鍵動作了。在用單片機對鍵盤處理的時候涉及到了一個重要的過程,那就是鍵盤的去抖動。這里說的抖動是機械的抖動,是當鍵盤在未按到按下的臨界區產生的電平不穩定正常現象,并不是我們在按鍵時通過注意可以避免的。這種抖動一般10~200毫秒之間,這種不穩定電平的抖動時間對于人來說太快了,而對于時鐘是微秒的單片機而言則是慢長的。硬件去抖動就是用部分電路對抖動部分加之處理,軟件去抖動不是去掉抖動,而是避抖動部分的時間,等鍵盤穩定了再對其處理。所以這里選擇了軟件去抖動,實現法是先查尋按鍵當有低電平出現時立即延時10~200毫秒以避開抖動(經典值為20毫秒),延時結束后再讀一次I/O口的值,這一次的值如果為1表示低電平的時間不到10~200毫秒,視為干擾信號。當讀出的值是0時則表示有按鍵按下,調用相應的處理程序。硬件電路如圖3.7所示:本文設計的紅綠燈系統在程序開始時先實行的是南北方向的直行,東西方向顯示為60秒的紅燈,此后改為東西段直行,南北方向顯示的是60秒的紅燈,以此作為一個循環。整個系統分為正常,繁忙,以及特殊三種工作狀態,可以通過按鈕來實現正常、繁忙和特殊三種狀態的相互轉換。在正常模式之下,東西方和南北方的直行時間都為40秒,左轉時間為20秒。在繁忙模式之下,東西方以及南北方的直行時間改為20秒,左轉時間為15秒,在特殊狀態之下,東西方和南北方的四個燈全為紅燈,四個路口禁止通行。如下圖是按鍵模塊的電路圖。這里的開關使用的是二極管,主要是為了避免三個線同時被按下產生的系統中斷。圖3.7按鍵模塊電路原理圖第四章系統軟件設計第四章系統軟件設計4.1軟件編譯環境測試4.1.1C語言介紹C語言是計算機程序設計語言中一種常見的語言,它的主要功能是完成計算機的系統程序的編寫工作,同時也可以用來一般應用程序的編寫。在傳統的計算機系統軟件當中,主要是利用匯編語言進行程序的編寫,在單片機系統當中也是這樣。但是由于匯編語言的程序在各種性能方面都表現得較差,所以這個匯編語言編寫出來的單片機應用程序存在周期長等缺點,并且在調試的過程當中也很難發現錯誤。所以為了更好地提高單片機系統的效率,減少整個程序的錯誤性和波動性,采用C語言是一種更好的方法。相對于其他的語言來說,C語言比較高級,同時也能對計算機的硬件進行直接的操作,無論是在計算能力還是表達能力方面都有著較高的優點。對于傳統的應用軟件當中不能用其他匯編語言解決的問題,都可以使用C語言來解決。因此不管是在功能、結構還是穩定性方面,C語言都是軟件編譯中的不二之選。4.1.2KeiluVision4介紹在本系統當中使用的調試軟件是KeiluVision4開發系統,他是美國微軟公司出行的,適用于51單片機的C語言開發環境。該系統有較強的適應性,不僅有源代碼和功能導航器的功能之外,還有獨特的配置向導功能,加快了代碼和文件的生成。4.2系統總體設計如圖4.1,是整個系統的流程圖。圖4.1主程序流程圖如圖4.2為定時中斷流程圖圖4.2定時中斷流程圖圖4.3外部中斷流程圖第五章系統調試及實物制作第五章系統調試及實物制作5.1系統調試仿真電路和程序的編寫完成我們就可以開始對系統進行調試,在初步的調試過程中發現系統不能如期的運行。下圖為初次運行失敗情況顯示。圖5.1運行失敗觀察仿真運行效果,發現LED燈全部亮起,但是數碼管不顯示時間,第一步我們先排查軟件問題,發現軟件系統提示丟失模型。圖5.2系統報警提示首先我們需要解決軟件問題,根據系統報警提示,我們首先將軟件模型補充完整,由于不是正版的軟件所以元件仿真模型可能有數據的改變,不能有效的運行,將模型更新完成后發現問題并不能解決。接著排查后三條報警,報警顯示為CPU運行速度慢而且在實際運行時,線路當中的電平變化非常的慢,通過百度查詢,最終得出結論:是因為仿真里面用了大量的led燈,雙擊該器件可以看到ModelType選項里選擇的是Analog(模擬),所以大大增加的軟件的計算量,導致運行緩慢,而在我的仿真里只需要LED實現亮滅兩種狀態就可以了,所以將該選項改為Digital(數字)就可以了,實測有效。圖5.3輸數據改變圖在將所有的LED燈的數據改變完成之后,初步的運行發現在東西與南北方向切換時系統會重新復位,并且顯示異常。在編程中找出了時間設定的錯誤,紅燈的時間應該大于綠燈與黃燈的總和,最好的情況就是綠燈加黃燈等于紅燈的時間最后我們設定紅燈35S、綠燈30S、黃燈5S。圖5.4東西通行圖5.5南北通行系統的主要功能運行完成后我們需要測試按鍵功能,根據設計需求我們設置了七個按鍵,從上到下依次是復位按鍵、特殊模式、緊急模式、調試確定、時間+、時間-、時間調試選擇。1、特殊模式:按下特殊模式按鍵,四個路口的燈都為黃燈閃爍,計時器歸零圖5.6特殊模式緊急模式:按下緊急模式按鍵后,四個路口的燈都為紅燈,計時器歸零。圖5.7緊急模式圖5.8時間調整按鍵圖5.9時間調試按鍵圖5.10系統復位系統整體的調試結果還算樂觀,但是還是有不足之處例如在時間調試時我們只能調試綠燈的時間,紅燈的時間由于程序的編寫,所以會在你調的綠燈時間上自動加上黃燈的時間進行自動的調整,緊急模式與特殊模式不能退出模式,只有復位系統才能正常運行。5.2實物制作流程表5.11元件清單名稱規格數量主要功能或作用按鈕6*6*59分別控制黃燈常亮(深夜模式)、禁行(緊急模式)、東西通行、南北通行、時間加、時間減、切換、確定。電容30P2單片機時鐘振蕩電容10UF1單片機復位電阻2203限流排阻10K2單片機單片機AT89C20521CPU晶體12M1單片機時鐘振蕩芯片74HC2451放大驅動數碼管顯示三極管90121驅動蜂鳴器兩位一體共陰數碼0.364倒計顯示芯片底座40腳1保護引腳芯片底座20腳1保護引腳發光二極管(紅)5MM4交通燈路口顯示發光二極管(綠)5MM4交通燈路口顯示發光二極管(黃)5MM4交通燈路口顯示發光二極管3MM1電源顯示自鎖開關8*8MM1控制VCCUSB電源線60MM1連接USB口DC座3.5*1.3MM1直流電源插座插針2外接電源接線PCB板155MMX100MM11、元件的分布及安插2、焊接飛線連接上電測試總結與展望總結與展望一、總結本設計基于AT89C51單片機的紅綠燈控制系統,其中有兩個LED數碼顯示管,采用的是模塊化的設計方法,主要的模塊包括單片機模塊,發光二極管模塊,控制模塊,以及顯示模塊等等。通過硬件和軟件的相結合,完成了本次系統的設計。由于使用的單片機是整個系統的核心控件,同時單片機的性能較高,所以整個系統的功能比較強大,能夠有效地達到預期的設計效果,實現了紅綠燈之間的相互轉化,以及特殊情況之下紅綠燈的調整。在系統調試階段,主要考查的是我們的邏輯思維能力和對軟件的熟悉程度,所以在整個系統設計的過程當中,盡管也出現了一些問題,但是通過我不斷地調試和努力,最終讓我對匯編制定有了更加深刻的印象和自我理解。二、今后研究方向通過本次系統的設計,讓我充分的認識到,自己在實踐過程當中仍然存在諸多問題,因為實踐不僅僅是書本上學到的東西還有更多經驗需要自己去摸索。我的主要問題在于前期沒有做好充足的準備,導致實際行動起來容易出現錯誤。所以,在未來的發展過程當中,希望能夠提高自己的實際解決問題的能力以及綜合素質,應該盡量先保障自己有充足的理論知識,同時要提高自身的實踐能力。在實踐的過程當中要不怕失敗,只有經過反復的調試才能夠優化整個系統的設計。參考文獻參考文獻[1]王子樂,黃志遠.基于單機片的智能交通紅綠燈控制系統設計[J].數字技術與應用,2018,v.36;No.332(02):13+16.[2]鄧紅.交通燈智能應用系統的設計與實現[J].大觀周刊,2012(39):42-43.[3]盧易楓,鄭麗敏.LED彩燈控制系統設計[J].學園,2015:200.[4]吳振英,莊林.汽車自動識別紅綠燈系統設計[J].科技通報,2015(07):221-225.[5]蘆軍軍.GIS紅綠燈控制管理系統設計與實現[J].城市建設理論研究(電子版),2018,No.259(13):181.[6]何瑞,滕道祥,仲學,馬曉杰.紅綠色交通燈輔助系統的設計與實現[J].科技視界,2016:261[7]蘇永斌.簡析路燈與紅綠燈智能化管理系統[J].《城市照明》,2016(2):15-15.[8]曹競豪,徐天偉,鄭鵬.基于單機片的智能交通紅綠燈控制系統設計[J].科技創新與應用,2017(16):78-78.[9]吳家存.基于單機片的智能交通紅綠燈控制系統設計[J].數字技術與應用,2012(06):183.致謝致謝一轉眼就到了與大家分別的日子,回想老師和同學們親切的眼神歷歷在目,感謝在我學習的這幾年同學們的熱情陪伴,是你們教會了我許多與人相處的道理。感謝我的老師們的悉心教導,是你們讓我成為了一個更加完整的成年人。畢業之際,我要感謝每一個幫助過我的人,也感謝我的指導老師在我的畢業設計過程當中對我的悉心指導,您孜孜不倦的身影始終影響著我,未來我會以你為榜樣,不忘初心,砥礪前行。附錄附錄原理圖程序#include<reg51.h> //頭文件#defineucharunsignedchar#defineuintunsignedint //宏定義uchardatabuf[4]; //秒顯示的變量uchardatasec_dx=20; //東西數默認uchardatasec_nb=30; //南北默認值uchardataset_timedx=20; //設置東西方向的時間uchardataset_timenb=30; //設置南北方向的時間intn;uchardatacountt0,countt1;//定時器0中斷次數//定義6組開關sbitk4=P3^7;//切換方向sbitk1=P3^5; //時間加sbitk2=P3^6; //時間減sbitk3=P3^4; //確認sbitk5=P3^1; //禁止sbitk6=P1^5; //夜間模式sbitRed_nb=P2^6; //南北紅燈標志sbitYellow_nb=P2^5; //南北黃燈標志sbitGreen_nb=P2^4;//南北綠燈標志sbitRed_dx=P2^3; //東西紅燈標志sbitYellow_dx=P2^2; //東西黃燈標志sbitGreen_dx=P2^1; //東西綠燈標志 bitset=0; //調時方向切換鍵標志=1時,南北,=0時,東西bitdx_nb=0; //東西南北控制位bitshanruo=0; //閃爍標志位bityejian=0; //夜間黃燈閃爍標志位ucharcodetable[11]={ //共陰極字型碼 0x3f,//--0 0x06,//--1 0x5b,//--2 0x4f,//--3 0x66,//--4 0x6d,//--5 0x7d,//--6 0x07,//--7 0x7f,//--8 0x6f,//--9 0x00//--NULL};//函數的聲明部分voiddelay(intms); //延時子程序voidkey(); //按鍵掃描子程序voidkey_to1(); //鍵處理子程序voidkey_to2();voidkey_to3();voiddisplay(); //顯示子程序voidlogo(); //開機LOGOvoidBuzzer();//主程序voidmain(){ TMOD=0X11; //定時器設置 TH1=0X3C; TL1=0XB0; TH0=0X3C; //定時器0置初值0.05S TL0=0XB0; EA=1; //開總中斷 ET0=1; //定時器0中斷開啟 ET1=1; //定時器1中斷開啟 TR0=1; //啟動定時0 TR1=0; //關閉定時1 EX0=1; //開外部中斷0 EX1=1; //開外部中斷1logo(); //開機初始化 P2=0Xc3; //開始默認狀態,東西綠燈,南北黃燈sec_nb=sec_dx+5; //默認南北通行時間比東西多5秒 while(1) //主循環 { key(); //調用按鍵掃描程序 display(); //調用顯示程序 } }//函數的定義部分voidkey(void) //按鍵掃描子程序{ if(k1!=1) //當K1(時間加)按下時 { display(); //調用顯示,用于延時消抖 if(k1!=1) //如果確定按下 { TR0=0; //關定時器 shanruo=0; //閃爍標志位關 P2=0x00; //滅顯示 TR1=0; //啟動定時1 if(set==0) //設置鍵按下 set_timedx++; //南北加1S else set_timenb++; //東西加1S if(set_timenb==100) set_timenb=1; if( set_timedx==100) set_timedx=1; //加到100置1 sec_nb=set_timenb; //設置的數值賦給東西南北 sec_dx=set_timedx; do { display(); //調用顯示,用于延時 } while(k1!=1); //等待按鍵釋放 } } if(k2!=1) //當K2(時間減)按鍵按下時 { display(); //調用顯示,用于延時消抖 if(k2!=1) //如果確定按下 { TR0=0; //關定時器0 shanruo=0; //閃爍標志位關 P2=0x00; //滅顯示 TR1=0; //關定時器1 if(set==0) set_timedx--; //南北減1S else set_timenb--; //東西減1S if(set_timenb==0) set_timenb=99; if( set_timedx==0) set_timedx=99; //減到1重置99 sec_nb=set_timenb; //設置的數值賦給東西南北 sec_dx=set_timedx; do { display(); //調用顯示,用于延時 } while(k2!=1); //等待按鍵釋放 } } if(k3!=1) //當K3(確認)鍵按下時 { display(); //調用顯示,用于延時消抖 if(k3!=1) //如果確定按下 { TR0=1; //啟動定時器0 sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數值 sec_dx=set_timedx; //顯示設置過的時間 TR1=0; //關定時器1 if(set==0) //時間倒時到0時 { P2=0X00; //滅顯示 Green_dx=1; //東西綠燈亮 Red_nb=1; //南北紅燈亮 sec_nb=sec_dx+5; //回到初值 } else { P2=0x00; //南北綠燈,東西紅燈 Green_nb=1; Red_dx=1; sec_dx=sec_nb+5; } } } if(k4!=1) //當K4(切換)鍵按下{ display(); //調用顯示,用于延時消抖 if(k4!=1) //如果確定按下 { TR0=0; //關定時器0 set=!set; //取反set標志位,以切換調節方向 TR1=0; //關定時器1 dx_nb=set; do { display(); //調用顯示,用于延時 } while(k4!=1); //等待按鍵釋放 } } if(k5!=1) //當K5(禁止)鍵按下時 { display(); //調用顯示,用于延時消抖 if(k5!=1) //如果確定按下 { TR0=0; //關定時器 P2=0x00; //滅顯示 Red_dx=1; Red_nb=1; //全部置紅燈 TR1=0; sec_dx=00; //四個方向的時間都為00 sec_nb=00; do { display(); //調用顯示,用于延時 } while(k5!=1); //等待按鍵釋放 } } if(k6!=1) //當K6(夜間模式)按下 { display(); //調用顯示,用于延時消抖 if(k6!=1) //如果確定按下 { TR0=0; //關定時器 P2=0x00; TR1=1; sec_dx=00; //四個方向的時間都為00 sec_nb=00; do { display(); //調用顯示,用于延時 } while(k6!=1); //等待按鍵釋放 } }}voiddisplay(void)//顯示子程序{ buf[1]=sec_nb/10; //第1位東西秒十位 buf[2]=sec_nb%10; //第2位東西秒個位 buf[3]=sec_dx/10; //第3位南北秒十位 buf[0]=sec_dx%10; //第4位南北秒個位 P1=0xff; //初始燈為滅的 P0=0x00; ////滅顯示 P1=0xfe; //片選LED1 P0=table[buf[1]]; //送東西時間十位的數碼管編碼 delay(1); //延時 P1=0xff; //關顯示 P0=0x00; //滅顯示 P1=0xfd; //片選LED2 P0=table[buf[2]]; //送東西時間個位的數碼管編碼 delay(1); //延時 P1=0xff; //關顯示 P0=0x00; //關顯示 P1=0Xfb; //片選LED3 P0=table[buf[3]]; //送南北時間十位的數碼管編碼 delay(1); //延時 P1=0xff; //關顯示 P0=0x00; //關顯示 P1=0Xf7; //片選LED4 P0=table[buf[0]]; //送南北時間個位的數碼管編碼 delay(1); //延時}voidtime0(void)interrupt1using1 //定時中斷子程序{ TH0=0X3C; //重賦初值 TL0=0XB0; //12m晶振50ms//重賦初值 TR0=1; //重新啟動定時器 countt0++; //軟件計數加1 if(countt0==10) //加到10也就是半秒 { if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //東西黃燈閃 { Green_dx=0; Yellow_dx=0; } if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黃燈閃 { Green_nb=0; Yellow_nb=0; } } if(countt0==20) //定時器中斷次數=20時(即1秒時) { countt0=0; //清零計數器 sec_dx--; //東西時間減1 sec_nb--; //南北時間減1 if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //東西黃燈閃 { Green_dx=0; Yellow_dx=1; } if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黃燈閃 { Green_nb=0; Yellow_nb=1; } if(sec_dx==0&&sec_nb==5) //當東西倒計時到0時,重置5秒,用于黃燈閃爍時間 { sec_dx=5; shanruo=1; } if(sec_nb==0&&sec_dx==5) //當南北倒計時到0時,重置5秒,用于黃燈閃爍時間 { sec_nb=5; shanruo=1; } if(dx_nb==0&&sec_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯清潔保養考核試卷
- 期貨市場應用考核試卷
- 電視機制造業的海外市場拓展策略考核試卷
- 水泥制品市場營銷策劃考核試卷
- 染色工藝對纖維性能的影響考核試卷
- 眼鏡行業政策與法規考核試卷
- 海洋環境教育與公民科學素養考核試卷
- 淀粉在保健品配方中的功能考核試卷
- 護理比賽之外科技能競賽
- 河南省安陽三十六中2025年高三年級第二學期期中考試數學試題試卷
- 2025年高考作文備考訓練:知足與進取(附思路指引、立意參考、結構建議、4篇范文示例)
- 2025年山東省東營市廣饒縣一中中考一模英語試題(原卷版+解析版)
- 浙江省寧波市鎮海中學2024-2025學年高考二模英語試題試卷含解析
- 高校班干部培訓
- 房 產 稅教學課件
- 雷雨劇本文件完整版電子書下載
- 采樣員筆試題庫及答案
- 2025年晉中職業技術學院單招職業適應性測試題庫參考答案
- 2025年洛陽文化旅游職業學院單招職業技能測試題庫及參考答案
- 【語言文字運用】考點45 邏輯推斷(新增考點)(解析版)
- 2025年中國中高壓變頻器行業發展趨勢及投資前景預測報告
評論
0/150
提交評論