可能不是很符合你的要求,看一看能不能用。
功能:红灯10秒,黄灯2秒。 照着你的要求改一改。
看不清的话,留下邮箱,发给你。
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^1;
sbit wela=P2^2;
sbit p1_0=P1^0;
uchar code dat[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar code tem[]={0x01,0x02,0x04,0x08,0x10,0x20};
uint i;
uchar num,st;
void delay(uint);
void init();
void main()
{
init();
dula=1;
P0=0xc0;
dula=0;
while(1)
{
if(i==1000)
{
i=0;
num++;
if(st==0)
{
if(num==10)
{
num=0;
st=1;
P2=0x40;
}
}
if(st==1)
{
if(num==2)
{
num=0;
st=2;
P2=0x30;
}
}
if(st==2)
{
if(num==10)
{
num=0;
st=3;
P2=0x40;
}
}
if(st==3)
{
if(num==2)
{
num=0;
st=0;
P2=0x88;
}
}
dula=1;
P0=dat[num];
dula=0;
delay(5);
}
}
}
//程序初始化
void init()
{
EA=1;//开总中断允许
EX0=1;//外部中断0允许
IT0=0;//外部中断0为低电平触发方式
TMOD=0X01;//设定T0为16位定时器
ET0=1;//定时器T0中断允许
TR0=1;//启动定时器T0
TH0=0XFC;
TL0=0X66;
i=0;
num=0;
st=0;
p1_0=1;
wela=1;
P0=0x01;
wela=0;
P0=0xff;
P2=0x88;
}
//延时约为Z毫秒
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
//外部中断0
void int0() interrupt 0
{
P2=0x28;
st=0;
i=0;
num=0;
dula=1;
P0=0xc0;
dula=0;
delay(10);
P2=0x88;
}
//定时器T0精确1ms
void timer0() interrupt 1
{
TH0=0XFC;
TL0=0X66;
i++;
}