搜档网
当前位置:搜档网 › 北邮单片机

北邮单片机

--我最后编成这个样子,光电开关输出0为有障碍物,输出1为通路。以下程序能成功走出特定迷宫(通用性比较差,因为老师最后检查看的是离开迷宫的速度,智能要求不高)



#include
#define uchar unsigned char
#define uint unsigned int
#define t 1
#define tr 120
#define tl 125
uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00为熄灭符

sfr P4 = 0xE8;
sbit IN1 =P1^0;
sbit IN2=P1^1;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit LED1=P2^6;
sbit LED2=P2^7;
sbit LightF=P3^2;
sbit LightL=P4^6;
sbit LightR=P3^7;
sbit BEEP=P4^4;

/********以下是延时函数********/
void Delay_ms(uint xms) //延时程序,xms是形式参数
{
uint i, j;
for(i=xms;i>0;i--) // i=xms,即延时xms, xms由实际参数传入一个值
for(j=115;j>0;j--); //此处分号不可少
}
/********以下是显示函数********/
void display()
{
P0=seg_data[0]; //显示毫秒十位
P2=0xfe; //开个位显示(开第1只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[1]; //显示毫秒百位
P2=0xfd; //开十位显示(开第2只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[2]; //显示秒个位
P2=0xfb; //开百位显示(开第3只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[3]; //显示秒十位
P2=0xf7; //开个位显示(开第4只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[4]; //显示分个位
P2=0xef; //开十位显示(开第5只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[5]; //显示分十位
P2=0xdf; //开个位显示(开第6只数码管)
Delay_ms(t); //延时10ms
P2=0xff;
}
/********以下是电机控制函数*********/
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
Delay_ms(10);
}

void qianjin()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}

void leftturn(uint ms)
{
LED2=0;
IN1=0;
IN2=1;
IN3=0;
IN4=1;
Delay_ms(ms);
}

void rightturn(uint ms)
{
LED1=0;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
Delay_ms(ms);
}

/********以下是蜂鸣器函数********/
void beep()
{
BEEP=0;
Delay_ms(50);
BEEP=1;
Delay_ms(50);
}
//****************主程序******************//
void main()
{ P0=0xff;
P2=0xff;
P1=0xff;
P4=0xff;
while(1)
{
display();
if (LightL==1)
{
qianjin();
Delay_ms(130);
stop();
leftturn(tl);
stop();
qianjin();
Delay_ms(200);
}

else if(LightR==1)
{
qianjin();
Delay_ms(160);
stop();
rightturn(tr);
stop();
qianjin();
Delay_ms(200);
}

else if(LightF==1)
{
qianjin();
if(LightR==1)
{
qianjin();
Delay_ms(50);
stop();
rightturn(tr);
stop();
qianjin();
Delay_ms(200);
}
if(LightL==1)
{
qianjin();
Delay_ms(50);
stop();
leftturn(t

l);
stop();
qianjin();
Delay_ms(200);}

}


else if(LightR==0&&LightL==0&&LightF==0)
{
stop();
beep();
rightturn(280);
stop();
qianjin();
Delay_ms(50);
}
}
}

//备注一下,我是北京邮电大学的学生

相关主题