基于單片機(jī)控制的交通燈設(shè)計(jì)(含完整C程序 原理圖)_第1頁
基于單片機(jī)控制的交通燈設(shè)計(jì)(含完整C程序 原理圖)_第2頁
基于單片機(jī)控制的交通燈設(shè)計(jì)(含完整C程序 原理圖)_第3頁
基于單片機(jī)控制的交通燈設(shè)計(jì)(含完整C程序 原理圖)_第4頁
基于單片機(jī)控制的交通燈設(shè)計(jì)(含完整C程序 原理圖)_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、電子與信息工程學(xué)院課 程 設(shè) 計(jì) 報(bào) 告2021 2021學(xué)年 第 2 學(xué)期課程名稱: 單片機(jī)課程設(shè)計(jì) 班 級: 學(xué) 號: 姓 名: 指導(dǎo)教師: 2021年 03月1、 目的實(shí)習(xí)是在教師指導(dǎo)下,學(xué)生運(yùn)用所學(xué)理論知識及實(shí)驗(yàn)方法解決實(shí)際問題的一種實(shí)踐活動,通過這些活動培養(yǎng)學(xué)生分析問題和解決問題的能力。具體表現(xiàn)在構(gòu)造一個(gè)控制系統(tǒng)框架的能力;檢索和閱讀文獻(xiàn)資料的能力;綜合運(yùn)用所學(xué)專業(yè)知識使之對所設(shè)計(jì)系統(tǒng)具有獨(dú)立調(diào)試的能力和故障處理的能力;繪圖能力;計(jì)算機(jī)運(yùn)用能力;邏輯思維能力與形象思維能力;文字及口頭表達(dá)的能力;撰寫實(shí)習(xí)報(bào)告的能力2、 內(nèi)容和要求任務(wù)1:交通燈(1)根本要求:以單片機(jī)為核心設(shè)計(jì)一個(gè)完整

2、的交通燈模擬系統(tǒng)。所謂模擬就是以每組有綠,紅,黃色3支共兩組發(fā)光二極管表示交通信號燈,數(shù)碼管2只共兩組以遞減的方式表示各色信號燈的時(shí)間。在雙干線路口上,交通信號燈的變化是定時(shí)的。假定: 放行線,綠燈亮放行25秒,黃燈亮警告5秒,然后紅燈亮禁止。 禁止線,紅燈亮禁止30 秒,然后綠燈亮放行。使兩條路線交替地成為放行線和禁止線,就可以實(shí)現(xiàn)定時(shí)交通控制。假定以P1口線接6支發(fā)光二極管即交通信號燈,因?yàn)殡娐分杏蟹聪嗥鞯年P(guān)系,所以口線輸出高電平那么“信號燈熄滅,口線輸出低電平那么“信號燈“亮。(2)進(jìn)階要求一:在根本要求的根底上,要求紅綠燈時(shí)間可通過按鍵設(shè)置,例如紅燈60秒,綠燈52秒,黃燈8秒。提示:

3、時(shí)間設(shè)置一定是要遵循以下規(guī)律:紅燈時(shí)間綠燈時(shí)間黃燈時(shí)間;任務(wù)2:秒表3過程如實(shí)際程序開發(fā)、電子制作,詳細(xì)說明有關(guān)原理、開發(fā)過程、調(diào)試過程、結(jié)果一交通燈芯片介紹SST89E58RD:是8位FLASH FLEX51系列單片機(jī)。FLASH FLEX51是在高級FLASH CMOS半導(dǎo)體工藝下設(shè)計(jì)和生產(chǎn)出來的單片機(jī)產(chǎn)品之一。單片機(jī)有40K片內(nèi)FLASH EEPROM程序存儲器,它利用SST的超級FLASH專利技術(shù),這些都是SST的領(lǐng)先技術(shù)。超級FLASH存儲器被分為兩個(gè)獨(dú)立的程序存儲器塊,根本FLASH Block0占用32K字節(jié)片內(nèi)程序存儲空間,二級FLASH Block1占用8K字節(jié)的片內(nèi)程序存儲

4、器空間;8K字節(jié)的二級FLASH塊能被映射到32K字節(jié)低地址空間它也能從程序計(jì)數(shù)器中被隱藏掉而用做一個(gè)獨(dú)立的類似EEPROM的數(shù)據(jù)存儲器。其具有以下特點(diǎn):兼容80C51系列,內(nèi)置超級FLASH存儲器的單片機(jī);工作電壓Vdd=4.55.5;1K*8的內(nèi)部RAM256Bytes+768Bytes,可以放心使用C語言編程等。8155:Intel8155是可編程RAM/IO芯片,為40腳雙列直插式封裝。有256*8位靜態(tài)RAM,2個(gè)8位和1個(gè)6位可編程并行I/O接口,以及1個(gè)14位可編程定時(shí)器/計(jì)數(shù)器。可直與MCS-51單片機(jī)相接,是MCS-51單片機(jī)應(yīng)用系統(tǒng)中應(yīng)用最多的芯片之一其內(nèi)部結(jié)構(gòu)圖和引腳圖如

