|

在b站上看了一个单片机控制交通信号灯的视频,做了一些出现了问题求助
代码
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define DIG0 0x01
#define DIG1 0x02
#define DIG2 0x03
#define DIG3 0x04
void delay(uint i);
void T0_init();
void MAX7219(uchar addr,uchar num);
void MAX7219_init();
void display();
sbit DIN=P3^0;
sbit LOAD=P3^1;
sbit CLK=P3^2;
sbit G1=P0^0;
sbit Y1=P0^1;
sbit R1=P0^2;
sbit G2=P1^0;
sbit Y2=P1^1;
sbit R2=P1^2;
uchar NS_S,NS_G,EW_S,EW_G;
uchar NS,EW;
uchar temp=0,i;
uchar code table[10]={0x7e,0x30,0xEd,0x79,0x33,0x5b,0x70,0x7f,0x7b};
void delay(uint i)
{
uint j;
for(j=0;j<i;j++);
}
void T0_init()
{
TMOD=0X01;
TH0=0XD8;
TL0=0XF0;
ET0=1;
TR0=1;
}
void MAX_write(uchar ch)
{
uchar j,ads;
for(j=0;j<8;j++)
{
ads=ch&0x80;
CLK=0;
if(ads)
DIN=1;
else
DIN=0;
ch=ch<<1;
CLK=1;
}
}
void MAX7219(uchar addr,uchar num)
{
LOAD=0;
_nop_();
MAX_write(num);
_nop_();
LOAD=i;
}
void MAX7219_init()
{
MAX7219(0x0c,0x01);
MAX7219(0x0b,0x03);
MAX7219(0x0a,0x05);
MAX7219(0x09,0x00);
}
void display()
{
NS_S=NS/10;
NS_G=NS%10;
EW_S=EW/10;
EW_G=EW%10;
MAX7219(DIG0,table[NS_S]);
MAX7219(DIG1,table[NS_G]);
MAX7219(DIG2,table[EW_S]);
MAX7219(DIG3,table[EW_G]);
}
void T0_(void)interrupt 1
{
temp++;
TH0=0xD0;
TL0=0xF0;
if(temp==100)
{
temp=0;
NS--;
EW--;
if((NS==0)&&(EW==5)&&(i==0))
{
NS=5;
EW=5;
i=1;
}
if((NS==0)&&(EW==0)&&(i==1))
{
NS=25;
EW=20;
i=2;
}
if((NS==0)&&(EW==0)&&(i=2))
{
NS=5;
EW=5;
i=3;
}
if((NS==0)&&(EW==0)&&(i==3))
{
NS==20;
EW==25;
i==4;
}
}
display();
while(1)
{
uint k;
dispaly();
switch(1)
{
case 0:
R2=0;
G1=0;
break;
case 1:
G1=1;
Y1=0;
for(k=0;k<3;k++)
{
Y1=Y1;
delay(10000);
}
break;
case 2:
G2=0;
R2=1;
R1=0;
Y1=1;
break;
case 3:
G2=1;
Y2=0;
for(k=0;k<3;k++)
{
Y2=~Y2;
delay(10000);
}
break;
case 4:
i=0;
R1=1;
break;
}
|
|