基于51單片機的交通燈控制設計

課程設計任務書及成績

課程名稱

單片機課程設計

題目

交通燈控制設計

課程設計目標與任務、計劃與進度安排:

實踐教學要求與任務:

1、了解交通燈的基本工作原理;
2、用Proteus模擬實現交通燈控制;
3、用Keil C51編程實現上述功能;
4、用Keil與Proteus聯調。

工作計劃與進度安排:

17周查找相關資料。
18周詳細設計。
19周程序測試,書寫論文,進行答辯。

1 引言

交通事業蓬勃發展,交通流量年年增長,大、中、小城市的汽車、摩托車等各種車輛與日俱增,道路交通繁忙,經常有嚴重堵車現象,特別是在交叉口,機動車、非機動車、行人來往非常混亂,為了在叉口的各條干道實現合理的科學分流。本人根據單片機具有物美價廉、功能強、使用方便靈活、可靠性高等特點,提出了一種用STC89c51單片機自動控制交通信號燈及時間顯示的方法,同時給出了軟硬件的實現方法,為交通指揮自動化提供了一種新的廉價手段,具有一定的推廣意義。本文介紹了控制基本原理以及控制的表現,同時也介紹了城市交通信息系統的設計目標, 開發途徑及其系統結構與功能和數據地理編碼、建庫, 同時, 論述了系統中交通現狀、交通管理、交通規劃及背景信息查詢模塊的建造及應用。介紹了用于城市交叉路口的三色程控交通信號時間顯示器的研制方案,對其電源供電、發光二極管構成的負載結構、燈色時間檢測都給出了精巧合理的優化結構,大幅度地提高了產品可靠性并降低了制造成本。

2 應用軟件介紹

2.1 C語言介紹

C語言是于1972年由貝爾實驗室的Dennis Ritchie在B語言的基礎上開發出來的。最初的C語言是作為UNIX操作系統的開發語言而被人們所認識。此后,貝爾實驗室對C語言進行了多次改進和版本的公布,C語言的優點才引起人們的普遍注意。隨著UNIX操作系統在各種機器上的廣范使用,使C語言得到了迅速推廣。1978年由Brian W. Kernighan和Dennis M. Ritchit合著了《The C Programming Language》一書,該書對C語言作了詳細的描述,這本書對C語言發展影響深遠,并成為了后來C語言版本的基礎,稱之為標準C。隨后C語言在各種計算機上快速得以推廣,并導致了許多C語言版本的出現。

2.2 Keil C51

Keil C51 是美國 Keil Software 公司出品的 51 系列兼容單片機 C 語言軟件開發系統,與匯編相比,C 語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。Keil 提供了包括 C 編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(μVision)將這些部分組合在一起。運行 Keil軟件需要 WIN98、NT、WIN2000、WINXP 等操作系統。

2.3 Proteus

Proteus 軟件是英國 Lab Center Electronics 公司出版的 EDA 工具軟件。它不僅具有其它EDA 工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前比較好的仿真單片機及外圍器件的工具。雖然目前國內推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力于單片機開發應用的科技工作者的青睞。 Proteus 是英國著名的 EDA 工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到 PCB 設計,真正實現了從概念到產品的完整設計。是目前世界上唯一將電路仿真軟件、PCB 設計軟件和虛擬模型仿真軟件三合一的設計平臺,其處理器模型支持 8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086 和 MSP430 等,2010年又增加了 Cortex 和 DSP 系列處理器,并持續增加其他系列處理器模型。在編譯方面,它也支持 IAR、Keil 和 MATLAB 等多種編譯器。

3 硬件資源介紹

3.1單片機簡介

單片機(MCU)又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統集成到一個芯片上。概括的講:一塊芯片就成了一臺計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網絡通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能 IC 卡,民用豪華轎車的安全保障系統,錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫療器械了。因此,單片機的學習、開發與應用將造就一批計算機應用與智能化控制的科學家、工程師。

3.2 89C51 簡介

89C51 是一種帶 4K 字節閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能 CMOS8 位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反復擦除 100 次。該器件采用 ATMEL 高密度非易失存儲器制造技術制造,與工業標準的 MCS-51 指令集和輸出管腳相兼容。由于將多功能 8 位 CPU 和閃爍存儲器組合在單個芯片中,ATMEL 的 89C51 是一種高效微控制器,89C2051 是它的一種精簡版本。

3.3 89C51 單片機的片內邏輯結構

在這里插入圖片描述

3.4 89C51 硬件資源

