|
#include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
//定义单片机不同的I/O口来进行信号的输入与输出
sbit in1=P3^7;
sbit in2=P3^6;
sbit in3=P3^5;
sbit in4=P3^4;
sbit c1=P2^7;
sbit c2=P2^6;
sbit c3=P2^5;
sbit c4=P2^4;
sbit c5=P2^3;
sbit c6=P2^2;
sbit c7=P2^1;
sbit c8=P2^0;
sbit c9=P1^6;
sbit c10=P1^5; //循迹10个灯
sbit D = P3^3;
uchar stop=0;
uchar count=0;
uchar temp = 0;
uchar SE = 0;
uchar speed_left = 0;
uchar speed_right = 0;
void time0_init(void)
{
TMOD=0x01; //对定时器0的模式进行选择0001 即gate为0即T0只受TR0控制 C/T为0即为定时器 01对应16位的定时器
TH0=0xFF; //寄存器的高8位 1111 1111
TL0=0xea; //寄存器的低8位 1110 1010
TR0=1; //启动定时器0
ET0=1; //打开T0的中断
EA=1; //打开全局中断
}
uchar judge(void) //检测情况判断
{
if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==1)&&(c6==1)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 1;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==1)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 2;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==1)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 3;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==1)&&(c5==1)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 4;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==1)&&(c7==1)&&(c8==0)&&(c9==0)&&(c10==0))
return 5;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==1)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 6;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==1)&&(c8==0)&&(c9==0)&&(c10==0))
return 7;
else if((c1==0)&&(c2==0)&&(c3==1)&&(c4==1)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 8;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==1)&&(c8==1)&&(c9==0)&&(c10==0))
return 9;
else if((c1==0)&&(c2==0)&&(c3==1)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 10;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==1)&&(c9==0)&&(c10==0))
return 11;
else if((c1==0)&&(c2==1)&&(c3==1)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 12;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==1)&&(c9==1)&&(c10==0))
return 13;
else if((c1==0)&&(c2==1)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 14;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==1)&&(c10==0))
return 15;
else if((c1==1)&&(c2==1)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 16;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==1)&&(c10==1))
return 17;
else if((c1==1)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==0))
return 18;
else if((c1==0)&&(c2==0)&&(c3==0)&&(c4==0)&&(c5==0)&&(c6==0)&&(c7==0)&&(c8==0)&&(c9==0)&&(c10==1))
return 19;
else if((c1==1)&&(c2==1)&&(c3==1)&&(c4==1)&&(c5==1)&&(c6==1)&&(c7==1)&&(c8==1)&&(c9==1)&&(c10==1))
return 20;
else
return 0;
}
uchar dadt,dadt_1;
void main(void)
{
uchar wark = 0;
time0_init();
speed_left = 50;
speed_right = 50;
SE =15;
while(1)
{
dadt=judge();
if(dadt == 0)
dadt=dadt_1;
dadt_1=dadt;
switch(dadt)
{
case 1:SE =15;speed_left =85;speed_right =85; break;
case 2:SE =15;speed_left =80;speed_right =85; break;
case 3:SE =15;speed_left =85;speed_right =80; break;
case 4:SE =14;speed_left =70;speed_right =85; break;
case 5:SE =16;speed_left =85;speed_right =70; break;
case 6:SE =14;speed_left =60;speed_right =75; break;
case 7:SE =16;speed_left =75;speed_right =60; break;
case 8:SE =13;speed_left =57;speed_right =75; break;
case 9:SE =17;speed_left =75;speed_right =57; break;
case 10:SE =12;speed_left =45;speed_right =75; break;
case 11:SE =18;speed_left =75;speed_right =55; break;
case 12:SE =12;speed_left =55;speed_right =80; break;
case 13:SE =18;speed_left =75;speed_right =63; break;
case 14:SE =11;speed_left =53;speed_right =80; break;
case 15:SE =19;speed_left =75;speed_right =58; break;
case 16:SE =11;speed_left =55;speed_right =80; break;
case 17:SE =19;speed_left =80;speed_right =55; break;
case 18:SE = 11;speed_left =55;speed_right =80; break;
case 19:SE = 19;speed_left =80;speed_right =55; break;
case 20:SE = 15;speed_left =85;speed_right =85;stop++;break;
default:
break;
}
}
}
void T0_time() interrupt 1 //中断函数
{
TR0=0;
TH0=0xff; //255
TL0=0Xea; //234
temp++;
if(temp>=833) //202 //1000
{
temp=0;
}
if(temp<=SE)
{
D=1;
}
else
{
D=0;
}
count++;
if(count>100)
count=0;
if(count<speed_left)
{
in1=1;
in2=0;
}
else
{
in1=0;
in2=0;
}
if(count<speed_right)
{
in3=1;
in4=0;
}
else
{
in3=0;
in4=0;
}
TR0=1;
}
|
-
-
程序.zip
102.48 KB, 下载次数: 15, 下载积分: 黑币 -5
|