太简单,我的百度空间有类似的程序,改一下就行。你实在不会给我留言,我马上解决(下面程序就是你需要的)
设计一个交通灯模拟系统,要求
1南北方向和东西方向通行时间都是60秒
2绿灯变红灯时有10秒的黄灯闪烁时间,黄灯亮1秒,灭1秒
3设置两个LED,用于时间倒计时的显示
#include
#define uchar unsigned char
#define uint unsigned int
sbit red1=P1^0;//红灯1(所有灯0亮,1灭)
sbit yellow1=P1^1;//黄灯1
sbit green1=P1^2;//绿灯1
sbit red2=P1^3;//红灯2
sbit yellow2=P1^4;//黄灯2
sbit green2=P1^5;//绿灯2
bit change;//选择通行方向
uchar timer0_tick;//timer0_tick计数
uchar i=0,n=0,time=0,timer;
code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1,2,3, 4, 5, 6, 7, 8, 9
code scan[4]={0xf7,0xfb,0xfd,0xfe};
uchar counter[4]={0,0,0,0};
static void timer0_isr(void) interrupt 1 using 0 //中断函数,200次每秒,晶振为12M
{
TR0=0;
TL0=0x00;
TH0=0xee;
TR0=1;
i++;
if(i==4) i=0;
P0=seven_seg[counter[i]];
P2=scan[i];
timer0_tick=timer0_tick+1;
if(timer0_tick==200)
{
timer0_tick=0;
time=time+1;
timer=timer-1;
if(timer==0)
{
change=~change;
timer=60;//重复计时
}
if(time==60)
{
time=0;//重复计时
}
}
if(change==0)
{
if(time<=50)//南北
{
green1=0;//南北向绿灯亮50秒
yellow1=1;
red1=1;
green2=1;
yellow2=1;
red2=0;//东西红灯亮50 }
if(50