急求补全十字路口红绿灯控制系统,还要求显示计时,3Q

2019-07-17 01:25发布

#include <reg52.h>
#define uchar unsigned char
sbit rd = P1^0 ;
sbit gd = P1^1 ;
sbit yd = P1^2 ;
sbit rn = P1^3 ;
sbit gn = P1^4 ;
sbit yn = P1^5 ;
sbit ledwei = P2^0 ;
uchar ctime = 20 ;
void Delay (void)       //延时
{
unsigned int i ;
for (i = 0 ; i < 200 ; i ++) ;
}
void main (void)      、//  不断刷新,更新程序
{
while (1)
{
  displaytime () ;
  displaylight ();
}
}

//全局变量转到数码管上,不断显示
void displaytime (void)
{

}
//全局灯控变量转到灯上
void displaylight (void)
{
  
}

//时钟中断控制,触发时间50ms
void zhongduan (void)      
{
if (flag == 20)
  flag = 0 ;   
else flag = flag + 1 ;
if ((dflag == 0) && (nflag == 0) && (flag == 0))
{
  if (ctime == 0)
  {
   ctime = maxtime ;
   if (pass ==0 ) pass = 1 ;
   else pass = 0 ;
  }
  else ctime -- ;
  if (pass == 1)   //东西方向红灯亮
  {
   if (ctime > ytime)
   {
    rd = 0 ; gd = 1 ; yd = 1 ;
    rn = 1 ; gn = 0 ; yn = 1 ;
   }
   if (ctime <= ytime)
   {
    rd = 0 ; gd = 1 ; yd = 1 ;
    rn = 1 ; gn = 1 ; yn = 0 ;
   }
  }
  if (pass == 0)   //南北方向红灯亮
  {
   if (ctime > ytime)
   {
    rd = 1 ; gd = 0 ; yd = 1 ;
    rn = 0 ; gn = 1 ; yn = 1 ;
   }
   if (ctime <= ytime)
   {
    rd = 1 ; gd = 1; yd = 0 ;
    rn = 0 ; gn = 1 ; yn = 1 ;
   }
  }
}
}
//外部中断
void interruptdx (void)    //东西方向开始外部中断
{
if (dflag == 0 ) dflag = 1 ;      //设立中断,终止计数
else dflag = 0 ;
if (dflag == 1)
{
  ctime = 40 ;
  rd = 1 ; gd = 0 ; yd = 1 ;
  rn = 0 ; gn = 1 ; yn = 1 ;
}
}
void interruptnb (void)
{
if (nflag == 0 ) nflag = 1 ;
else nflag = 0 ;
if(nflag == 1)
{
  ctime = 40 ;
  rd = 0 ; gd = 1 ; yd = 1 ;
  rn = 1 ; gn = 0 ; yn = 1 ;
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。