仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (119.67 KB, 下載次數: 70)
下載附件
2022-4-23 02:14 上傳
交通信號燈.png (51.65 KB, 下載次數: 71)
下載附件
2022-4-17 09:02 上傳
單片機源程序如下:
- /*
- *模擬交通燈*
- */
- #include <reg51.h>
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- void delay(uint16 x)
- {
- uint16 i,j;
- for(i = x; i > 0; i --)
- for(j = 114; j > 0; j --);
- }
- #define RED_EW_ON() P0 &= ~0x01 //東西方向指示燈開
- #define YELLOW_EW_ON() P0 &= ~0x02
- #define GREEN_EW_ON() P0 &= ~0x04
- #define RED_EW_OFF() P0 |= 0x01 //東西方向指示燈關
- #define YELLOW_EW_OFF() P0 |= 0x02
- #define GREEN_EW_OFF() P0 |= 0x04
- #define RED_SN_ON() P0 &= ~0x08 //南北方向指示燈開 0000100 1111011
- #define YELLOW_SN_ON() P0 &= ~0x10
- #define GREEN_SN_ON() P0 &= ~0x20
- #define RED_SN_OFF() P0 |= 0x08 //南北方向指示燈關
- #define YELLOW_SN_OFF() P0 |= 0x10
- #define GREEN_SN_OFF() P0 |= 0x20
- #define YELLOW_EW_BLINK() P0 ^= 0x02 //東西方向黃燈閃爍
- #define YELLOW_SN_BLINK() P0 ^= 0x10 //南北方向黃燈閃爍
- uint8 Flash_Count = 0, Operation_Type = 1; //閃爍次數,操作類型變量
- void Traffic_Light() //交通燈切換子程序
- {
- switch (Operation_Type)
- {
- case 1://東西方向綠燈與南北方向紅燈亮
- RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();
- RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();
- delay(2000); //延時
- Operation_Type = 2; //下一個操作
- break;
- case 2://東西方向黃燈開始閃爍,綠燈關閉
- delay(120);
- YELLOW_EW_BLINK();
- GREEN_EW_OFF();
- //閃爍5次
- if( ++Flash_Count != 10) return;
- Flash_Count = 0;
- Operation_Type = 3; //下一個操作
- break;
- case 3://東西方向紅燈與南北方向綠燈亮
- RED_EW_ON(); YELLOW_EW_OFF(); GREEN_EW_OFF();
- RED_SN_OFF(); YELLOW_SN_OFF(); GREEN_SN_ON();
- //南北方向綠燈亮若干秒后切換
- delay(2000);
- Operation_Type = 4; //下一個操作
- break;
- case 4://南北方向紅燈開始閃爍
- delay(120);
- YELLOW_SN_BLINK();
- GREEN_SN_OFF();
- //閃爍5次
- if( ++ Flash_Count != 10) return;
- Flash_Count = 0;
- Operation_Type = 1; //回到第一種操作
- }
- }
- //主程序
- int main()
- {
- while(1) Traffic_Light();
- }
復制代碼
所有資料51hei附件下載:
模擬交通燈.7z
(70.87 KB, 下載次數: 29)
2022-4-23 02:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|