仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【M01】
1.? 簡介
? 本文提出了一種基于51單片機的智能交通燈設(shè)計。該設(shè)計在硬件方面主要采用AT89C51單片機作為主控核心,結(jié)合獨立按鍵、數(shù)碼管、LED燈,實現(xiàn)不同的紅綠燈切換時間,并且具有倒計時的功能。
2.? 主要功能
a.當(dāng)主干道通行亮綠燈時,支干道亮紅燈,而支干道亮綠燈時,主干道亮紅燈。
b.主支干道交替通行,主干道每次放行30s、支干道25s,設(shè)計30s和25s計時顯示電路。
c.在過程中間,要亮3s的黃燈作為過渡,設(shè)置3s計時顯示電路。
d.有緊急車輛要求通過時,系統(tǒng)要能禁止東西或南北兩條路上所有的車輛通行。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
//數(shù)碼管控制端口
sbit LSA=P2^2;
sbit LSB=P2^1;
sbit LSC=P2^3;
sbit LSD=P2^4;
sbit k2=P3^2;//按鍵控制
sbit k3=P3^3;
sbit led1=P1^0;//南北 綠
sbit led2=P1^1;//南北 黃
sbit led3=P1^2; //南北 紅
sbit led4=P1^3;//東西 綠
sbit led5=P1^4;//東西 黃
sbit led6=P1^5; //東西 紅
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 sum2,sum1=0;
u16 js;//計數(shù)變量
u8 aa,bb; //中間變量
u8 table=0; //切換標(biāo)志位
u8 nbshi,dxshi,moshi; //時間中間標(biāo)記
u8 nbshi1,dxshi1,moshi1; //時間中間標(biāo)記1
u8 huangshi=3;//黃燈時間
u8 nbzlshi=25; //南北各燈時間 直行 綠燈
u8 nbzhshi=30; //南北各燈時間 直行 紅燈
u8 dxzlshi=25; //東西各燈時間 直行 綠燈
u8 dxzhshi=30; //東西各燈時間 直行 紅燈
u8 dxhshi,nbhshi; //南北 東西紅燈時間 中間變量
u8 INT1_1,INT1_0; //中斷標(biāo)志
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數(shù) 名 : Timer0Init
* 函數(shù)功能 : 定時器0初始化
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
void hlhdeng(u8 deng)
{
switch(deng)
{
case 0x00: //東西直行 綠燈
if(sum1==0)
led1=1; // 綠 // 南北 燈
led2=1; //黃
led3=0; //紅
if(sum1==0)
led4=0; // 綠 //東西 燈
led5=1; // 黃
led6=1; //紅
break;
case 0x01: //東西直行 黃燈
if(sum1==0)
led1=1; // 綠 // 南北 燈
led2=1; //黃
led3=0; //紅
if(sum1==0)
led4=1; // 綠 //東西 燈
led5=0; // 黃
led6=1; //紅
break;
case 0x02: // 南北 直行 綠
if(sum1==0)
led1=0; // 綠 // 南北 燈
led2=1; //黃
led3=1; //紅
if(sum1==0)
led4=1; // 綠 //東西 燈
led5=1; // 黃
led6=0; //紅
break;
case 0x03: // 南北 直行 黃
if(sum1==0)
led1=1; // 綠 // 南北 燈
led2=0; //黃
led3=1; //紅
if(sum1==0)
led4=1; // 綠 //東西 燈
led5=1; // 黃
led6=0; //紅
break;
}
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
東西通行:
南北通行:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【M01】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集