📄 diguser.c
字号:
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 + -