功能
1、本設(shè)計基于STC89C51/52(與AT89S51/52、AT89C51/52通用,可任選)單片機
2、數(shù)碼管倒計時顯示時間。
3、東西和南北方向各有兩個數(shù)碼管,分別顯示時間,東西和南北的時間是不一樣的哦,要相差黃燈的時間才是正確的。
4、可以分別設(shè)置主干道和支干道的通行時間。
5、有緊急模式,可以特種車輛優(yōu)先通行或交通事故應(yīng)急處理。
操作說明
按鍵依次功能:黃燈長亮(深夜模式)、紅燈長亮(禁行)、確定調(diào)時時間、時間加、時間減、切換調(diào)時方向(東西和南北均可以分別設(shè)置通行時間)。單獨的是復(fù)位按鍵。
參考論文
原理圖
程序源代碼
//主程序 void main() { TMOD=0X11; //定時器設(shè)置 TH1=0X3C; TL1=0XB0; TH0=0X3C; //定時器0置初值 0.05S TL0=0XB0; EA=1; //開總中斷 ET0=1; //定時器0中斷開啟 ET1=1; //定時器1中斷開啟 TR0=1; //啟動定時0 TR1=0; //關(guān)閉定時1 logo(); //開機初始化 P2=0Xc3; // 開始默認狀態(tài),東西綠燈,南北黃燈 sec_nb=sec_dx+5; //默認南北通行時間比東西多5秒 while(1) //主循環(huán) { key(); //調(diào)用按鍵掃描程序 display(); //調(diào)用顯示程序 } } //函數(shù)的定義部分 void key(void) //按鍵掃描子程序 { if(k1!=1) //當K1(時間加)按下時 { display(); //調(diào)用顯示,用于延時消抖 if(k1!=1) //如果確定按下 { TR0=0; //關(guān)定時器 shanruo=0; //閃爍標志位關(guān) P2=0x00; //滅顯示 TR1=0; //啟動定時1 if(set==0) //設(shè)置鍵按下 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è)置的數(shù)值賦給東西南北 sec_dx=set_timedx; do { display(); //調(diào)用顯示,用于延時 } while(k1!=1); //等待按鍵釋放 } } if(k2!=1) //當K2(時間減)按鍵按下時 { display(); //調(diào)用顯示,用于延時消抖 if(k2!=1) //如果確定按下 { TR0=0; //關(guān)定時器0 shanruo=0; //閃爍標志位關(guān) P2=0x00; //滅顯示 TR1=0; //關(guān)定時器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è)置的數(shù)值賦給東西南北 sec_dx=set_timedx; do { display(); //調(diào)用顯示,用于延時 } while(k2!=1); //等待按鍵釋放 } } if(k3!=1) //當K3(確認)鍵按下時 { display(); //調(diào)用顯示,用于延時消抖 if(k3!=1) //如果確定按下 { TR0=1; //啟動定時器0 sec_nb=set_timenb; //從中斷回復(fù),仍顯示設(shè)置過的數(shù)值 sec_dx=set_timedx; //顯示設(shè)置過的時間 TR1=0; //關(guān)定時器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(); //調(diào)用顯示,用于延時消抖 if(k4!=1) //如果確定按下 { TR0=0; //關(guān)定時器0 set=!set; //取反set標志位,以切換調(diào)節(jié)方向 TR1=0; //關(guān)定時器1 dx_nb=set; do { display(); //調(diào)用顯示,用于延時 } while(k4!=1); //等待按鍵釋放 } } if(k5!=1) //當K5(禁止)鍵按下時 { display(); //調(diào)用顯示,用于延時消抖 if(k5!=1) //如果確定按下 { TR0=0; //關(guān)定時器 P2=0x00; //滅顯示 Red_dx=1; Red_nb=1; //全部置紅燈 TR1=0; sec_dx=00; //四個方向的時間都為00 sec_nb=00; do { display(); //調(diào)用顯示,用于延時 } while(k5!=1); //等待按鍵釋放 } } if(k6!=1) //當K6(夜間模式)按下 { display(); //調(diào)用顯示,用于延時消抖 if(k6!=1) //如果確定按下 { TR0=0; //關(guān)定時器 P2=0x00; TR1=1; sec_dx=00; //四個方向的時間都為00 sec_nb=00; do { display(); //調(diào)用顯示,用于延時 } while(k6!=1); //等待按鍵釋放 } } }
審核編輯:湯梓紅
-
單片機
+關(guān)注
關(guān)注
6032文章
44525瀏覽量
633249 -
STC89C52
+關(guān)注
關(guān)注
41文章
330瀏覽量
82011 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1876瀏覽量
90969 -
智能交通燈
+關(guān)注
關(guān)注
0文章
15瀏覽量
9573
原文標題:【畢業(yè)設(shè)計004】-基于STC89C52的智能交通燈(程序、原理圖、視頻講解、操作說明、參考lunwen)
文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論