5、圖1所示圖1在交通燈系統(tǒng)中,四位數(shù)碼管是用來顯示交通燈倒計(jì)時(shí)時(shí)間的,一路顯示放行線時(shí)間,一路顯示禁止線時(shí)間四位數(shù)碼管的電路如圖2:圖2四位八段數(shù)碼管,屬共陰逆序,高電平有效,所以不帶小數(shù)點(diǎn)的0-f的段碼如下:0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;PROTEUS 仿真圖如圖3:圖3四位數(shù)碼管的顯示使用了并行擴(kuò)展芯片8155,8155與單片機(jī)SST89E58RD的接口如圖4圖48155的高8位數(shù)據(jù)地址線與單片機(jī)的P0口相連,CE與AD15相連,IO/M與AD8相連數(shù)碼管的八位段選與PB口相連

6、,四位位選與PA口相連。用C語言初始化8155和顯示程序如下:#define PA8155 XBYTE0x7101#define PB8155 XBYTE0x7102#define COM8155 XBYTE0x7100COM8155=0x03;2發(fā)光二極管模塊用兩組分別為紅黃綠共六盞LED燈來模擬實(shí)際的交通信號燈,時(shí)間上遵循紅燈時(shí)間等于綠燈時(shí)間加黃燈時(shí)間。LED燈是低電平有效,硬件電路圖如圖5所示:圖5LED的控制是在定時(shí)器0的中斷中實(shí)現(xiàn)的,每一秒時(shí)間到后,會根據(jù)實(shí)時(shí)時(shí)間current_time與紅黃綠時(shí)間比擬,來確定相應(yīng)的兩盞燈亮,程序如下所示: if(current_time<gr

7、een)/主綠燈和從紅燈時(shí)間 Allocate(green-current_time)*100+green+yellow-current_time); P1=0xf3; else if(current_time<green+yellow)/主黃從紅 Allocate(green+yellow-current_time)*100+green+yellow-current_time); P1=0xf5; else if(current_time<green*2+yellow)/主紅從綠 Allocate(2*green+2*yellow-current_time)*100+green*

8、2+yellow-current_time); P1=0xde; else / 主紅從黃 Allocate(2*green+2*yellow-current_time)*100+2*green+2*yellow-current_time); P1=0xee;3.進(jìn)階一的實(shí)現(xiàn)即實(shí)現(xiàn)交通燈時(shí)間的自由修改在程序運(yùn)行的過程中,要實(shí)現(xiàn)綠燈和黃燈時(shí)間的修改,我們需要使用一個(gè)外部中斷,在中斷中實(shí)現(xiàn)要修改的燈的顏色,選定顏色后,再掃描兩個(gè)IO口來實(shí)現(xiàn)時(shí)間的加減具體是掃描硬件電路如圖6所示:圖6中斷程序如下所示:void Ex0() interrupt 0 EA=0;if(!inte0)delay(500);i

9、f(!inte0)traffic_mode+;if(traffic_mode>2) traffic_mode=0;EA=1;4.程序流程圖如下:開始初始化1S到?進(jìn)入定時(shí)器中斷0LED及數(shù)碼管顯示Traffic_mode=1?狀態(tài)1按鍵處理按鍵是否按下狀態(tài)2Traffic_mode=2?主流程圖K1按下進(jìn)入修改選擇狀態(tài)進(jìn)入加狀態(tài)K3按下進(jìn)入減狀態(tài)K4按下返回按鍵流程圖二秒表秒表的要求是數(shù)碼管顯示模塊見一中“數(shù)碼管顯示模塊,此處略;程序主流程圖如下:開始初始化復(fù)位鍵?暫停暫停鍵?顯示時(shí)間結(jié)束 秒表主流程圖三將兩個(gè)程序合并將兩個(gè)程序合并需要用一個(gè)變量來判斷,我們選擇掃描P1.7口來設(shè)定變量的

10、值,然后在中斷和主函數(shù)中用變量的值來選擇執(zhí)行的程序段程序流程圖如下:開始初始化執(zhí)行交通燈功能Mode=2?執(zhí)行秒表功能Mode =1?四合并后的程序如下:#include<reg51.h> /頭文件#include<absacc.h>#include <intrins.h>#include<math.h>#define PA8155 XBYTE0x7101 /數(shù)碼管位選地址#define PB8155 XBYTE0x7102 /數(shù)碼管段選地址#define COM8155 XBYTE0x7100unsignedcharcode Table16=0

