設計壹個交通燈模擬系統,需要
1南北方向和東西方向通行時間為60秒。
綠燈變紅時,黃燈閃10秒,黃燈亮1秒,滅1秒。
3.設置兩個led顯示倒計時。
# include & ltregx 51 . h & gt;
#定義uchar無符號字符
#定義uint無符號整數
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
比特變化;//選擇流量方向
uchar定時器_ tick//定時器0 _滴答計數
uchar i=0,n=0,time=0,timer
code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x 90 };//1,2,3, 4, 5, 6, 7, 8, 9
代碼掃描[4]={0xf7,0xfb,0xfd,0x Fe };
uchar counter[4]={0,0,0,0 };
靜態void定時器0 _ ISR (void)中斷1使用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];
定時器_ tick =定時器0 _ tick+1;
if(定時器0_tick==200)
{
定時器_ tick = 0
時間=時間+1;
定時器= timer-1;
如果(定時器==0)
{
變= ~變;
定時器= 60;//重復計時
}
如果(時間==60)
{
時間= 0;//重復計時
}
}
如果(變化==0)
{
如果(時間& lt=50)//南北
{
green 1 = 0;//南北綠燈50秒。
黃色1 = 1;
red 1 = 1;
green 2 = 1;
yellow 2 = 1;
red 2 = 0;//東西向紅燈亮50}
如果(50 & lt時間與空間。& amp時間& lt=60)
{
n = n+1;
如果(n==200)
{
n = 0;
yellow 1 = ~ yellow 1;//南北黃燈閃爍10秒。
}
green 1 = 1;
red 1 = 1;
yellow 2 = 1;
green 2 = 1;
red 2 = 0;//東西向紅燈繼續亮。
}
}
if(change==1)
{
如果(時間& lt=50)//事情
{
red 1 = 0;//南北紅燈亮50秒。
黃色1 = 1;
green 1 = 1;
red 2 = 1;
yellow 2 = 1;
green 2 = 0;//東西綠燈亮了50}
如果(50 & lt時間與空間。& amp時間& lt=60)
{
red 1 = 0;//南北紅燈持續亮10秒。
黃色1 = 1;
green 1 = 1;
red 2 = 1;
n = n+1;
如果(n==200)
{
n = 0;
yellow2 = ~ yellow2//東西向黃燈閃10秒,黃燈亮1秒,滅1秒。
}
green 2 = 1;
}
}
計數器[1]=定時器/10;//倒數十位數1
counter[0]= timer % 10;//倒計時到1。
計數器[3]=定時器/10;//倒數2的十位數
計數器[2]=計時器% 10;//倒計時2個單位
}
靜態空定時器0 _ initialize(void)//中斷初始化。
{
EA = 0;
定時器_ tick = 0
TR0 = 0;
TMOD = 0x 01;
TL0 = 0x00
TH0 = 0xee
PT0 = 0;
ET0 = 1;
TR0 = 1;
EA = 1;
}
無效總管(無效)
{
定時器= 60;
定時器0 _ initialize();
while(1);
}