功能
1、本設計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機
2、數(shù)碼管倒計時顯示時間。
3、東西和南北方向各有兩個數(shù)碼管,分別顯示時間,東西和南北的時間是不一樣的哦,要相差黃燈的時間才是正確的。
4、可以分別設置主干道和支干道的通行時間。
5、有緊急模式,可以特種車輛優(yōu)先通行或交通事故應急處理。
操作說明
按鍵依次功能:黃燈長亮(深夜模式)、紅燈長亮(禁行)、確定調時時間、時間加、時間減、切換調時方向(東西和南北均可以分別設置通行時間)。單獨的是復位按鍵。
參考論文

原理圖

程序源代碼
//主程序
void main()
{
TMOD=0X11; //定時器設置
TH1=0X3C;
TL1=0XB0;
TH0=0X3C; //定時器0置初值 0.05S
TL0=0XB0;
EA=1; //開總中斷
ET0=1; //定時器0中斷開啟
ET1=1; //定時器1中斷開啟
TR0=1; //啟動定時0
TR1=0; //關閉定時1
logo(); //開機初始化
P2=0Xc3; // 開始默認狀態(tài),東西綠燈,南北黃燈
sec_nb=sec_dx+5; //默認南北通行時間比東西多5秒
while(1) //主循環(huán)
{
key(); //調用按鍵掃描程序
display(); //調用顯示程序
}
}
//函數(shù)的定義部分
void key(void) //按鍵掃描子程序
{
if(k1!=1) //當K1(時間加)按下時
{
display(); //調用顯示,用于延時消抖
if(k1!=1) //如果確定按下
{
TR0=0; //關定時器
shanruo=0; //閃爍標志位關
P2=0x00; //滅顯示
TR1=0; //啟動定時1
if(set==0) //設置鍵按下
set_timedx++; //南北加1S
else
set_timenb++; //東西加1S
if(set_timenb==100)
set_timenb=1;
if( set_timedx==100)
set_timedx=1; //加到100置1
sec_nb=set_timenb ; //設置的數(shù)值賦給東西南北
sec_dx=set_timedx;
do
{
display(); //調用顯示,用于延時
}
while(k1!=1); //等待按鍵釋放
}
}
if(k2!=1) //當K2(時間減)按鍵按下時
{
display(); //調用顯示,用于延時消抖
if(k2!=1) //如果確定按下
{
TR0=0; //關定時器0
shanruo=0; //閃爍標志位關
P2=0x00; //滅顯示
TR1=0; //關定時器1
if(set==0)
set_timedx--; //南北減1S
else
set_timenb--; //東西減1S
if(set_timenb==0)
set_timenb=99;
if( set_timedx==0 )
set_timedx=99; //減到1重置99
sec_nb=set_timenb ; //設置的數(shù)值賦給東西南北
sec_dx=set_timedx;
do
{
display(); //調用顯示,用于延時
}
while(k2!=1); //等待按鍵釋放
}
}
if(k3!=1) //當K3(確認)鍵按下時
{
display(); //調用顯示,用于延時消抖
if(k3!=1) //如果確定按下
{
TR0=1; //啟動定時器0
sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數(shù)值
sec_dx=set_timedx; //顯示設置過的時間
TR1=0; //關定時器1
if(set==0) //時間倒時到0時
{
P2=0X00; //滅顯示
Green_dx=1; //東西綠燈亮
Red_nb=1; //南北紅燈亮
sec_nb=sec_dx+5; //回到初值
}
else
{
P2=0x00; //南北綠燈,東西紅燈
Green_nb=1;
Red_dx=1;
sec_dx=sec_nb+5;
}
}
}
if(k4!=1) //當K4(切換)鍵按下
{
display(); //調用顯示,用于延時消抖
if(k4!=1) //如果確定按下
{
TR0=0; //關定時器0
set=!set; //取反set標志位,以切換調節(jié)方向
TR1=0; //關定時器1
dx_nb=set;
do
{
display(); //調用顯示,用于延時
}
while(k4!=1); //等待按鍵釋放
}
}
if(k5!=1) //當K5(禁止)鍵按下時
{
display(); //調用顯示,用于延時消抖
if(k5!=1) //如果確定按下
{
TR0=0; //關定時器
P2=0x00; //滅顯示
Red_dx=1;
Red_nb=1; //全部置紅燈
TR1=0;
sec_dx=00; //四個方向的時間都為00
sec_nb=00;
do
{
display(); //調用顯示,用于延時
}
while(k5!=1); //等待按鍵釋放
}
}
if(k6!=1) //當K6(夜間模式)按下
{
display(); //調用顯示,用于延時消抖
if(k6!=1) //如果確定按下
{
TR0=0; //關定時器
P2=0x00;
TR1=1;
sec_dx=00; //四個方向的時間都為00
sec_nb=00;
do
{
display(); //調用顯示,用于延時
}
while(k6!=1); //等待按鍵釋放
}
}
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
單片機
+關注
關注
6078文章
45533瀏覽量
672224 -
STC89C52
+關注
關注
41文章
330瀏覽量
84653 -
數(shù)碼管
+關注
關注
32文章
1894瀏覽量
94253 -
智能交通燈
+關注
關注
0文章
15瀏覽量
9684
原文標題:【畢業(yè)設計004】-基于STC89C52的智能交通燈(程序、原理圖、視頻講解、操作說明、參考lunwen)
文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
熱點推薦
怎樣去設計基于STC89C52單片機的霓虹燈
基于STC89C52單片機的霓虹燈1、設計要求使用PWM驅動8個LED燈 人眼不能觀察到燈光全滅 燈光要有動畫效果2、設計概述 本實驗所用芯片為ST
發(fā)表于 12-02 07:03
基于單片機STC89c52 GSM的智能家居報警系統(tǒng)設計
基于單片機STC89c52 GSM的智能家居報警系統(tǒng)設計,分享給大家。
發(fā)表于 05-05 08:40
?82次下載
STC89C52單片機
STC89C52單片機,STC89C52STC89C52看到濤哥這篇文章了,紀念一下還在搞嵌入式的我們!硬件實物圖實物抽象化的圖為:這個STC89C52名字是什么意思呢?
發(fā)表于 11-23 17:06
?111次下載
STC89C52_51單片機_例程4_交通燈_C語言代碼
STC89C52_51單片機_例程3_交通燈_C語言代碼代碼及文件下載鏈接審核通過后掛上交通燈需要設置一個flag標志位,當?shù)竭_1s時調用d
發(fā)表于 11-23 17:06
?22次下載
基于STC89C52單片機的霓虹燈
基于STC89C52單片機的霓虹燈1、設計要求 使用PWM驅動8個LED燈 人眼不能觀察到燈光全滅 燈光要有動畫效果2、設計概述 本實驗所用芯片為
發(fā)表于 11-23 17:21
?29次下載
STC89C52單片機器件手冊
STC89C52系列單片機的內部結構框圖如下圖所示。STC89C52單片機中包含中央處理器(CPU)、程序存儲器(Flash)、數(shù)據存儲器(SRAM)、定時/計數(shù)器、UART串口、I/
發(fā)表于 09-05 10:41
?10次下載
基于STC89C52單片機的智能交通燈設計
評論