11、X0FC,0X60,0X0DA,0X0F2,0X66,0X0B6,0X0BE,0X0E0,0X0FE,0X0F6;unsigned char Buf4=0,0,0,0;/數(shù)據(jù)緩沖區(qū)sbit BTN=P17;sbit inte0=P32;sbit add=P34;sbit minus=P35;unsigned int mode=1; unsigned int traffic_count=0; /交通燈變量unsigned int traffic_mode=0;unsigned int current_time=0;unsigned int green=25;unsigned int yellow

12、=5;unsigned int time_count=0; /秒表變量unsigned int time=0;unsigned int reset; /復(fù)位標(biāo)志位bit i=0; /啟停標(biāo)志位void delay(unsigned int t)/延遲函數(shù) while(t-);void DISP_LED(unsigned char *Bufptr)/ 數(shù)碼管顯示 unsigned char disi;unsigned char BitCT=0X10; for(disi=0;disi<4;disi+) PA8155=BitCT; PB8155=Table*Bufptr+(disi=1 &am

13、p;& mode=2); BitCT=BitCT<<1;/左移一位delay(500); void Allocate(unsigned int a)/ 數(shù)據(jù)分配 Buf3=a/1000; Buf2=a%1000/100; Buf1=a%100/10; Buf0=a%10;unsigned char ChKey(bit Key)/ 鍵值掃描函數(shù) if(Key=0) delay(20000); if(Key=0) return 1; void Testmode()/鍵值掃描函數(shù) if(ChKey(BTN)=1) mode+; if(mode=3) mode=1; Allocat

14、e(mode*10); unsigned char scankey (unsigned char sec)/加減實(shí)現(xiàn)函數(shù) if(!add) delay(20000); sec+; if(!minus) delay(20000); sec-; return sec;void Ex0() interrupt 0 /外部中斷0if(mode=1) /EA=0; if(!inte0) delay(2500); if(!inte0) traffic_mode+; if(traffic_mode=3) traffic_mode=0; /EA=1; else if(mode=2) reset=1;void

15、timer0() interrupt 1 /定時(shí)器0中斷 if(mode=1) traffic_count+; if(traffic_count=20) traffic_count=0; current_time=(current_time+1)%(2*yellow+2*green); if(current_time<green) Allocate(green-current_time)*100+green+yellow-current_time); P1=0xf3; else if(current_time<green+yellow) Allocate(green+yellow-

16、current_time)*100+green+yellow-current_time); P1=0xf5; else if(current_time<green*2+yellow) Allocate(2*green+2*yellow-current_time)*100+green*2+yellow-current_time); P1=0xde; else Allocate(2*green+2*yellow-current_time)*100+2*green+2*yellow-current_time); P1=0xee; else if(mode=2) time_count+; if(

17、time_count=2) time_count=0; time+; Allocate(time); TH0=0x4b; TL0=0x40;void Ex1() interrupt 2 /外部中斷1 if(mode=2) i=i;void main() TMOD=0x01; TH0=0x4b; TL0=0x40; IP=0x01; EA=1; ET0=1; EX0=1; IT0=1; EX1=1; IT1=1; COM8155=0x03; TR0=1; Allocate(green*100+green+yellow);while(1) while(mode=1)/交通燈 Testmode();

18、 switch(traffic_mode) case 1: yellow=scankey(yellow); Allocate(yellow*100); break; case 2: green=scankey(green); Allocate(green); break; DISP_LED(Buf); while(mode=2) /秒表 Testmode(); if(i=1) TR0=1; else TR0=0; if(reset=1) /當(dāng)接收到復(fù)位信號后令各緩沖區(qū)清零,同時(shí)停止計(jì)時(shí) time=0; reset=0; i=0; TR0=0; Allocate(0); DISP_LED(Buf);五完整的硬件電路圖圖7秒表的實(shí)現(xiàn)是在上圖的根本上去掉LED局部,在獨(dú)立按鍵控制模塊換成下面的圖8圖81.通過這次實(shí)現(xiàn)我熟悉了51單片機(jī)C語言程序的編寫和單片機(jī)設(shè)計(jì)仿真工具PROTEUS的使用。用C編寫程序比匯編更符合人們的思考習(xí)慣,開發(fā)者可以擺脫與硬件無必要的接觸,更專心的考慮功能和算法而不是考慮一些細(xì)節(jié)問題,這樣就減少了開發(fā)和調(diào)試的時(shí)間。C語言具有良好的程序結(jié)構(gòu),適用于模塊化程序設(shè)計(jì),因此采用C語言設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)程序時(shí),首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計(jì)方法,將功能模塊化,由不同的模塊完成不同的功能;PROTEUS不僅是模擬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論