仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):【M03】
1.? 簡(jiǎn)介
? 本文提出了一種基于51單片機(jī)的智能交通燈設(shè)計(jì)。該設(shè)計(jì)在硬件方面主要采用AT89C51單片機(jī)作為主控核心,結(jié)合獨(dú)立按鍵、數(shù)碼管、LED燈,實(shí)現(xiàn)不同的紅綠燈切換時(shí)間,并且具有倒計(jì)時(shí)的功能。
2.? 主要功能
a.當(dāng)主干道通行亮綠燈時(shí),支干道亮紅燈,而支干道亮綠燈時(shí),主干道亮紅燈。
b.主支干道交替通行,主干道每次放行60s、支干道30s,設(shè)計(jì)60s和30s計(jì)時(shí)顯示電路。
c.在過(guò)程中間,要亮5s的黃燈作為過(guò)渡,設(shè)置5s計(jì)時(shí)顯示電路。
d.有緊急車輛要求通過(guò)時(shí),系統(tǒng)要能禁止東西或南北兩條路上所有的車輛通行。
3.? 源程序(Keil5)
本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過(guò).c和.h文件新建工程即可。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
/*****定義控制位**********************/
sbit EW_LED2=P2^3; //EW_LED2控制位
sbit EW_LED1=P2^2; //EW_LED1控制位
sbit SN_LED2=P2^1; //SN_LED2控制位
sbit SN_LED1=P2^0; //SN_LED1控制位
sbit SNstraight_Green=P1^3; //南北直行綠燈
sbit EWstraight_Green=P1^0; //東西直行綠燈
sbit SNstraight_Yellow=P1^4; //南北直行黃燈
sbit EWstraight_Yellow=P1^1; //東西直行黃燈
sbit SNstraight_Red=P1^5; //南北直行紅燈
sbit EWstraight_Red=P1^2; //東西直行紅燈
sbit SNright_Green=P2^7; //南北右拐綠燈
sbit EWright_Green=P1^6; //東西右拐綠燈
sbit SNright_Red=P3^4; //南北右拐紅燈
sbit EWright_Red=P2^4; //東西右拐紅燈
sbit SNleft_Green=P3^5; //南北左拐綠燈
sbit EWleft_Green=P2^5; //東西左拐綠燈
sbit SNleft_Red=P3^7; //南北左拐紅燈
sbit EWleft_Red=P2^6; //東西左拐紅燈
sbit SNturn_Yellow=P3^6; //南北轉(zhuǎn)向黃燈
sbit EWturn_Yellow=P1^7; //東西轉(zhuǎn)向黃燈
sbit Time_Button=P3^0; //時(shí)間加減按鈕判斷輸入端
sbit QZ_Button=P3^1; //強(qiáng)制通行方向判斷輸入端
bit Flag_SNstraight_Yellow; //SN直行黃燈標(biāo)志位
bit Flag_EWstraight_Yellow; //EW直行黃燈標(biāo)志位
bit Flag_SNturn_Yellow; //SN轉(zhuǎn)向黃燈標(biāo)志位
bit Flag_EWturn_Yellow; //EW轉(zhuǎn)向黃燈標(biāo)志位
bit QZ_EW; //EW強(qiáng)制通行標(biāo)志
bit QZ_SN; //SN強(qiáng)制通行標(biāo)志
bit QZ_flag; //數(shù)碼管強(qiáng)制標(biāo)志
char Time_EW; //東西方向倒計(jì)時(shí)單元
char Time_SN; //南北方向倒計(jì)時(shí)單元
uchar EW=30,SN=30,EWL=60,SNL=60; //倒計(jì)時(shí)時(shí)長(zhǎng)
uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~~~~9段選碼
/*********************延時(shí)函數(shù)**********************/
void Delay(uchar a)
{
while(a--);
}
/*******************顯示函數(shù),顯示倒計(jì)時(shí)的值**********************/
void Display(void)
{
char h,l;
h=Time_EW/10; //EW方向計(jì)時(shí)的十位數(shù)
l=Time_EW%10; //EW方向計(jì)時(shí)的個(gè)位數(shù)
P0=table[l]; //顯示EW計(jì)時(shí)時(shí)間的低位
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h]; //顯示EW計(jì)時(shí)時(shí)間的高位
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10; //SN方向計(jì)時(shí)的十位數(shù)
l=Time_SN%10; //SN方向計(jì)時(shí)的個(gè)位數(shù)
P0=table[l]; //顯示SN計(jì)時(shí)時(shí)間的低位
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h]; //顯示SN計(jì)時(shí)時(shí)間的高位
SN_LED1=1;
Delay(2);
SN_LED1=0;
}
/*******************顯示函數(shù),強(qiáng)制通行的值**********************/
void Display1(void)
{
P0=table[8];
if(QZ_flag==1)
{
EW_LED2=1;
EW_LED1=1;
SN_LED2=1;
SN_LED1=1;
}
else
{
EW_LED2=0;
EW_LED1=0;
SN_LED2=0;
SN_LED1=0;
}
}
/************************信號(hào)燈控制函數(shù)******************/
void SN_GOstraight() //SN直行綠燈
{
SNstraight_Green=1;
SNstraight_Yellow=0;
SNstraight_Red=0;
}
void SN_STOPstraight() //SN直行紅燈
{
SNstraight_Green=0;
SNstraight_Yellow=0;
SNstraight_Red=1;
}
void EW_GOstraight() //EW直行綠燈
{
EWstraight_Green=1;
EWstraight_Yellow=0;
EWstraight_Red=0;
}
void EW_STOPstraight() //EW直行紅燈
{
EWstraight_Green=0;
EWstraight_Yellow=0;
EWstraight_Red=1;
}
void SN_GOturnright() //SN右轉(zhuǎn)綠燈
{
SNright_Green=1;
SNturn_Yellow=0;
SNright_Red=0;
}
void SN_STOPturnright() //SN右轉(zhuǎn)紅燈
{
SNright_Green=0;
SNturn_Yellow=0;
SNright_Red=1;
}
void SN_GOturnleft() //SN左轉(zhuǎn)綠燈
{
SNleft_Green=1;
SNturn_Yellow=0;
SNleft_Red=0;
}
void SN_STOPturnleft() //SN左轉(zhuǎn)紅燈
{
SNleft_Green=0;
SNturn_Yellow=0;
SNleft_Red=1;
}
void EW_GOturnright() //EW右轉(zhuǎn)綠燈
{
EWright_Green=1;
EWturn_Yellow=0;
EWright_Red=0;
}
void EW_STOPturnright() //EW右轉(zhuǎn)紅燈
{
EWright_Green=0;
EWturn_Yellow=0;
EWright_Red=1;
}
void EW_GOturnleft() //EW左轉(zhuǎn)綠燈
{
EWleft_Green=1;
EWturn_Yellow=0;
EWleft_Red=0;
}
void EW_STOPturnleft() //EW左轉(zhuǎn)紅燈
{
EWleft_Green=0;
EWturn_Yellow=0;
EWleft_Red=1;
}
4.? 仿真proteus8.6
? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問(wèn)題,該仿真是通過(guò)proteus8.6導(dǎo)出的,所以請(qǐng)盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
初始界面:
東西通行:
南北通行:
5.? 設(shè)計(jì)報(bào)告
設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說(shuō)明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【M03】百度網(wǎng)盤下載鏈接
更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集