|
本次分為兩個版本:
基礎版
加強版
基礎版只是利用定時器去實現(xiàn)相應的功能模塊
加強版使用了兩個中斷(功能:1,綠燈時,每按一下,時間+2s,最高9s,功能2:相反)
說明:
基礎版和加強版可共用一個電路圖,此帖只附加了加強版的壓縮包,想要基礎版的可留言+郵件地址,謝謝閱讀!多多支持
電路圖
交通燈.png (173.58 KB, 下載次數(shù): 91)
下載附件
2020-12-20 20:58 上傳
基礎版主函數(shù)代碼
- #include <config.h>
- sbit RED_NANBEIZHI=P1^0; //南北方向直行紅燈
- sbit YELLOW_NANBEIZHI=P1^1; //南北方向直行黃燈
- sbit GREEN_NANBEIZHI=P1^2; //南北方向直行綠燈
- sbit RED_DONGXIZHI=P1^3; //東西方向直行紅燈
- sbit YELLOW_DONGXIZHI=P1^4; //東西方向直行黃燈
- sbit GREEN_DONGXIZHI=P1^5; //東西方向直行綠燈
- sbit RED_NANBEIZUO=P2^0; //南北方向左轉(zhuǎn)紅燈
- sbit YELLOW_NANBEIZUO=P2^1; //南北方向左轉(zhuǎn)黃燈
- sbit GREEN_NANBEIZUO=P2^2; //南北方向左轉(zhuǎn)綠燈
- sbit RED_DONGXIZUO=P2^3; //東西方向左轉(zhuǎn)紅燈
- sbit YELLOW_DONGXIZUO=P2^4; //東西方向左轉(zhuǎn)黃燈
- sbit GREEN_DONGXIZUO=P2^5; //東西方向左轉(zhuǎn)綠燈
- sbit NBZHI=P1^6;
- sbit NBZUO=P1^7;
- sbit DXZHI=P2^6;
- sbit DXZUO=P2^7;
- u16 n;
- u16 tt,bai,shi,ge,bb;
- u8 code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
- void delay_ms(u16 t);
- void xtimer0();
- //1
- void chushi0();
- //2
- void nbzhi1();
- void nbzhi2();
- void nbzhi3();
- //3
- void nbzuo2();
- void nbzuo3();
- void nbzuo4();
- //4
- void dxzhi1();
- void dxzhi2();
- void dxzhi3();
- //5
- void dxzuo2();
- void dxzuo3();
- void dxzuo4();
- void main()
- {
- P0=0xff;
- P1=0xc9;
- P2=0xc0;
- P3=0xff;
- EA=1;
- EX0=1;
- IT0=0;
- delay_ms(250);
- chushi0(); // ①南北向直行綠燈亮,延時5秒
- while(1)
- {
- //2 南北向直行:
- nbzhi1(); // ②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- nbzhi2(); // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
- nbzhi3(); // ③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮 ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
- // //3 南北向左轉(zhuǎn)
- nbzuo2(); // ②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- nbzuo3(); // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
- nbzuo4(); //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮 ①東西向直行綠燈亮,延時若干秒
- //4 東西向直行:
- dxzhi1(); //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- dxzhi2(); //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
- dxzhi3(); //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮 ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
- //5 東西向左轉(zhuǎn):
- dxzuo2(); //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- dxzuo3(); //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
- dxzuo4(); //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮
- }
- }
- ////////1、初始時:南北向、東西向直行左轉(zhuǎn)均為紅燈
- void chushi0() // ①南北向直行綠燈亮,延時5秒
- {
- u16 temp1;
- temp1=5;
- TMOD|=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=0;
- GREEN_NANBEIZHI=1;
-
- if(tt==20)//20*50us=1s
- {
- tt=0;
- temp1--;
- }
-
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=5;
- break;
- }
- NBZHI=0; //南北直行
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- //////2、南北向直行:
- void nbzhi1() //②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- u16 temp1;
- temp1=6;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_NANBEIZUO=1;
-
- RED_DONGXIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_NANBEIZHI=~GREEN_NANBEIZHI;
- }
- }
- n=(temp1)%10;
-
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi2() // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
- {
- u16 temp1;
- temp1=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- GREEN_NANBEIZHI=0;
- YELLOW_NANBEIZHI=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
-
-
- }
- n=(temp1)%10;
-
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi3() //③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮 ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
- {
- u16 temp1;
- temp1=5;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=0;
- GREEN_NANBEIZUO=1;;
- YELLOW_NANBEIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=5;
- break;
- }
- NBZHI=1;
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////3、南北向左轉(zhuǎn):
- void nbzuo2() //②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- u16 temp1,temp2;
- temp1=6;
- temp2=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_DONGXIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=1;
- GREEN_NANBEIZHI=0;
- YELLOW_NANBEIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_NANBEIZUO=~GREEN_NANBEIZUO;
- }
-
-
- }
- n=(temp1)%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo3() // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
- {
- u16 temp1;
- temp1=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
-
- GREEN_NANBEIZUO=0;
- GREEN_DONGXIZUO=0;
- GREEN_DONGXIZHI=0;
- YELLOW_NANBEIZUO=1;
- YELLOW_DONGXIZHI=0;
-
- if(tt==20)
- {
- tt=0;
- temp1--;
-
-
-
- }
- n=(temp1)%10;
-
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo4() //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮 ①東西向直行綠燈亮,延時若干秒
- {
- u16 temp1;
- temp1=5;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZHI=0;
- GREEN_DONGXIZHI=1;
- YELLOW_DONGXIZHI=0;
- YELLOW_NANBEIZUO=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=5;
- break;
- }
- NBZHI=1;
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////4、東西向直行:
- void dxzhi1() //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- u16 temp1;
- temp1=6;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZUO=1;
- RED_DONGXIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_DONGXIZHI=~GREEN_DONGXIZHI;
- }
-
- }
- n=(temp1)%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi2() //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
- {
- u16 temp1;
- temp1=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZHI=0;
- GREEN_DONGXIZHI=0;
- YELLOW_DONGXIZHI=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi3() //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮 ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
- {
- u16 temp1;
- temp1=5;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=0;
- GREEN_DONGXIZUO=1;
- YELLOW_DONGXIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=5;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////5、東西向左轉(zhuǎn):
- void dxzuo2() //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- u16 temp1,temp2;
- temp1=6;
- temp2=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
-
- RED_NANBEIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_DONGXIZUO=~GREEN_DONGXIZUO;
- }
- }
- n=(temp1)%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo3() //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
- {
- u16 temp1;
- temp1=3;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- GREEN_DONGXIZUO=0;
- YELLOW_DONGXIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
-
-
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo4() //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮 ①南北向直行綠燈亮,延時5秒
- {
- u16 temp1;
- temp1=5;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=1;
- GREEN_NANBEIZHI=1;
- YELLOW_DONGXIZUO=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
-
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=5;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void delay_ms(u16 t)
- {
- u8 i,j;
- for(i=0;i<t;i++)
- for(j=0;j<110;j++);
- }
- void xtimer1() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- tt++;
- }
復制代碼
加強版主函數(shù)
- #include <config.h>
- sbit RED_NANBEIZHI=P1^0; //南北方向直行紅燈
- sbit YELLOW_NANBEIZHI=P1^1; //南北方向直行黃燈
- sbit GREEN_NANBEIZHI=P1^2; //南北方向直行綠燈
- sbit RED_DONGXIZHI=P1^3; //東西方向直行紅燈
- sbit YELLOW_DONGXIZHI=P1^4; //東西方向直行黃燈
- sbit GREEN_DONGXIZHI=P1^5; //東西方向直行綠燈
- sbit RED_NANBEIZUO=P2^0; //南北方向左轉(zhuǎn)紅燈
- sbit YELLOW_NANBEIZUO=P2^1; //南北方向左轉(zhuǎn)黃燈
- sbit GREEN_NANBEIZUO=P2^2; //南北方向左轉(zhuǎn)綠燈
- sbit RED_DONGXIZUO=P2^3; //東西方向左轉(zhuǎn)紅燈
- sbit YELLOW_DONGXIZUO=P2^4; //東西方向左轉(zhuǎn)黃燈
- sbit GREEN_DONGXIZUO=P2^5; //東西方向左轉(zhuǎn)綠燈
- sbit NBZHI=P1^6;
- sbit NBZUO=P1^7;
- sbit DXZHI=P2^6;
- sbit DXZUO=P2^7;
- u16 n,tt,temp1,temp=5;
- u8 code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
- //函數(shù)
- void delay_ms(u16 t);
- void xtimer0();
- //1
- void chushi0();
- void chushi1();
- //2
- void nbzhi1();
- void nbzhi2();
- void nbzhi3();
- //3
- void nbzuo2();
- void nbzuo3();
- void nbzuo4();
- //4
- void dxzhi1();
- void dxzhi2();
- void dxzhi3();
- //5
- void dxzuo2();
- void dxzuo3();
- void dxzuo4();
- void sys_unit()
- {
- TMOD|=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- IT0=1;
- IT1=1;
- ET0=1;
- ET1=1;
- EX0=1;
- EX1=1;
- TR0=1;
- TR1=0;
- }
- void main()
- {
- P0=0xff;
- P1=0xc9;
- P2=0xc9;
- P3=0xff;
-
- sys_unit();
- chushi0();
- chushi1(); // ①南北向直行綠燈亮,延時5秒
- while(1)
- {
-
- //2 南北向直行:
- nbzhi1(); // ②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- nbzhi2(); // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
- nbzhi3(); // ③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮 ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
- // //3 南北向左轉(zhuǎn)
- nbzuo2(); // ②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- nbzuo3(); // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
- nbzuo4(); //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮 ①東西向直行綠燈亮,延時若干秒
- //4 東西向直行:
- dxzhi1(); //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- dxzhi2(); //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
- dxzhi3(); //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮 ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
- //5 東西向左轉(zhuǎn):
- dxzuo2(); //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- dxzuo3(); //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
- dxzuo4(); //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮
- }
- }
- ////////1、初始時:南北向、東西向直行左轉(zhuǎn)均為紅燈
- void chushi0() // ①紅燈亮2秒
- {
- temp1=5;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=1;
- if(tt==20)//20*50us=1s
- {
- tt=0;
- temp1--;
- }
- if(temp1==3)
- {
- temp1=5;
- break;
- }
- }
- }
- void chushi1() // ①南北向直行綠燈亮,延時5秒
- {
- while(1)
- {
- RED_NANBEIZHI=0;
- GREEN_NANBEIZHI=1;
- if(tt==20)//20*50us=1s
- {
- tt=0;
- temp--;
- }
- n=temp%10;
- if(temp==0)
- {
- temp=5;
- break;
- }
- NBZHI=0; //南北直行
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- //////2、南北向直行:
- void nbzhi1() //②啟動南北向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時南北向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- temp1=6;
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_NANBEIZUO=1;
- RED_DONGXIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_NANBEIZHI=~GREEN_NANBEIZHI;
- }
- }
- n=temp1%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi2() // 然后南北向直行綠燈滅,南北向直行黃燈亮,延時3秒
- {
- temp1=3;
- while(1)
- {
- GREEN_NANBEIZHI=0;
- YELLOW_NANBEIZHI=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi3() //③南北向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向直行黃燈滅,南北向直行紅燈亮 ①南北向左轉(zhuǎn)綠燈亮,延時若干秒
- {
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=0;
- GREEN_NANBEIZUO=1;;
- YELLOW_NANBEIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp--;
- }
- n=temp%10;
- if(temp==0)
- {
- temp=5;
- break;
- }
- NBZHI=1;
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////3、南北向左轉(zhuǎn):
- void nbzuo2() //②啟動東西向直行數(shù)碼管顯示:倒計時6秒;同時南北向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- temp1=6;
- while(1)
- {
- RED_DONGXIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=1;
- GREEN_NANBEIZHI=0;
- YELLOW_NANBEIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_NANBEIZUO=~GREEN_NANBEIZUO;
- }
- }
- n=temp1%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo3() // 然后南北向左轉(zhuǎn)綠燈滅,南北向左轉(zhuǎn)黃燈亮,延時3秒
- {
- temp1=3;
- while(1)
- {
- GREEN_NANBEIZUO=0;
- GREEN_DONGXIZUO=0;
- GREEN_DONGXIZHI=0;
- YELLOW_NANBEIZUO=1;
- YELLOW_DONGXIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo4() //③東西向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時南北向左轉(zhuǎn)黃燈滅,南北向左轉(zhuǎn)紅燈亮 ①東西向直行綠燈亮,延時若干秒
- {
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZHI=0;
- GREEN_DONGXIZHI=1;
- YELLOW_DONGXIZHI=0;
- YELLOW_NANBEIZUO=0;
- if(tt==20)
- {
- tt=0;
- temp--;
- }
- n=temp%10;
- if(temp==0)
- {
- temp=5;
- break;
- }
- NBZHI=1;
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////4、東西向直行:
- void dxzhi1() //②啟動東西向左轉(zhuǎn)數(shù)碼管顯示:倒計時6秒;同時東西向直行綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- temp1=6;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZUO=1;
- RED_DONGXIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_DONGXIZHI=~GREEN_DONGXIZHI;
- }
- }
- n=(temp1)%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi2() //然后東西向直行綠燈滅,東西向直行黃燈亮,延時3秒
- {
- temp1=3;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- RED_DONGXIZHI=0;
- GREEN_DONGXIZHI=0;
- YELLOW_DONGXIZHI=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi3() //③東西向左轉(zhuǎn)數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向直行黃燈滅,東西向直行紅燈亮 ①東西向左轉(zhuǎn)綠燈亮,延時若干秒
- {
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=0;
- GREEN_DONGXIZUO=1;
- YELLOW_DONGXIZHI=0;
- if(tt==20)
- {
- tt=0;
- temp--;
- }
- n=temp%10;
- if(temp==0)
- {
- temp=5;
- break;
- }
- NBZHI=1; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////5、東西向左轉(zhuǎn):
- void dxzuo2() //②啟動南北向直行數(shù)碼管顯示:倒計時6秒;同時東西向左轉(zhuǎn)綠燈閃爍3下,滅亮滅亮滅亮共3秒,
- {
- temp1=6;
- while(1)
- {
- RED_NANBEIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- if(temp1>=2)
- {
- GREEN_DONGXIZUO=~GREEN_DONGXIZUO;
- }
- }
- n=(temp1)%10;
- if(temp1==3)
- {
- temp1=6;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo3() //然后東西向左轉(zhuǎn)綠燈滅,東西向左轉(zhuǎn)黃燈亮,延時3秒
- {
- temp1=3;
- while(1)
- {
- RED_NANBEIZHI=1;
- RED_NANBEIZUO=1;
- GREEN_DONGXIZUO=0;
- YELLOW_DONGXIZUO=1;
- if(tt==20)
- {
- tt=0;
- temp1--;
- }
- n=(temp1)%10;
- if(temp1==0)
- {
- temp1=3;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo4() //③南北向直行數(shù)碼管倒計時顯示結(jié)束,關閉;同時東西向左轉(zhuǎn)黃燈滅,東西向左轉(zhuǎn)紅燈亮 ①南北向直行綠燈亮,延時5秒
- {
- while(1)
- {
- RED_NANBEIZHI=0;
- RED_DONGXIZHI=1;
- RED_DONGXIZUO=1;
- GREEN_NANBEIZHI=1;
- YELLOW_DONGXIZUO=0;
- if(tt==20)
- {
- tt=0;
- temp--;
- }
- n=temp%10;
- if(temp==0)
- {
- temp=5;
- break;
- }
- NBZHI=0; //南北左轉(zhuǎn)
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void delay_ms(u16 t)
- {
- u8 i,j;
- for(i=0;i<t;i++)
- for(j=0;j<110;j++);
- }
- void int0() interrupt 0 //外部中斷0
- {
- if(temp<10&&temp>=0)
- {
- temp=temp+2;
- }
- }
- void int1() interrupt 2 //外部中斷1
- {
- if(temp>=0&&temp<10)
- {
- temp=temp-2;
- }
- }
- void xtimer1() interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- tt++;
- }
復制代碼
|
-
-
交通燈 - 加強版.zip
2020-12-20 20:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
96.41 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5
加強版
|