(1)微處理器(CPU):一個 8 位 CPU。
(2)數據存儲器(RAM):片內為 128B,片外最多可外擴 64KB。
(3)程序存儲器(4KB Flash ROM):片內為 4KB,片外最多可外擴程序存儲器至 64KB。
(4)4 個 8 位可編程并行 I/O 口(P0、P1、P2、P3),1 個全雙工的串行口。
(5)定時器/計數器:片內有 2 個 16 位的定時器/計數器,具有 4 種工作方式。
(6)中斷系統:具有 5 個中斷源,2 級中斷優先級。
(7)特殊功能寄存器(SFR): 共有 21 個特殊功能寄存器,用于 CPU 對片內各功能部件進行管理、控制和監視。
(8)1 個看門狗定時器(WDT)。

3.5 89C51 的引腳圖

在這里插入圖片描述

(1)P0 口:8 位,漏極開路的雙向 I/O 口。
(2) P1 口:8 位,準雙向 I/O 口,具有內部上拉電阻。
(3)P2 口:8 位,專為用戶使用的準雙向 I/O 口,具有內部上拉電阻。
(4)P3 口:8 位,準雙向 I/O 口,具有內部上拉電阻。也可作為普通的 I/O 口使用。除此之外,P3 口還有第二功能的定義。

4 設計課題

交通燈控制設計:
1.了解一個十字路口交通燈基本工作原理,要求分主次干道,并加入倒計時功能
2.用Keil C51編程實現上述功能
3.用Proteus模擬實現十字路口交通燈控制電路。
4.用Keil與Proteus聯調

5.方案設計

5.1交通燈四種通行模式及行車方向指示

按照簡單的交通路口規則,有四種模式

  1. 南北綠燈亮 東西紅燈亮
  2. 南北黃燈閃 東西紅燈亮
  3. 南北紅燈亮 東西綠燈亮
  4. 南北紅燈亮 東西黃燈閃

在這里插入圖片描述

5.2 交通燈控制系統

實用交通燈控制系統主要CPU控制模塊為了、信號燈顯示模塊、倒計時顯示模塊等組成,如下圖所示:
在這里插入圖片描述
其中控制模塊是最核心的部分,控制核心采用AT89C51單片機,利用AT89C51單片機內部定時器實現交通指示燈控制的計時功能,在正常情況下產生相應的控制信息控制倒計時顯示電路,信號燈顯示電路的正常運行。
信號燈顯示模塊采用四個集成交通指示燈來模擬紅、黃、綠交通指示燈,用單片機的P1口控制發光二極管的亮滅狀態。
倒計時顯示模塊的接口電路有靜態顯示和動態顯示兩種方式,由于動態顯示方式在仿真軟件中不易于查看,所以本次采用靜態顯示方式,這種方式優點是易于操作,缺點是浪費單片機接口資源。
為了倒計時更加準確,采用外加晶振電路方法實現其功能。

6硬件系統設計

6.1 信號燈顯示模塊

由于南北方向的信號燈始終是同一種狀態,所以南北信號燈為一組,只需將對應的信號燈并聯即可,東西方向同理。
在這里插入圖片描述

6.2 倒計時顯示模塊

選取8個7段數碼管分別模擬顯示四個方向的倒計時,數碼管采用共陰極接法。
為了提高P0、P2端口的電流輸出能力,保證數碼管亮度,保護端口引腳,在P0端口與數碼管之間增加了74LS245芯片。
在這里插入圖片描述

6.3 復位模塊

此系統可以通過復位按鍵實現從新工作,電路圖如圖所示:

在這里插入圖片描述

7軟件系統設計

7.1 中斷服務程序框圖

在這里插入圖片描述

7.2 主程序框圖

在這里插入圖片描述
7.3 程序代碼

