|
#include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
//定義單片機(jī)不同的I/O口來(lái)進(jìn)行信號(hà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個(gè)燈
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; //對(duì)定時(shí)器0的模式進(jìn)行選擇0001 即gate為0即T0只受TR0控制 C/T為0即為定時(shí)器 01對(duì)應(yīng)16位的定時(shí)器
TH0=0xFF; //寄存器的高8位 1111 1111
TL0=0xea; //寄存器的低8位 1110 1010
TR0=1; //啟動(dòng)定時(shí)器0
ET0=1; //打開(kāi)T0的中斷
EA=1; //打開(kāi)全局中斷
}
uchar judge(void) //檢測(cè)情況判斷
{
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 //中斷函數(shù)
{
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
2020-11-4 15:17 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
102.48 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5
|