分享一個已經制作成功的C51單片機實現的十字路口交通信號燈的資料下載,包含源碼+proteus仿真
實物圖:
0.png (570.2 KB, 下載次數: 70)
下載附件
2017-10-13 16:48 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (27.25 KB, 下載次數: 85)
下載附件
2017-10-13 16:48 上傳
0.png (43 KB, 下載次數: 78)
下載附件
2017-10-13 16:48 上傳
單片機源程序如下:
- /*****************************************************
- * 王瑾畢設-交通燈
- *
- *****************************************************/
- #include<include.h>
- sbit NS_GRE = P2^5;
- sbit NS_YEL = P2^4;
- sbit NS_RED = P2^3;
- sbit EW_GRE = P2^2;
- sbit EW_YEL = P2^1;
- sbit EW_RED = P2^0;
- uint8 EW_Timer = unused8; //東西方向紅燈定時器
- uint8 NS_Timer = unused8; //南北方向紅燈定時器
- uint8 YEL_Timer = unused8; //黃燈 5s定時器
- int main(void)
- {
- Timer_Init(); //定時器初始化
- INT0_Init(); //外部中斷初始化
- EA=1; //打開全局中斷
-
- NS_GRE = OFF; //所有的燈都滅
- NS_YEL = OFF;
- NS_RED = OFF;
- EW_GRE = OFF;
- EW_YEL = OFF;
- EW_RED = OFF;
- P3 = 0xFF; //所有顯示滅
- //先讓東西方向紅燈亮 南北方向通行
- EW_Timer = EWTime_Count;//東西方向開始計時
- while(1)
- {
-
- if((EW_Timer != unused8) && (EW_Timer != 0)){ //東西方向做紅燈倒計時
- display1(EW_Timer/10, EW_Timer%10); //東西方向顯示時間 南北方向不顯示
- EW_RED_ON(); //東西方向保持紅燈
- NS_GRE_ON(); //南北方向保持綠燈
- }
- else if((EW_Timer != unused8) && (EW_Timer == 0) && (YEL_Timer == unused8)){//東西方向紅燈計時到 東西方向保持紅燈 南北方向變黃燈 開始黃燈5s計時
- EW_RED_ON(); //東西方向紅燈
- NS_YEL_ON(); //南北方向黃燈
- YEL_Timer = YELTime_Count; //5s計時
- }
- if((EW_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
- display1(YEL_Timer/10, YEL_Timer%10); //東西方向顯示時間 南北方向不顯示
- }
- if((EW_Timer != unused8) && (YEL_Timer == 0)){ //東西方向紅-南北方向黃燈5s計時到 東西紅燈定時器關 黃燈定時器關 南北紅燈 東西綠燈 南北計時器開
- EW_Timer = unused8; //東西紅燈定時器關
- YEL_Timer = unused8; //黃燈定時器關
- NS_RED_ON(); //南北變紅燈
- EW_GRE_ON(); //東西變綠燈
- NS_Timer = NSTime_Count; //南北紅燈定時器開
- }
- if((NS_Timer != unused8) && (NS_Timer != 0)){ //南北紅燈定時器正在計時
- display2(NS_Timer/10, NS_Timer%10); //南北方向顯示時間 東西方向不顯示
- EW_GRE_ON(); //東西保持綠燈
- NS_RED_ON(); //南北保持紅燈
- }
- else if((NS_Timer != unused8) && (NS_Timer == 0) && (YEL_Timer == unused8)){ //南北方向紅燈計時到 南北方向保持紅燈 東西方向變黃燈 開始黃燈5s計時
- NS_RED_ON(); //南北方向保持紅燈
- EW_YEL_ON(); //東西方向變黃燈
- YEL_Timer = YELTime_Count; //5s計時
- }
- if((NS_Timer != unused8) && (YEL_Timer != unused8) && (YEL_Timer != 0)){
- display2(YEL_Timer/10, YEL_Timer%10); //南北方向顯示時間 東西方向不顯示
- }
- if((NS_Timer != unused8) && (YEL_Timer == 0)){ //南北方向紅-東西方向黃燈5s計時到 南北方向定時器關 黃燈定時器關 東西方向變紅燈 南北方向變綠燈 東西方向紅燈計時器開始計時
- NS_Timer = unused8;
- YEL_Timer = unused8;
- EW_RED_ON(); //東西方向變紅燈
- NS_GRE_ON(); //南北方向變綠燈
- EW_Timer = EWTime_Count; //東西方向開始計時
- }
- if(Flag_Key == 1){ //如果急停按鍵按下 則全紅燈 顯示滅
- P3 = 0xFF; //所有顯示滅
- EW_RED_ON(); //東西方向紅燈
- NS_RED_ON(); //南北方向紅燈
-
- EW_Timer = unused8; //關閉所有定時器
- NS_Timer = unused8;
- YEL_Timer = unused8;
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于AT89C51的十字路口交通燈仿真.zip
(1.31 MB, 下載次數: 279)
2017-10-13 10:58 上傳
點擊文件名下載附件
C51十字路口交通信號燈單片機資料 源碼+仿真 下載積分: 黑幣 -5
|