|
//-----------------------------------------------------------------
// 名稱: LED模擬交通燈
//-----------------------------------------------------------------
// 說明: 東西向綠燈亮若干秒后,黃燈閃爍,閃爍5次后亮紅燈,
// 紅燈亮后,南北向由紅燈變為綠燈,若干秒后南北向黃燈閃爍,
// 閃爍5次后亮紅燈,東西向綠燈亮,如此往復.
// 本例將時間設得較短是為了調試的時候能較快的觀察到運行效果.
//
//-----------------------------------------------------------------
#include <reg51.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit RED_A = P0^0; //東西向指示燈
sbit YELLOW_A = P0^1;
sbit GREEN_A = P0^2;
sbit RED_B = P0^3; //南北向指示燈
sbit YELLOW_B = P0^4;
sbit GREEN_B = P0^5;
//閃爍次數及操作類型變量定義
INT8U Flash_Count = 0, Operation_Type = 1;
//-----------------------------------------------------------------
// 延時函數
//-----------------------------------------------------------------
void delay_ms(INT16U x)
{
INT8U t; while(x--) for(t = 0; t < 120; t++);
}
//-----------------------------------------------------------------
// 交通燈切換子程序
//-----------------------------------------------------------------
void Traffic_Light()
{
switch (Operation_Type)
{
case 1://東西向綠燈與南北向紅燈亮
RED_A = 1; YELLOW_A = 1; GREEN_A = 0;
RED_B = 0; YELLOW_B = 1; GREEN_B = 1;
delay_ms(5000); //??5?
Operation_Type = 2; //??case2
break;
case 2://東西向黃燈開始閃爍,綠燈關閉
delay_ms(1000);
YELLOW_A = ~YELLOW_A; GREEN_A = 1;
if(++Flash_Count != 6) return;
Flash_Count = 0;
Operation_Type = 3;
break;
case 3://東西向紅燈與南北向綠燈亮
RED_A = 0; YELLOW_A = 1; GREEN_A = 1;
RED_B = 1; YELLOW_B = 1; GREEN_B = 0;
delay_ms(5000); //??5?
Operation_Type = 4; //??case2
break;
case 4://南北向黃燈開始閃爍
delay_ms(1000);
YELLOW_B = ~YELLOW_B; GREEN_B = 1;
if(++Flash_Count != 6) return;
Flash_Count = 0;
Operation_Type = 1;
break;
}
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
while(1)
Traffic_Light();
}
|
-
-
04 LED模擬交通燈.rar
2020-10-31 17:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
48.99 KB, 下載次數: 4, 下載積分: 黑幣 -5
|