A. MSC-51單片機交通燈論文
單片機交通燈控制系統設計--帶模擬的論文編號:JD943 論文字數:7687,頁數:29摘要
本設計是交通信號燈控制系統,隨著社會的不斷的進步,社會的不斷發展。交通也日漸復雜,交通的自動化也不斷更新,交通的一些指揮系統光靠人來完成是遠遠不夠的,這就需要設計各種交通指揮自動化系統來完成這些復雜的工作。從而使交通指揮系統更加有秩序,更加安全。至此本人設計了交通信號燈控制系統,來指揮十字路口車輛的停通,使紅綠燈指揮系統實現自動化,無人化。
該交通燈控制系統控制的是東西和南北兩個方向上的車輛通行,系統共採用6個發光二極體來模擬各路交通信號燈,4個LED七段數碼管以倒計時的方式顯示各個方向上允許通行或禁止通行的信號燈剩餘的時間。停35S,准備5S,之後通行30S,並在東西和南北兩個方向上這兩種狀態不斷循環。此系統核心元件為單片機AT89C51,單片機)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件採用ATMEL高密度非易失存儲器製造技術製造,與工業標準的MCS-51指令集和輸出管腳相兼容。由於將多功能8位CPU和閃爍存儲器組合在單個晶元中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。對其編寫相關程序來控制交通信號燈和數碼管的時間顯示,並採用外部中斷來控制緊急情況。此設計的硬體電路不是很復雜,關鍵在於軟體的設計,即程序的編寫。本設計採用的程序編寫語言為現在流行的C語言,簡單又便於閱讀。編寫程序的原則是:1.滿足設計的要求。2.盡量採用最好,最有效的演算法。3.編寫時應盡量用最簡潔的語言。編寫好源程序後,採用keil軟體對其進行編譯,使其生成單片機可以識別的.hex文件,再把此文件導入單片機89C51中即可。
硬體電路和源程序及目標文件都設計完後,我們可以採用相關軟體進行模擬,以使交通信號燈控制系統的設計更加准確,可靠。設計者採用PROTUES軟體進行模擬調試,模擬時注意此軟體使用,從而進一步熟悉並學習此軟體。模擬成功後,就做好本次設計報告,寫出此次設計的心得與體會。
關鍵詞:交通指示燈;單片機;控制
目錄
1 概述 3
1.1 交通燈設計方案選擇與論證: 3
1.2設計要求及目的: 3
1.2.1基本要求: 3
1.2.2提高要求: 3
1.2.3設計目的: 4
1.3交通燈控制系統的簡單說明: 4
2 系統總體方案及硬體設計 5
2.1 硬體電路各元件介紹: 5
2.1.1核心晶元AT89C51單片機的說明 5
2.1.2兩位八段式數碼管 7
2.1.3其它元件的說明 9
2.2總電路的設計及過程說明 10
2.2.1設計基本框架圖:(如圖6所示) 10
2.2.2總體電路的工作原理: 10
2.2.3各埠控製作用: 11
2.2.4復位和時鍾電路: 12
2.3設計思想: 13
3 軟體設計 14
3.1交通燈狀態的分析: 14
3.2主程序流程圖:(如圖一,圖二所示) 15
3.3中斷程序流程圖:(如圖三所示) 17
4 Proteus軟體模擬 18
4.1模擬過程: 18
(1)南北紅,東西綠 18
4.2檢測與調試: 20
5課程設計體會 22
5.1心得體會: 22
參考文獻 22
附1:源程序代碼 23
附2:系統原理圖 28 答案來自:http://www.lwtxw.com/html/42-5/5746.htm
B. 用單片機模擬控制交通燈
到網路文庫中找找,參考論文也比較多。你也可到「淘寶網」上找找:「51單片機交通燈控制系統C語言設計源程序送模擬圖」,有現成的,有實物圖、模擬、原理圖、源程序等,這款交通燈有以下功能。
1. 系統除基本交通燈功能外;
2. 還具有倒計時、顯示時間設置;
3. 緊急情況處理、LED信息顯示;
4. 時間可以根據具體情況手動控制等功能。
C. 如何用c語言編程在單片機上做交通信號燈
硬體電路設計
此電中路設計採用AT89C51單片機,74LS47(數碼管驅動)74LS373(數碼管驅動輸出鎖存),8個數碼管顯示其延時值,四個紅、黃、綠指示燈。硬體設計關鍵在於,延時顯示時,要考慮到當個位數字顯示時,要確保十位數字顯示輸出的不變。因此,可加輸出鎖存器。在延時最後三秒時,要讓黃燈進行閃爍,並同時顯示數字(這一步在軟體設計上很關鍵)。
(1)電路連接圖:
三、軟體程序(C語言)
以下是整個設計的軟體程序,直接可以編譯成*。Hex代碼。通過以上電路,下載到單片機,可直接運行。
//*****************************//
//程序名:十字路口交通燈控制
//編寫人:黃庭劍
//初寫時間:2009年1月2日
//程序功能:南北為車行道,延時60秒;東西方向為人行道,延時20秒,且在最後3秒黃燈顯示2秒鍾再實現切換.
//CPU說明:AT89C51型單片機;24MHZ晶體振盪器
//完成時間:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//這部分內容其實在「#include<reg51.h>」里已經有,但裡面定義的必須區分大小寫,在這里,因為我程序採用的是小寫,reg51.h里對各個埠與寄存器的定義都是大寫,所以在編譯連接時,會報錯,所以,在本設計程序里,我只用到了埠,在這里也就只定義了四個,而沒有去改reg51.h裡面的內容。其實兩者是一樣的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373鎖存器控制端定義
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的數碼管時間顯示調用,利用74L74BCD碼,8位驅動輸出;
//函數聲明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函數聲明end
//***********************//延時子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}
}
//**********************//延時子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行時,延時20秒
p2=0x09;//南北紅燈亮
p3=0x24;//東西綠燈亮
while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//當十位數減到0時,只顯示個位數
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//減到3時退出循環,讓其黃燈閃爍顯示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是車輛通行時延時60秒//
p2=0x24;//南北綠燈亮
p3=0x09;//東西紅燈亮
while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//當十位數減到0時,只顯示個位數
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//減到2時退出循環
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黃燈閃爍三秒完畢
}
voidmain()//主函數入口處
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各埠
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//關閉所有交通燈
}
}
}
}
D. 單片機交通信號燈控制系統設計
單片機交通信號燈控制
系統設計
有完整的程序。