⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diguser.c

📁 1、LED板中每个方向提供四组交通LED灯(包括左转、直行、右转、人行道四组)
💻 C
📖 第 1 页 / 共 2 页
字号:
		if(cn == 1)										//0.5s
		{
			DIGOff(SOUTH_D);							//南边路口数码管熄灭
			DIGOff(WEST_D);								//西边路口数码管熄灭
			LEDOff(SOUTH_L,LeftYlw);					//所有点亮的黄灯熄灭
			LEDOff(SOUTH_L,StrtYlw);
			LEDOff(SOUTH_L+1,RigtYlw);
			LEDOff(SOUTH_L+1,MansYlw);
			LEDOff(WEST_L,LeftYlw);
			LEDOff(WEST_L,StrtYlw);
			LEDOff(WEST_L+1,MansYlw);
			LEDOff(NORTH_L+1,RigtYlw);
		}
		if(cn == 2)										//1s,四个路口数码管倒计时并显示,被熄灭的黄灯点亮
		{
			cn = 0;
			Enum--;
			Snum--;
			Wnum--;
			Nnum--;
			
			DIGShow(EAST_D,Enum);
			DIGShow(SOUTH_D,Snum);
			DIGShow(WEST_D,Wnum);
			DIGShow(NORTH_D,Nnum);
			
			LEDShow(EAST_L,LeftRed,StrtRed,RigtGrn,MansRed);
			LEDShow(SOUTH_L,LeftYlw,StrtYlw,RigtYlw,MansYlw);
			LEDShow(WEST_L,LeftYlw,StrtYlw,RigtRed,MansYlw);
			LEDShow(NORTH_L,LeftRed,StrtRed,RigtYlw,MansRed);

			if(Snum == 0xffff)							//如果南边路口倒计时到-1(由于要显示00)
			{
				Snum = max;								//南边路口的倒计时时间设置为max
				DirFlag = 0;							//清状态标志
			}				
		}
		*P_Watchdog_Clear = 0x0001;
	}
}
//===========================================================================================================
//函数名:	void WestSTrough(void)
//功能描述:	西边路口车辆直行通行函数,该函数运行min秒,WestSTrough是(West Straight Trough的缩写)
//			该函数实现允许西边路口车辆直行、左拐和人行,东边路口车辆右拐,南边路口车辆右拐;禁止其他通行的功能
//入口参数:	无
//出口参数:	无
//===========================================================================================================
void WestSTrough(void)
{
//---------------------------------------------------------------------------------------------
//下面为西边路口直行、左拐、人行道绿灯亮,东边和南边路口右拐路灯亮,其他红灯亮状态
//---------------------------------------------------------------------------------------------		
	DIGShow(EAST_D,Enum);								//东边路口数码管显示
	DIGShow(SOUTH_D,Snum);								//南边路口数码管显示
	DIGShow(WEST_D,Wnum);								//西边路口数码管显示
	DIGShow(NORTH_D,Nnum);								//北边路口数码管显示
	
	LEDShow(EAST_L,LeftRed,StrtRed,RigtGrn,MansRed);	//东边路口左拐、直行、人行道红灯亮,右拐绿灯亮
	LEDShow(SOUTH_L,LeftRed,StrtRed,RigtGrn,MansRed);	//南边路口左拐、直行、人行道红灯亮,右拐绿灯亮	
	LEDShow(WEST_L,LeftGrn,StrtGrn,RigtRed,MansGrn);	//西边路口左拐、直行、人行道绿灯亮,右拐红灯亮
	LEDShow(NORTH_L,LeftRed,StrtRed,RigtRed,MansRed);	//北边路口全部红灯亮

	while(DirFlag==WEST_G)								//如果是WEST_G状态,循环,该状态持续21s
	{
		if(cn == 2)										//四个路口数码管倒计时并显示
		{
			cn = 0;
			Enum--;
			Snum--;
			Wnum--;
			Nnum--;
			
			DIGShow(EAST_D,Enum);
			DIGShow(SOUTH_D,Snum);
			DIGShow(WEST_D,Wnum);
			DIGShow(NORTH_D,Nnum);
			
			if(Wnum==Ylwtime)							//如果西边倒计时到设定黄灯时间
			{
				DirFlag = WEST_Y;						//改变为下一个状态,WEST_Y状态
			}
		}
		*P_Watchdog_Clear = 0x0001;
	}
//---------------------------------------------------------------------------------------------
//下面为西边路口所有黄灯闪烁,北边路口左拐、直行、人行道黄灯闪烁,东边路口右拐黄灯闪烁状态
//---------------------------------------------------------------------------------------------	
	LEDShow(EAST_L,LeftRed,StrtRed,RigtYlw,MansRed);	//东边路口左拐、直行、人行道红灯亮,右拐黄灯亮
	LEDShow(SOUTH_L,LeftRed,StrtRed,RigtGrn,MansRed);	//南边路口左拐、直行、人行道红灯亮,右拐绿灯亮
	LEDShow(WEST_L,LeftYlw,StrtYlw,RigtYlw,MansYlw);	//西边路口全部黄灯亮
	LEDShow(NORTH_L,LeftYlw,StrtYlw,RigtRed,MansYlw);	//北边路口左拐、直行、人行道黄灯亮,右拐红灯亮

	while(DirFlag==WEST_Y)								//WEST_Y状态持续4s
	{
		if(cn == 1)										//0.5s
		{
			DIGOff(WEST_D);								//西边路口数码管熄灭
			DIGOff(NORTH_D);							//北边路口数码管熄灭
			LEDOff(WEST_L,LeftYlw);						//所有点亮的黄灯熄灭
			LEDOff(WEST_L,StrtYlw);
			LEDOff(WEST_L+1,RigtYlw);
			LEDOff(WEST_L+1,MansYlw);
			LEDOff(NORTH_L,LeftYlw);
			LEDOff(NORTH_L,StrtYlw);
			LEDOff(NORTH_L+1,MansYlw);
			LEDOff(EAST_L+1,RigtYlw);
		}
		if(cn == 2)										//1s,四个路口数码管倒计时并显示,被熄灭的黄灯点亮
		{
			cn = 0;
			Enum--;
			Snum--;
			Wnum--;
			Nnum--;
			
			DIGShow(EAST_D,Enum);
			DIGShow(SOUTH_D,Snum);
			DIGShow(WEST_D,Wnum);
			DIGShow(NORTH_D,Nnum);
			
			LEDShow(EAST_L,LeftRed,StrtRed,RigtYlw,MansRed);
			LEDShow(SOUTH_L,LeftRed,StrtRed,RigtGrn,MansRed);
			LEDShow(WEST_L,LeftYlw,StrtYlw,RigtYlw,MansYlw);
			LEDShow(NORTH_L,LeftYlw,StrtYlw,RigtRed,MansYlw);

			if(Wnum == 0xffff)							//如果西边路口倒计时到-1(由于要显示00)
			{
				Wnum = max;								//西边路口的倒计时时间设置为max
				DirFlag = 0;							//清状态标志
			}			
		}
		*P_Watchdog_Clear = 0x0001;
	}
}
//===========================================================================================================
//函数名:	void NorthSTrough(void)
//功能描述:	北向直行通行函数
//			该函数实现允许北边路口车辆直行、左拐和人行,南边路口车辆右拐,西边路口车辆右拐;禁止其他通行的功能
//入口参数:	无
//出口参数:	无
//===========================================================================================================
void NorthSTrough(void)
{
//---------------------------------------------------------------------------------------------
//下面为北边路口直行、左拐、人行道绿灯亮,南边和西边路口右拐路灯亮,其他红灯亮状态
//---------------------------------------------------------------------------------------------		
	DIGShow(EAST_D,Enum);								//东边路口数码管显示
	DIGShow(SOUTH_D,Snum);								//南边路口数码管显示
	DIGShow(WEST_D,Wnum);								//西边路口数码管显示
	DIGShow(NORTH_D,Nnum);								//北边路口数码管显示
	
	LEDShow(EAST_L,LeftRed,StrtRed,RigtRed,MansRed);	//东边路口全部红灯亮
	LEDShow(SOUTH_L,LeftRed,StrtRed,RigtGrn,MansRed);	//南边路口左拐、直行、人行道红灯亮,右拐绿灯亮
	LEDShow(WEST_L,LeftRed,StrtRed,RigtGrn,MansRed);	//西边路口左拐、直行、人行道红灯亮,右拐绿灯亮
	LEDShow(NORTH_L,LeftGrn,StrtGrn,RigtRed,MansGrn);	//北边路口左拐、直行、人行道绿灯亮,右拐红灯亮

	while(DirFlag==NORTH_G)								//如果是NORTH_G状态,循环,该状态持续21s
	{
		if(cn == 2)										//四个路口数码管倒计时并显示
		{
			cn = 0;
			Enum--;
			Snum--;
			Wnum--;
			Nnum--;
			
			DIGShow(EAST_D,Enum);
			DIGShow(SOUTH_D,Snum);
			DIGShow(WEST_D,Wnum);
			DIGShow(NORTH_D,Nnum);
			
			if(Nnum==Ylwtime)							//如果北边倒计时到设定黄灯时间
			{
				DirFlag = NORTH_Y;						//改变为下一个状态,NORTH_Y状态
			}
		}
		*P_Watchdog_Clear = 0x0001;
	}
//---------------------------------------------------------------------------------------------
//下面为西边路口所有黄灯闪烁,北边路口左拐、直行、人行道黄灯闪烁,东边路口右拐黄灯闪烁状态
//---------------------------------------------------------------------------------------------	
	LEDShow(EAST_L,LeftYlw,StrtYlw,RigtRed,MansYlw);	//东边路口左拐、直行、人行道黄灯亮,右拐红灯亮
	LEDShow(SOUTH_L,LeftRed,StrtRed,RigtYlw,MansRed);	//南边路口左拐、直行、人行道红灯亮,右拐黄灯亮
	LEDShow(WEST_L,LeftRed,StrtRed,RigtGrn,MansRed);	//西边路口左拐、直行、人行道红灯亮,右拐绿灯亮
	LEDShow(NORTH_L,LeftYlw,StrtYlw,RigtYlw,MansYlw);	//北边路口全部黄灯亮

	while(DirFlag==NORTH_Y)								//NORTH_Y状态持续4s
	{
		if(cn == 1)										//0.5s
		{
			DIGOff(NORTH_D);							//北边路口数码管熄灭
			DIGOff(EAST_D);								//东边路口数码管熄灭
			LEDOff(NORTH_L,LeftYlw);					//所有点亮的黄灯熄灭
			LEDOff(NORTH_L,StrtYlw);
			LEDOff(NORTH_L+1,RigtYlw);
			LEDOff(NORTH_L+1,MansYlw);
			LEDOff(EAST_L,LeftYlw);
			LEDOff(EAST_L,StrtYlw);
			LEDOff(EAST_L+1,MansYlw);
			LEDOff(SOUTH_L+1,RigtYlw);
		}
		if(cn == 2)										//1s,四个路口数码管倒计时并显示,被熄灭的黄灯点亮
		{
			cn = 0;
			Enum--;
			Snum--;
			Wnum--;
			Nnum--;
			
			DIGShow(EAST_D,Enum);
			DIGShow(SOUTH_D,Snum);
			DIGShow(WEST_D,Wnum);
			DIGShow(NORTH_D,Nnum);
			
			LEDShow(EAST_L,LeftYlw,StrtYlw,RigtRed,MansYlw);
			LEDShow(SOUTH_L,LeftRed,StrtRed,RigtYlw,MansRed);
			LEDShow(WEST_L,LeftRed,StrtRed,RigtGrn,MansRed);
			LEDShow(NORTH_L,LeftYlw,StrtYlw,RigtYlw,MansYlw);

			if(Nnum == 0xffff)							//如果北边路口倒计时到-1(由于要显示00)
			{
				Nnum = max;								//北边路口的倒计时时间设置为max
				DirFlag = 0;							//清状态标志
			}			
		}
		*P_Watchdog_Clear = 0x0001;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -