//-----------------------------------------------------------------
// 名称: LED模拟交通灯
//-----------------------------------------------------------------
// 说明: 东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯,
// 红灯亮后,南北向由红灯变为绿灯,2秒后南北向黄灯闪烁,
// 闪烁5次后亮红灯,东西向绿灯亮,如此往复.
// 本例将切换时间设得较短,以便快速观察运行效果.
//
//-----------------------------------------------------------------
#include <pic.h>
__CONFIG(0x079);
#define uchar unsigned char
#define uint unsigned int
#define RED_EW_ON() RC0 = 0 //东西向指示灯开
#define YELLOW_EW_ON() RC1 = 0
#define GREEN_EW_ON() RC2 = 0
#define RED_EW_OFF() RC0 = 1 //东西向指示灯关
#define YELLOW_EW_OFF() RC1 = 1
#define GREEN_EW_OFF() RC2 = 1
#define RED_SN_ON() RC3 = 0 //南北向指示灯开
#define YELLOW_SN_ON() RC4 = 0
#define GREEN_SN_ON() RC5 = 0
#define RED_SN_OFF() RC3 = 1 //南北向指示灯关
#define YELLOW_SN_OFF() RC4 = 1
#define GREEN_SN_OFF() RC5 = 1
#define YELLOW_EW_BLINK() RC1 = ~RC1 //东西向黄灯闪烁
#define YELLOW_SN_BLINK() RC4 = ~RC4 //南北向黄灯闪烁
//-----------------------------------------------------------------
// 延时函数
//-----------------------------------------------------------------
void DELAY(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
TRISC=0X00;
PORTC=0XFF;
uchar Flash_Count = 0, I =2; //闪烁次数,操作类型变量
uchar a;
while(1)
switch (I)
{
case 1: //东西向绿灯与南北向红灯亮
PORTC=0X33;
DELAY(400);
I=2;
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
for(a=0;a<7;a++)
{
PORTC=0X35;
DELAY(300);
PORTC=0X37;
DELAY(300);
}
I=1;
break;
// case 3: //东西向红灯与南北向绿灯亮
// RED_EW_ON();
// YELLOW_EW_OFF();
// GREEN_EW_OFF();
// RED_SN_OFF();
// YELLOW_SN_OFF();
// GREEN_SN_ON();
// DELAY(40);
// I=4;
// break;
// case 4: //南北向黄灯开始闪烁
// DELAY(20);
// YELLOW_SN_BLINK();
// GREEN_SN_OFF();
// if(++Flash_Count!=10)return;
// Flash_Count=0;
// I=1;
// break;
default: //缺省值,关闭所有LED
PORTC=0XFF;
}
}
在case 2这部分有问题吗? |