|
#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit L1=P3^0;
sbit L2=P3^1;
sbit H1=P3^4;
sbit H2=P3^5;
sbit H3=P3^6;
sbit H4=P3^7;
void XS_YS(void) //延时函数,延时约0.6毫秒
{
uint i;
for(i=0;i<200;i++);
}
void delay(int num) //延时函数
{
int x,y;
for(x=num; x>0; x--)
for(y=110; y>0; y--)
{
;//延时1ms
}
}
void ShuMa_XS(uint c,uint b,uint a)
//数码显示并延时 c 为倒数数字 ,b=0位黄灯不闪烁,b=1位黄灯闪烁,
//c 需要数码显示时间,a=1;表示1,3路口黄灯闪烁;a=2表示2,4路口闪烁
{
uchar ShuZi[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //共阴数码显示
// 0 1 2 3 4 5 6 7 8 9
uint e=0; //必要参数 C表示秒数,
delay(100);
if(b==0) //b=0位黄灯不闪烁
{
while(1) //保持数显示的稳定
{
P2=0XF1;P0=ShuZi[c/10];XS_YS(); //十位显示
P2=0XFF;XS_YS(); //端口初始化------必要!!!!!!!
P2=0XFC;P0=ShuZi[c%10];XS_YS(); //个位显示
P2=0X00;e++; //e从0加至200,延时,保持数显示的时间
if(c==0) {delay(800);break;} //c=0执行完毕跳出
if(e==200){c--,e=0; }} //C--倒叙秒数
}
else if(b==1)//b=1位黄灯闪烁
{
while(1) //保持数显示的稳定
{
if(a==1){P2=0XED;}
else if(a==2){P2=0XDD;} //a=1;表示1,3路口黄灯闪烁;a=2表示2,4路口闪烁
P0=ShuZi[c/10];XS_YS(); //十位显示
P2=0XFF;XS_YS(); //端口初始化------必要!!!!!!!
if(a==1){P2=0XE8;}
else if(a==2){P2=0XD8;} //a=1;表示1,3路口黄灯闪烁;a=2表示2,4路口闪烁
P0=ShuZi[c%10];XS_YS(); //个位显示
P2=0X00;e++; //e从0加至200,延时,保持数显示的时间
if(c==0) {delay(800);break;} //c=0执行完毕跳出
if(e==200){c--,e=0;}} //C--倒叙秒数
}
}
//1号路口对应南路口,2号路口对应东路口
//3-----------北----, 4-----------西
void main()
{
uint i=0;
P1=0x00;P2=0xFF;//初始化
delay(20);
IT0=0;EX0=1;EA=1;
while(1)
{
P1=0XA9; //1,3 直行
ShuMa_XS(30,0,0);
ShuMa_XS(3,1,1);
P1=0XA6; //2,4 转弯
ShuMa_XS(15,0,0);
ShuMa_XS(3,1,2);
P1=0X9A; //1,3 直行
ShuMa_XS(15,0,0);
ShuMa_XS(3,1,1);
P1=0X6A; //2,4 转弯
ShuMa_XS(30,0,0);
ShuMa_XS(3,1,2);
}
}
void ZhongDuan0()interrupt 1
{
P2=0X00;P0=0X40;delay(200);delay(200);
H1=1;H2=1;H3=1;H4=1;L1=0;L2=0; //反转必要参数
if(P3==0XE8) //南路口
{ delay(20); //消抖
if(P3==0XE8)
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20);
switch(P3)
{ case 0X0A: P1=0X9A;delay(30);break; //直行
case 0X09: P1=0XA9;delay(30);break;}} //转弯
}
if(P3==0XD8)
{ delay(20);
if(P3==0XD8) //东路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20);//反转必要参数
switch(P3)
{ case 0X0A: P1=0XA6;delay(30);break; //直行
case 0X09: P1=0X6A;delay(30);break;}}
}
if(P3==0XB8)
{delay(20); //消抖
if(P3==0XB8) //北路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20); //反转必要参数
switch(P3)
{ case 0X0A: P1=0XA6;delay(30);break; //直行
case 0X09: P1=0X6A;delay(30);break;}} //转弯
}
if(P3==0X78)
{delay(20); //消抖
if(P3==0X78) //西路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20); //反转必要参数
switch(P3)
{ case 0X0A: P1=0X9A;delay(30);break; //直行
case 0X09: P1=0XA9;delay(30);break;}} //转弯
}
}
|
评分
-
查看全部评分
|