标题:
大一的时候做的非常简单的红外循迹小车程序
[打印本页]
作者:
韩佳佳
时间:
2020-4-6 15:28
标题:
大一的时候做的非常简单的红外循迹小车程序
基本是手动调节参数,所以很适合入门吧
大佬就别看了,从来没有接触过的可以看看,都是非常基础的c语言
单片机源程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define left 0
#define right 1
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit ENA = P1^2;
sbit IN3 = P1^3;
sbit IN4 = P1^4;
sbit ENB = P1^5;
sbit left2 = P0^0;
sbit left1 = P0^1;
sbit right1 = P0^2;
sbit right2 = P0^3;
sbit right3 = P0^4;
sbit left3 = P0^5;
sbit key1=P3^2;
sbit beep=P3^4;
sbit DOUT=P1^6;
unsigned char zkb1 = 0;
unsigned char zkb2 = 0;
unsigned char t = 0;
unsigned char i,j,a,b;
unsigned char speed=25;
uint flag=0;
unsigned char SignalFlag[2];
void init()
{
EA = 1;
TMOD |= 0x01;
TH0 =(65536 - 100) / 256;
TL0 = (65536 - 100)% 256;
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1
{
TH0 = (65536 - 100) / 256;
TL0 = (65536 - 100) % 256;
if(t < zkb1)
{
ENA = 1;
}
else
{
ENA = 0;
}
if(t < zkb2)
{
ENB =1;
}
else
{
ENB = 0;
}
++t;
if(t >= 200)
{
t = 0;
}
}
void delay( uint z)
{ uint j;
while( z--)
{ for(j=110;j>0;j--);}
}
void turn_left()
{
zkb1 =29;//15;
zkb2 =38;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void turn_right()
{
zkb1 = 38;
zkb2 = 29;//15;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void turn_left1()
{
zkb1 =12;//15;
zkb2 =45;
IN1 = 1;
IN2 = 0; //左轮反转
IN3 = 1;
IN4 = 0;
}
void turn_right1()
{
zkb1 = 45;
zkb2 = 12;//15;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void turn_right2()
{
zkb1 =32;//15;
zkb2 =32;
IN1 = 0;
IN2 = 1;
IN3 = 1;
IN4 = 0;
}
void turn_left2()
{
zkb1 = 32;
zkb2 = 32;//15;
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 1;
}
void qianjin()
{
zkb1 =30;
zkb2 =30;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
}
void tingzhi()
{
zkb1 = 0;
zkb2 = 0;
delay(250);
}
void delay1()//延时程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void xunji()
{
unsigned char flag=0;
if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0)&&(left3 == 0)&&(right3 == 0))
{
flag = 0;
}
else if(((right2 == 0)&&(right1 ==0)&&(left1 == 1)&&(left2 == 0))&&(left3 == 0)&&(right3 == 0)||((right2 == 0)&&(right1 == 0)&&(left1 == 1)&&(left2 == 1))&&(left3 == 0)&&(right3 == 0))
{
flag = 1;
}
else if(((right2 == 0)&&(right1 == 1)&&(left1 == 0)&&(left2 == 0))&&(left3 == 0)&&(right3 == 0)||((right2 == 1)&&(right1 == 1)&&(left1 == 0)&&(left2 == 0))&&(left3 == 0)&&(right3 == 0))
{
flag = 2;
}
else if((right2 == 1)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0)&&(left3 == 0)&&(right3 == 0))
{
flag = 3;
}
else if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 1)&&(left3 == 0)&&(right3 == 0))
{
flag = 4;
}
else if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0)&&(left3 == 0)&&(right3 == 1))
{
flag = 5;
}
else if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0)&&(left3 == 1)&&(right3 == 0))
{
flag = 6;
}
else if((right2 == 1)&&(right1 == 1)&&(left1 == 1)&&(left2 == 1))
{
flag = 7;
}
else flag=0;
switch(flag)
{
case 0:qianjin();break;
case 1:turn_left();break;
case 2:turn_right();break;
case 3:turn_right1();break;
case 4:turn_left1();break;
case 5:turn_right2();break;
case 6:turn_left2();break;
case 7:tingzhi();break;
default:qianjin();break;
}
}
void main()
{
init();
while(1)
{
if (key1==0)
{
do
{
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 1;
zkb1 = 27;
zkb2 = 27;
beep=1;
}
while(right3==0);
do
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
beep= 1;
zkb1 = 40;
zkb2 = 20;
}
while(right1==0);
turn_left1();
delay(220);
}
else
{
xunji();
}
}
}
复制代码
以上程序51hei提供下载:
xunji.zip
(41.62 KB, 下载次数: 17)
2020-4-6 15:26 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2020-4-6 22:56
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1