觀察十字路口紅綠燈工作流程,設(shè)計(jì)交通燈。 1、初始時(shí):南北向、東西向直行左轉(zhuǎn)均為紅燈 2、南北向直行: ①南北向直行綠燈亮,延時(shí)若干秒 ②啟動(dòng)南北向左轉(zhuǎn)數(shù)碼管顯示:倒計(jì)時(shí)6秒;同時(shí)南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后南北向直行綠燈滅,南北向直行黃燈亮,延時(shí)3秒 ③南北向左轉(zhuǎn)數(shù)碼管倒計(jì)時(shí)顯示結(jié)束,關(guān)閉;同時(shí)南北向直行黃燈滅,南北向直行紅燈亮 3、南北向左轉(zhuǎn): ①南北向左轉(zhuǎn)綠燈亮,延時(shí)若干秒 ②啟動(dòng)?xùn)|西向直行數(shù)碼管顯示:倒計(jì)時(shí)6秒;同時(shí)南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時(shí)3秒 ③東西向直行數(shù)碼管倒計(jì)時(shí)顯示結(jié)束,關(guān)閉;同時(shí)南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮 4、東西向直行: ①東西向直行綠燈亮,延時(shí)若干秒 ②啟動(dòng)?xùn)|西向左轉(zhuǎn)數(shù)碼管顯示:倒計(jì)時(shí)6秒;同時(shí)東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后東西向直行綠燈滅,東西向直行黃燈亮,延時(shí)3秒 ③東西向左轉(zhuǎn)數(shù)碼管倒計(jì)時(shí)顯示結(jié)束,關(guān)閉;同時(shí)東西向直行黃燈滅,東西向直行紅燈亮 5、東西向左轉(zhuǎn): ①東西向左轉(zhuǎn)綠燈亮,延時(shí)若干秒 ②啟動(dòng)南北向直行數(shù)碼管顯示:倒計(jì)時(shí)6秒;同時(shí)東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時(shí)3秒 ③南北向直行數(shù)碼管倒計(jì)時(shí)顯示結(jié)束,關(guān)閉;同時(shí)東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮
電路原理圖如下:
1.png (11.36 KB, 下載次數(shù): 73)
下載附件
電路圖
2018-11-11 16:57 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (9.68 KB, 下載次數(shù): 66)
下載附件
2018-11-14 02:16 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LX0=P3^0;
- sbit LX1=P3^1;
- bit bp=0;
- uchar m,n,k;
- uchar time1[]={20,120};//數(shù)碼管第一狀態(tài)5s,第二狀態(tài)6s
- uchar time2[]={100,10,60};//交通燈第一狀態(tài)5s,第二狀態(tài)3s,第三狀態(tài)3s
- uint index1=1;
- uint index2=0;
- uchar tt[]={0x20,0x04};
- uint t=0;
- uint flag=0;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,
- 0x00
- };
- uchar P2_0=0x01;//(P2.0~P2.3)選擇數(shù)碼管
- uchar P1_01=0x21;
- uchar P1_02=0x09;
- int number=6;
- void showNumber()
- {
- if(index1==0)
- {
- P2=P2_0;
- P0=~table[number];
- if(number==0)
- {
- P2=0x00;
- P2_0<<=1;
- if(P2_0==0x10)
- P2_0=0x01;
- number=6;
- index1=1;
- }
- }
- }
- void openLight()
- {
- switch(index2)
- {
- case 0:
- if(m==time2[index2])
- {
- m=0;
- index2=1;
- }
- break;
- case 1:
- if(m==time2[index2])
- {
- m=0;
- k++;
- if(bp==0)
- P1_01=P1_01^tt[t];
- else
- P1_02=P1_02^tt[t];
- if(k==8)
- {
- k=0;
- t=(t+1)%2;
- index2=2;
- if(bp==0)
- {
- if(t==1)
- P1_01=0x11;
- else
- P1_01=0x0A;
- }
- else
- {
- if(t==1)
- P1_02=0x11;
- else
- P1_02=0x0A;
- }
-
- }
- }
- break;
- case 2:
- if(m==time2[index2])
- {
- flag++;
- if(bp==0)
- {
- if(flag!=2)
- P1_01=0x0C;
- else
- {
- flag=0;
- P1_01=0x09;
- P1_02=0x21;
- bp=~bp;
- }
- }
- else
- {
- if(flag!=2)
- P1_02=0x0C;
- else
- {
- flag=0;
- P1_02=0x09;
- P1_01=0x21;
- bp=~bp;
- }
- }
- index2=0;
- m=0;
- }
- break;
- }
- P1=0x00;
- LX0=1;
- P1=P1_01;
- LX0=0;
- P1=0x00;
- LX1=1;
- P1=P1_02;
- LX1=0;
- }
- void main()
- {
- P1=0x00;
- EA=1;//打開(kāi)全局中斷允許
- TMOD=0x11;//設(shè)置定時(shí)器工作方式
- TH0=15535/256;//計(jì)時(shí)50ms
- TL0=15535%256;
- TH1=15535/256;
- TL1=15535%256;
- ET0=1;//打開(kāi)計(jì)時(shí)器中斷允許
- ET1=1;
- TR0=1;//啟動(dòng)定時(shí)器
- TR1=1;
- while(1)
- { //openLight();
- showNumber();
- }
- }
- void ET_T0() interrupt 1
- {
- TH0=15535/256;
- TL0=15535%256;
- m++;
- openLight();
- }
- void ET_T1() interrupt 3
- {
- TH1=15535/256;
- TL1=15535%256;
- n++;
- switch(index1)
- {
- case 0:
- if(n==time1[index1])
- {
- number=(number-1)%6;
- n=0;
- }
- break;
- case 1:
- if(n==time1[index1])
- {
- index1=0;
- n=0;
- }
- break;
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
交通燈.zip
(25.37 KB, 下載次數(shù): 84)
2018-11-11 16:55 上傳
點(diǎn)擊文件名下載附件
代碼及電路圖 下載積分: 黑幣 -5
|