功能
1、本設計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機
2、數碼管倒計時顯示時間。
3、東西和南北方向各有兩個數碼管,分別顯示時間,東西和南北的時間是不一樣的哦,要相差黃燈的時間才是正確的。
4、可以分別設置主干道和支干道的通行時間。
5、有緊急模式,可以特種車輛優先通行或交通事故應急處理。
操作說明
按鍵依次功能:黃燈長亮(深夜模式)、紅燈長亮(禁行)、確定調時時間、時間加、時間減、切換調時方向(東西和南北均可以分別設置通行時間)。單獨的是復位按鍵。
參考論文
原理圖
程序源代碼
//主程序 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; // 開始默認狀態,東西綠燈,南北黃燈 sec_nb=sec_dx+5; //默認南北通行時間比東西多5秒 while(1) //主循環 { key(); //調用按鍵掃描程序 display(); //調用顯示程序 } } //函數的定義部分 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 ; //設置的數值賦給東西南北 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 ; //設置的數值賦給東西南北 sec_dx=set_timedx; do { display(); //調用顯示,用于延時 } while(k2!=1); //等待按鍵釋放 } } if(k3!=1) //當K3(確認)鍵按下時 { display(); //調用顯示,用于延時消抖 if(k3!=1) //如果確定按下 { TR0=1; //啟動定時器0 sec_nb=set_timenb; //從中斷回復,仍顯示設置過的數值 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標志位,以切換調節方向 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); //等待按鍵釋放 } } }
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6040文章
44592瀏覽量
636857 -
STC89C52
+關注
關注
41文章
330瀏覽量
82133 -
數碼管
+關注
關注
32文章
1883瀏覽量
91280 -
智能交通燈
+關注
關注
0文章
15瀏覽量
9601
原文標題:【畢業設計004】-基于STC89C52的智能交通燈(程序、原理圖、視頻講解、操作說明、參考lunwen)
文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
怎樣去設計基于STC89C52單片機的霓虹燈
基于STC89C52單片機的霓虹燈1、設計要求使用PWM驅動8個LED燈 人眼不能觀察到燈光全滅 燈光要有動畫效果2、設計概述 本實驗所用芯片為ST
發表于 12-02 07:03
STC89C52單片機
STC89C52單片機,STC89C52STC89C52看到濤哥這篇文章了,紀念一下還在搞嵌入式的我們!硬件實物圖實物抽象化的圖為:這個STC89C52名字是什么意思呢?
發表于 11-23 17:06
?111次下載
STC89C52_51單片機_例程4_交通燈_C語言代碼
STC89C52_51單片機_例程3_交通燈_C語言代碼代碼及文件下載鏈接審核通過后掛上交通燈需要設置一個flag標志位,當到達1s時調用d
發表于 11-23 17:06
?22次下載
基于STC89C52單片機的霓虹燈
基于STC89C52單片機的霓虹燈1、設計要求 使用PWM驅動8個LED燈 人眼不能觀察到燈光全滅 燈光要有動畫效果2、設計概述 本實驗所用芯片為
發表于 11-23 17:21
?29次下載
STC89C52單片機器件手冊
STC89C52系列單片機的內部結構框圖如下圖所示。STC89C52單片機中包含中央處理器(CPU)、程序存儲器(Flash)、數據存儲器(SRAM)、定時/計數器、UART串口、I/
發表于 09-05 10:41
?8次下載
評論