说明: 东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁, 闪烁5次后亮红灯,东西向绿灯亮,如此往复. 本例将时间设得较短是为了调试的时候能较快的观察到运行结果.
代码块:
#include
#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);
Operation_Type=2;
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
for(; Flash_Count<6; Flash_Count++)
{
RED_A=1; YELLOW_A=~YELLOW_A; GREEN_A=1;
delay_ms(300);
}
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);
Operation_Type=4;
break;
case 4: //南北向黄灯开始闪烁
for(; Flash_Count<6; Flash_Count++)
{
RED_B=1; YELLOW_B=~YELLOW_B; GREEN_B=1;
delay_ms(300);
}
Operation_Type=1;
break;
}
}
//------------------------------------------
//主程序
//------------------------------------------
void main()
{
while(1){
Traffic_Light();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)