|
本次分为两个版本:
基础版
加强版
基础版只是利用定时器去实现相应的功能模块
加强版使用了两个中断(功能:1,绿灯时,每按一下,时间+2s,最高9s,功能2:相反)
说明:
基础版和加强版可共用一个电路图,此帖只附加了加强版的压缩包,想要基础版的可留言+邮件地址,谢谢阅读!多多支持
电路图
基础版主函数代码
- #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; //南北方向左转红灯
- sbit YELLOW_NANBEIZUO=P2^1; //南北方向左转黄灯
- sbit GREEN_NANBEIZUO=P2^2; //南北方向左转绿灯
- sbit RED_DONGXIZUO=P2^3; //东西方向左转红灯
- sbit YELLOW_DONGXIZUO=P2^4; //东西方向左转黄灯
- sbit GREEN_DONGXIZUO=P2^5; //东西方向左转绿灯
- 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(); // ②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- nbzhi2(); // 然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒
- nbzhi3(); // ③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 ①南北向左转绿灯亮,延时若干秒
- // //3 南北向左转
- nbzuo2(); // ②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- nbzuo3(); // 然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒
- nbzuo4(); //③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 ①东西向直行绿灯亮,延时若干秒
- //4 东西向直行:
- dxzhi1(); //②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- dxzhi2(); //然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒
- dxzhi3(); //③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 ①东西向左转绿灯亮,延时若干秒
- //5 东西向左转:
- dxzuo2(); //②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- dxzuo3(); //然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒
- dxzuo4(); //③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮
- }
- }
- ////////1、初始时:南北向、东西向直行左转均为红灯
- 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() //②启动南北向左转数码管显示:倒计时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; //南北左转
- 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; //南北左转
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi3() //③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 ①南北向左转绿灯亮,延时若干秒
- {
- 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、南北向左转:
- void nbzuo2() //②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁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; //南北左转
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo3() // 然后南北向左转绿灯灭,南北向左转黄灯亮,延时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; //南北左转
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo4() //③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 ①东西向直行绿灯亮,延时若干秒
- {
- 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() //②启动东西向左转数码管显示:倒计时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; //南北左转
- 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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi3() //③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 ①东西向左转绿灯亮,延时若干秒
- {
- 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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////5、东西向左转:
- void dxzuo2() //②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo3() //然后东西向左转绿灯灭,东西向左转黄灯亮,延时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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo4() //③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮 ①南北向直行绿灯亮,延时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; //南北左转
- 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++;
- }
复制代码
加强版主函数
- #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; //南北方向左转红灯
- sbit YELLOW_NANBEIZUO=P2^1; //南北方向左转黄灯
- sbit GREEN_NANBEIZUO=P2^2; //南北方向左转绿灯
- sbit RED_DONGXIZUO=P2^3; //东西方向左转红灯
- sbit YELLOW_DONGXIZUO=P2^4; //东西方向左转黄灯
- sbit GREEN_DONGXIZUO=P2^5; //东西方向左转绿灯
- 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};
- //函数
- 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(); // ②启动南北向左转数码管显示:倒计时6秒;同时南北向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- nbzhi2(); // 然后南北向直行绿灯灭,南北向直行黄灯亮,延时3秒
- nbzhi3(); // ③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 ①南北向左转绿灯亮,延时若干秒
- // //3 南北向左转
- nbzuo2(); // ②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- nbzuo3(); // 然后南北向左转绿灯灭,南北向左转黄灯亮,延时3秒
- nbzuo4(); //③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 ①东西向直行绿灯亮,延时若干秒
- //4 东西向直行:
- dxzhi1(); //②启动东西向左转数码管显示:倒计时6秒;同时东西向直行绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- dxzhi2(); //然后东西向直行绿灯灭,东西向直行黄灯亮,延时3秒
- dxzhi3(); //③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 ①东西向左转绿灯亮,延时若干秒
- //5 东西向左转:
- dxzuo2(); //②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁3下,灭亮灭亮灭亮共3秒,
- dxzuo3(); //然后东西向左转绿灯灭,东西向左转黄灯亮,延时3秒
- dxzuo4(); //③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮
- }
- }
- ////////1、初始时:南北向、东西向直行左转均为红灯
- 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() //②启动南北向左转数码管显示:倒计时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; //南北左转
- 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; //南北左转
- NBZUO=0;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzhi3() //③南北向左转数码管倒计时显示结束,关闭;同时南北向直行黄灯灭,南北向直行红灯亮 ①南北向左转绿灯亮,延时若干秒
- {
- 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、南北向左转:
- void nbzuo2() //②启动东西向直行数码管显示:倒计时6秒;同时南北向左转绿灯闪烁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; //南北左转
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo3() // 然后南北向左转绿灯灭,南北向左转黄灯亮,延时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; //南北左转
- NBZUO=1;
- DXZHI=0;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void nbzuo4() //③东西向直行数码管倒计时显示结束,关闭;同时南北向左转黄灯灭,南北向左转红灯亮 ①东西向直行绿灯亮,延时若干秒
- {
- 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() //②启动东西向左转数码管显示:倒计时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; //南北左转
- 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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzhi3() //③东西向左转数码管倒计时显示结束,关闭;同时东西向直行黄灯灭,东西向直行红灯亮 ①东西向左转绿灯亮,延时若干秒
- {
- 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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=0;
- P0=table[n];
- delay_ms(5);
- }
- }
- ////////5、东西向左转:
- void dxzuo2() //②启动南北向直行数码管显示:倒计时6秒;同时东西向左转绿灯闪烁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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo3() //然后东西向左转绿灯灭,东西向左转黄灯亮,延时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; //南北左转
- NBZUO=1;
- DXZHI=1;
- DXZUO=1;
- P0=table[n];
- delay_ms(5);
- }
- }
- void dxzuo4() //③南北向直行数码管倒计时显示结束,关闭;同时东西向左转黄灯灭,东西向左转红灯亮 ①南北向直行绿灯亮,延时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; //南北左转
- 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++;
- }
复制代码
|
|