課程設計任務書及成績
課程名稱
單片機課程設計
題目
交通燈控制設計
課程設計目標與任務、計劃與進度安排:
實踐教學要求與任務:
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交通燈四種通行模式及行車方向指示
按照簡單的交通路口規則,有四種模式
- 南北綠燈亮 東西紅燈亮
- 南北黃燈閃 東西紅燈亮
- 南北紅燈亮 東西綠燈亮
- 南北紅燈亮 東西黃燈閃
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.《單片機課程設計指導書》 皮大能 北京理工大學出版社