|
大佬们帮我看一下这个交通灯程序,为什么黄灯一直亮,而且为什么在second判断时不需要second>30&second<36
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴
u8 SMGDATA[8];
sbit LSA=P2^7;
sbit LSB=P2^6;
sbit LSC=P2^5;
#define SMG P0
#define TRAFFIC P1
sbit SRred=P1^0;
sbit SRgreen=P1^1;
sbit Sred=P1^2;
sbit Syellow=P1^3;
sbit Sgreen=P1^4;
sbit XRred=P3^0;
sbit XRgreen=P3^1;
sbit Xred=P1^5;
sbit Xyellow=P1^6;
sbit Xgreen=P1^7;
u16 second;
void delay(u16 i)
{
while(i--);
}
void DIG()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0SA=0,LSB=0,LSC=0;break;
case 1SA=1,LSB=0,LSC=0;break;
case 2SA=0,LSB=1,LSC=0;break;
case 3SA=1,LSB=1,LSC=0;break;
case 4SA=0,LSB=0,LSC=1;break;
case 5SA=1,LSB=0,LSC=1;break;
case 6SA=0,LSB=1,LSC=1;break;
case 7SA=1,LSB=1,LSC=1;break;
}
SMG=SMGDATA[i];
delay(100);
}
}
void Timer0Init()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
second=1;
Timer0Init();
DIG();
while(1){
if(second==70)
{
second=1;
}
if(second<31)
{
SMGDATA[0]=0x00;
SMGDATA[1]=0x00;
SMGDATA[2]=smgduan[(30-second)%100/10];
SMGDATA[3]=smgduan[(30-second)%10];
SMGDATA[4]=0x00;
SMGDATA[5]=0x00;
SMGDATA[6]=SMGDATA[2];
SMGDATA[7]=SMGDATA[3];
DIG();
SRred=1;
SRgreen=0;
Sred=1;
Syellow=0;
Sgreen=0;
XRred=0;
XRgreen=1;
Xred=0;
Xyellow=0;
Xgreen=1;
}
else if(second<36)
{
SMGDATA[0]=0x00;
SMGDATA[1]=0x00;
SMGDATA[2]=smgduan[(35-second)%100/10];
SMGDATA[3]=smgduan[(35-second)%10];
SMGDATA[4]=0x00;
SMGDATA[5]=0x00;
SMGDATA[6]=SMGDATA[2];
SMGDATA[7]=SMGDATA[3];
DIG();
SRred=1;
SRgreen=0;
Sred=1;
Syellow=0;
Sgreen=0;
XRred=0;
XRgreen=0;
Xred=0;
Xyellow=1;
Xgreen=0;
}
else if(&second<66)
{
SMGDATA[0]=0x00;
SMGDATA[1]=0x00;
SMGDATA[2]=smgduan[(65-second)%100/10];
SMGDATA[3]=smgduan[(65-second)%10];
SMGDATA[4]=0x00;
SMGDATA[5]=0x00;
SMGDATA[6]=SMGDATA[2];
SMGDATA[7]=SMGDATA[3];
DIG();
SRred=1;
SRgreen=0;
Sred=1;
Syellow=0;
Sgreen=0;
XRred=0;
XRgreen=1;
Xred=0;
Xyellow=0;
Xgreen=1;
}
else
{
SMGDATA[0]=0x00;
SMGDATA[1]=0x00;
SMGDATA[2]=smgduan[(70-second)%100/10];
SMGDATA[3]=smgduan[(70-second)%10];
SMGDATA[4]=0x00;
SMGDATA[5]=0x00;
SMGDATA[6]=SMGDATA[2];
SMGDATA[7]=SMGDATA[3];
DIG();
SRred=1;
SRgreen=0;
Sred=1;
Syellow=0;
Sgreen=0;
XRred=0;
XRgreen=0;
Xred=0;
Xyellow=1;
Xgreen=0;
}
}
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0xfc;
TL0=0x18;
i++;
if(i==1000)
{
i=0;
second++;
}
} |
|