#include<reg51.h>
sbit g1=P1^0; 	//位定義
sbit r1=P1^1; 
sbit y1=P1^2; 
sbit g2=P1^3; 
sbit r2=P1^4; 
sbit y2=P1^5; 
unsigned char f=0;
unsigned char nanbei_time=15;	 //定義南北的時間長度
unsigned char dongxi_time=11;    //定義東西的時間長度
unsigned char m; 
unsigned char code  t[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; 
void init_timer0(void) 	   //中斷初始化函數{TMOD=0x01;  TH0=(65536-50000)/256;  TL0=(65536-50000)%256;  ET0=1;  EA=1;  TR0=1; } void display(unsigned char x) {  unsigned char m,n;  m=x/10;  n=x%10;  P0=t[m];  P2=t[n]; } 
void timer(void) interrupt 1 using 1  //中斷服務函數
{TH0=(65536-50000)/256;TL0=(65536-50000)%256;f++;if(f==20){f=0;m--;}
}
void main() 
{m=nanbei_time;P1=0x00;  init_timer0(); while(1)  {  do   {   display(m);   g1=1;  r1=0;g2=0;r2=1;}while(m!=3);do{        if(m<=3){y1=~y1;r1=0;g1=0;r2=1;g2=0;}display(m);    r1=0;g2=0;r2=1;}while(m!=3);do{        if(m<=3){y1=~y1;r1=0;g1=0;r2=1;g2=0; }display(m);    }while(m!=0);if(m==0)
{        m = dongxi_time;y1 = 0;y2 = 0;}do{display(m);g1 = 0;r1 = 1;g2 = 1;r2 = 0;}while(m!=3);do{if(m<=3){    r1=1,g1=0;y2=~y2,r2=0,g2=0;}display(m);}while(m!=0);if(m==0){m=nanbei_time;y1=0;y2=0;}}
}

8 電路仿真
在這里插入圖片描述
在這里插入圖片描述
開始仿真:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

9設計總結
通過這次單片機課設,我不僅學到了許多新的知識,而且加深了我對以前學習的理論知識的掌握。以前我們學的東西僅限于課本,對實實在在的應用還比較模糊,這次課程設計有利于同學們學習目的的明確性和主動性。通過這次課程設計,我們知道了哪些東西是應該確實掌握的,在實踐中填充我理論知識的不足,可以將理論很好地應用到實際當中去。
10參考文獻
1.《單片機原理及接口技術》 張毅剛 人民郵電出版社
2.《單片機課程設計指導書》 皮大能 北京理工大學出版社

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455001.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

福斯i6飛行模式設置_數據網絡卡的時候,不妨試試“開關飛行模式”?上網速度明顯變快...

相信大家都有過這種經歷&#xff0c;手機數據網速很慢的時候&#xff0c;開一下飛行模式再關閉&#xff0c;上網速度會比之前快很多&#xff0c;這就有人有了疑問&#xff0c;為什么呢&#xff1f;開飛行模式再關掉飛行模式&#xff0c;其實等于是完成了一次手動的小區重選。移…

安裝開源 ITIL 門戶 iTOP

在 CentOS 7 上部署iTOP是一個簡單的基于Web的開源IT服務管理工具。它有所有的ITIL功能&#xff0c;包括服務臺、配置管理、事件管理、問題管理、變更管理和服務管理。iTOP依賴于Apache/IIS、MySQL和PHP&#xff0c;因此它可以運行在任何支持這些軟件的操作系統中。因為iTOP是一…

基于FPGA 的8b10b編解碼電路前端電路設計

基于FPGA 的8b10b編解碼電路前端電路設計 摘 要 本設計是采用EDA技術設計的一種8B /10B 編解碼電路,實現了在高速的串行數據傳輸中的直流平衡。該編解碼電路設計大體上可以由五個模塊構成&#xff0c;分別是默認編碼模塊、差異度計算模塊、編碼校正模塊、并串轉換模塊、顯示模…

day15(mysql 的多表查詢,事務)

mysql之多表查詢 1.合并結果集 作用:合并結果集就是把兩個select語句查詢的結果連接到一起&#xff01; /*創建表t1*/ CREATE TABLE t1(a INT PRIMARY KEY ,b VARCHAR(10) ) INSERT INTO t1 VALUES(1,a); INSERT INTO t1 VALUES(2,b); INSERT INTO t1 VALUES(3,c); /*創建t2*/…

vue router傳參_新手使用vue-router傳參時注意事項

1. 使用name和params組合傳參this.$router.push({name: details, params: {id: 233}})路由配置import Vue from vueimport Router from vue-router Vue.use(Router) export default new Router({ mode: history, routes: [ { path: /details, name: details, component: resolv…

FFMpeg分析詳細分析

與其說是分析&#xff0c;不如說是學習&#xff0c;只是看在自己第一次寫系列文章的份上&#xff0c;給足自己面子&#xff0c;取個有"深度"的題目&#xff01;如有人被題目所蒙騙進來&#xff0c;還望見諒&#xff01; URLProtocol,URLContext和ByteIOContext是FFMp…

《jQuery基礎》總結

目前&#xff0c;互聯網上最好的jQuery入門教材&#xff0c;是Rebecca Murphey寫的《jQuery基礎》&#xff08;jQuery Fundamentals&#xff09;。這本書雖然是入門教材&#xff0c;但也足足有100多頁。我對它做了一個詳細的筆記&#xff0c;試圖理清jQuery的設計思想&#xff…

邏輯綜合工具DesignCompiler使用教程

邏輯綜合工具Design Compiler使用教程 圖形界面design vision操作示例 邏輯綜合主要是將HDL語言描述的電路轉換為工藝庫器件構成的網表的過程。綜合工具目前比較主流的是synopsys公司Design Compiler&#xff0c;我們在設計實踐過程中采用這一工具。Design compiler有兩種工作…

遍歷結構體_三菱ST語言編程(3)——結構體變量

上篇文章介紹了數組&#xff0c;是一組相同類型數據的列表&#xff0c;那么不同類型的數據能否組合到一起用一個標簽表示呢&#xff1f;答案當然是可以的&#xff0c;而實現這個功能的就是結構體(struct)。建立結構體在三菱結構化編程的界面中左側程序部件里可以找到結構體標簽…

關于微信小程序swiper的問題

關于小程序swiper的問題 代碼 在官方示例上給swiper添加了currentbindchangecircular添加了一個buttonbindtap用于切換下一張 index.wxml <swiper indicator-dots"{{indicatorDots}}"bindchange"swiperChange"current"{{index}}"circular&quo…

PyQt5案例匯總(完整版)

個人博客點這里 PyQt5案例匯總(完整版) 起步 PyQt5是一套綁定Qt5的應用程序框架。他在Python 2.x和3.x中都是可用的。該教程使用的是Python3.x。 Qt庫是一套最有用的GUI庫。 PyQt5是作為一套Python模塊實現的。他已經超過620個類和6000個函數與方法。他是一個運行在所有主…

中的 隱藏鼠標菜單_Mac移動隱藏刪除頂部菜單欄圖標教程

蘋果菜單欄貫穿 Mac 的屏幕頂部。左側是蘋果菜單和應用菜單&#xff0c;應用菜單一般顯示你當前使用的Mac軟件的所有功能菜單。右側通常是以圖標顯示的狀態菜單&#xff0c;幫助你快速查看Mac的狀態以及快速訪問某些Mac軟件。移動圖標位置若想要重新排列狀態菜單欄的圖標&#…

可以用什么代替平面鏡

答案是鏡面 潛望鏡是利用平面鏡來改變光路轉載于:https://www.cnblogs.com/lidepeng/p/7280593.html

[hadoop] kettle spoon 基礎使用 (txt 內容抽取到excel中)

spoon.bat 啟動kettle。 測試數據 1. 新建轉換 輸入中選擇文本文件輸入 雙擊設置文本輸入 字符集、分隔符設置 獲取對應的字段&#xff0c;預覽記錄。 拖入 excel輸出&#xff0c;設置轉換關系 設置輸出路徑 獲取字段 啟動轉換 導入的excel數據&#xff08;設置好格式,圖中ID,A…

ffmpeg提取音頻播放器總結

ffmpeg提取音頻播放器總結&#xff1b; 一&#xff1a;簡介 從編寫音頻播放器代碼到完成播放器編寫&#xff0c;測試&#xff0c;整整5天的時間&#xff0c;這時間還不算之前對 ffmpeg熟悉的時間&#xff0c;可以說是歷經千辛萬苦&#xff0c;終于搞出來了&#xff0c;雖然最…

【BZOJ 4103】 [Thu Summer Camp 2015]異或運算 可持久化01Trie

我們觀察數據&#xff1a;樹套樹 PASS 主席樹 PASS 一層一個Trie PASS 再看&#xff0c;異或&#xff01;我們就把目光暫時定在01Tire然后我們發現&#xff0c;我們可以帶著一堆點在01Trie上行走&#xff0c;因為O(n*q*30m*30)是一個可選復雜度。 我們想一下我們正常的時候…

Docker學習筆記——Java及Tomcat Dockerfile

1、Java Dockerfile創建項目目錄java&#xff0c;目錄下上傳所需java版本壓縮包&#xff0c;并創建Dockerfile文件&#xff0c;項目結構如下&#xff1a;java-Dockerfile-jdk-8u111-linux-x64.gzDockerfile內容&#xff1a;# JAVA # Version 1.8.0_111 # SOURCE_IMAGE FROM cen…

rabbitmq接口異常函數方法_RabbitMQ監控(三):監控隊列狀態

#RabbitMQ 監控(三)驗證RabbitMQ健康運行只是確保消息通信架構可靠性的一部分&#xff0c;同時&#xff0c;你也需要確保消息通信結構配置沒有遭受意外修改&#xff0c;從而避免應用消息丟失。RabbitMQ Management HTTP API提供了一個方法允許你查看任何vhost上的任何隊列&…

FFMpeg語法參數中文參考手冊

要查看你的ff mpeg支持哪些 格式&#xff0c;可以用如下命令&#xff1a;$ ffmpeg -formats | less還可以把 視頻文件導出成jpg序列幀&#xff1a;$ ffmpeg -i bc-cinematic-en.avi example.%d.jpgdebian下安裝ffmpeg很簡單&#xff1a;&#xff03;apt-get install ffmpegffmp…

Java類集框架 —— LinkedHashMap源碼分析

前言 我們知道HashMap底層是采用數組單向線性鏈表/紅黑樹來實現的&#xff0c;HashMap在擴容或者鏈表與紅黑樹轉換過程時可能會改變元素的位置和順序。如果需要保存元素存入或訪問的先后順序&#xff0c;那就需要采用LinkedHashMap了。 LinkedHashMap結構 LinkedHashMap繼承自H…