#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 c
time = 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 ;
}
}
一周热门 更多>