51单片机智能小车寻循迹代码
小车可以实现循迹(可以过直角,弯路,前进后退等情况以及PWNM调速等)
如想了解接线的请私聊作者
由于小车的情况比较复杂要考虑的东西很多,有时候接线不合适都跑不起来
如果遇到问题请私聊作者
话不多说直接上代码吧:
//以下为代码段
#include"reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;sbit HIN1=P1^4;// P1.0Êä³öpwm
sbit HIN2=P3^0;// P1.1Êä³öpwm
sbit HIN3=P1^6;// P1.2Êä³öpwm
sbit HIN4=P1^7;// P1.3Êä³öpwmsbit QIN1=P1^0;// P1.4Êä³öpwm
sbit QIN2=P1^1;// P1.5Êä³öpwm
sbit QIN3=P1^2;// P1.6Êä³öpwm
sbit QIN4=P1^3;// P1.7Êä³öpwmsbit IRIN=P3^2; // ºìÍâ¿ÚΪ3.2 ÖжÏ0sbit k1=P2^0; //Ñ°¼£Ä£¿ék1λ
sbit k2=P2^1; //Ñ°¼£Ä£¿ék2λ
sbit k3=P2^2; //Ñ°¼£Ä£¿ék3λ
sbit k4=P2^4; //Ñ°¼£Ä£¿ék4λ
sbit k5=P2^5; //Ñ°¼£Ä£¿ék5λu8 time,i;
u16 count,count2,count3,count4; //pwmÕ¼¿Õ±È£¨ËٶȴóС£©
//u8 z=0, x=0;/********»ù±¾ÑÓʱº¯Êý*******/
void delay(int u)
{while(u--);
}void minrun()
{count=30;count2=30;count3=0;count4=0;
}void run()
{count=35;count2=35;count3=0;count4=0;
}void right()
{count=0;//ÓÒתcount2=40;//zouÕý´«count3=60;//you·´count4=0;}void Lefet()
{count=30;count2=0;count3=0;count4=50;
}void back()
{count=0;count2=0;count3=50;count4=50;
}void stop()
{count=0;count2=0;count3=0;count4=0;}void Lefet1()
{count=60;count2=0;count3=0;count4=40;
}void lefet_1()
{count=60;//count2=0;count3=0;count4=40;}void right_1()
{count=0;count2=60;count3=40;count4=0;}void lefet_2()
{count=65;count2=0;count3=0;count4=40;
}
void right_2()
{count=0;count2=40;count3=60;count4=0;} void xunji()
{u8 m;if(k1==1&&k2==1&&k4==1&&k4==1&&k5==1)//ûÓмì²âµ½ºÚÏß{m=0;}if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//Öмä¼ì²âµ½ºÚÏß{m=1;}if(k1==1&&k2==0&&k3==1&&k4==1&&k5==1)//΢µ÷ ×ó{m=2;}if(k1==1&&k2==1&&k3==1&&k4==0&&k5==1)//΢µ÷ ÓÒ{m=3;}if(k1==0&&k2==1&&k3==1&&k4==1&&k5==1)//{m=4;}if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)//´ó·ùÓÒת{m=5;}if(k1==0&&k3==0&&k4==1&&k5==1)//Ö±½Ç ×ó{m=6;}if(k1==1&&k2==1&&k3==0&&k5==0)//Ö±½Ç ÓÒ{m=7;}/*if(k1==0&&k2==0&&k3==1&&k4==1&&k5==1){m=8;}if(k1==1&&k2==1&&k3==1&&k4==0&&k5==0){m=9;}if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0){m=10;}*/switch(m){//case (0):lefet_2();break;case (1):run();break;case (2):Lefet();delay(200);break;//΢µ÷ case (3):right();delay(200);break;//΢µ÷//case (4):Lefet1();delay(900);break;//´ó·ù×óת//case (5):right();delay(900);break;//´ó·ù¶ÈÓÒתcase (6):lefet_1();delay(900);break;//Ö±½Ç ×óתcase (7):right_1();delay(900);break;//Ö±½Ç ÓÒת//case (8):lefet_2();delay(200);break;//case (9):right_2();delay(200);break;//case (10):right_2();delay(900);break;//default :run();delay(500);stop();break;}
}/*******************
* ¹¦ÄÜ£º´ò¿ªÐèÒªÓõ½µÄÖжÏ
* Óõ½µÄÖжϣº¶¨Ê±Æ÷0¡¢1 ¹¤×÷·½Ê½1 16λ¶¨Ê±Æ÷ģʽ
* ÍⲿÖÕ¶Ë0
*********************/
void timer()
{TMOD=0x11;//¶¨Ê±Æ÷0¹¤×÷·½Ê½1TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±TL0=0xf7;//(65536-10)%256;//0.01msTH1=0;TL1=0;EA=1;//¿ª×ÜÖжÏET0=1;//¿ª¶¨Ê±Æ÷0ÖжÏET1=1;TR0=1;//Æô¶¯¶¨Ê±Æ÷0 IT0=1;EX0=1;IRIN=1;
}/*******Ö÷º¯Êý********/
void main()
{ timer(); //µ÷ÓÃÖжϴò¿ªº¯Êýwhile(1){ xunji();//back();//run();//Lefet();//right();// delay(3000); //xunji();}
}/****¶¨Ê±Æ÷0Òç³öÀûÓÃpwmµ÷4¸öµç»úµÄËÙ¶È***/
void tim0() interrupt 1
{//TR0=0;//¸³³õֵʱ£¬¹Ø±Õ¶¨Ê±Æ÷TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±TL0=0xf7;//(65536-10)%256;//0.01ms£¬ÒòΪһ¸öÖÜÆÚ1us//TR0=1;//´ò¿ª¶¨Ê±Æ÷i++;if(i>=100) //1khzi=0;if(i<=count) //Õ¼¿Õ±È%30,¿É¸Ä{QIN2=0; HIN4=0;} else{QIN2=1; HIN4=1;}if(i<=count2) //Õ¼¿Õ±È%30,¿É¸Ä{QIN4=0; HIN2=0; } else { QIN4=1;HIN2=1;}if(i<=count3) //Õ¼¿Õ±È%30,¿É¸Ä{ QIN1=0; HIN3=0;} else {QIN1=1; HIN3=1;}if(i<=count4) //Õ¼¿Õ±È%30,¿É¸Ä{QIN3=0; HIN1=0; } else { QIN3=1;HIN1=1;} }
注释出现乱码了,然后下面我在以文本的形式编一下:
#include"reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit HIN1=P1^4;// P1.0Êä³öpwm
sbit HIN2=P3^0;// P1.1Êä³öpwm
sbit HIN3=P1^6;// P1.2Êä³öpwm
sbit HIN4=P1^7;// P1.3Êä³öpwm
sbit QIN1=P1^0;// P1.4Êä³öpwm
sbit QIN2=P1^1;// P1.5Êä³öpwm
sbit QIN3=P1^2;// P1.6Êä³öpwm
sbit QIN4=P1^3;// P1.7Êä³öpwm
sbit IRIN=P3^2; // ºìÍâ¿ÚΪ3.2 ÖжÏ0
sbit k1=P2^0; //Ñ°¼£Ä£¿ék1λ
sbit k2=P2^1; //Ñ°¼£Ä£¿ék2λ
sbit k3=P2^2; //Ñ°¼£Ä£¿ék3λ
sbit k4=P2^4; //Ñ°¼£Ä£¿ék4λ
sbit k5=P2^5; //Ñ°¼£Ä£¿ék5λ
u8 time,i;
u16 count,count2,count3,count4; //pwmÕ¼¿Õ±È£¨ËٶȴóС£©
//u8 z=0, x=0;
/********»ù±¾ÑÓʱº¯Êý*******/
void delay(int u)
{
while(u--);
}
void minrun()
{
count=30;
count2=30;
count3=0;
count4=0;
}
void run()
{
count=35;
count2=35;
count3=0;
count4=0;
}
void right()
{
count=0;//ÓÒת
count2=40;//zouÕý´«
count3=60;//you·´
count4=0;
}
void Lefet()
{
count=30;
count2=0;
count3=0;
count4=50;
}
void back()
{
count=0;
count2=0;
count3=50;
count4=50;
}
void stop()
{
count=0;
count2=0;
count3=0;
count4=0;
}
void Lefet1()
{
count=60;
count2=0;
count3=0;
count4=40;
}
void lefet_1()
{
count=60;//
count2=0;
count3=0;
count4=40;
}
void right_1()
{
count=0;
count2=60;
count3=40;
count4=0;
}
void lefet_2()
{
count=65;
count2=0;
count3=0;
count4=40;
}
void right_2()
{
count=0;
count2=40;
count3=60;
count4=0;
}
void xunji()
{
u8 m;
if(k1==1&&k2==1&&k4==1&&k4==1&&k5==1)//ûÓмì²âµ½ºÚÏß
{m=0;}
if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//Öмä¼ì²âµ½ºÚÏß
{m=1;}
if(k1==1&&k2==0&&k3==1&&k4==1&&k5==1)//΢µ÷ ×ó
{m=2;}
if(k1==1&&k2==1&&k3==1&&k4==0&&k5==1)//΢µ÷ ÓÒ
{m=3;}
if(k1==0&&k2==1&&k3==1&&k4==1&&k5==1)//
{m=4;}
if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)//´ó·ùÓÒת
{m=5;}
if(k1==0&&k3==0&&k4==1&&k5==1)//Ö±½Ç ×ó
{m=6;}
if(k1==1&&k2==1&&k3==0&&k5==0)//Ö±½Ç ÓÒ
{m=7;}
/*
if(k1==0&&k2==0&&k3==1&&k4==1&&k5==1)
{m=8;}
if(k1==1&&k2==1&&k3==1&&k4==0&&k5==0)
{m=9;}
if(k1==1&&k2==1&&k3==1&&k4==1&&k5==0)
{m=10;}
*/
switch(m)
{
//case (0):lefet_2();break;
case (1):run();break;
case (2):Lefet();delay(200);break;//΢µ÷
case (3):right();delay(200);break;//΢µ÷
//case (4):Lefet1();delay(900);break;//´ó·ù×óת
//case (5):right();delay(900);break;//´ó·ù¶ÈÓÒת
case (6):lefet_1();delay(900);break;//Ö±½Ç ×óת
case (7):right_1();delay(900);break;//Ö±½Ç ÓÒת
//case (8):lefet_2();delay(200);break;
//case (9):right_2();delay(200);break;
//case (10):right_2();delay(900);break;
//default :run();delay(500);stop();break;
}
}
/*******************
* ¹¦ÄÜ£º´ò¿ªÐèÒªÓõ½µÄÖжÏ
* Óõ½µÄÖжϣº¶¨Ê±Æ÷0¡¢1 ¹¤×÷·½Ê½1 16λ¶¨Ê±Æ÷ģʽ
* ÍⲿÖÕ¶Ë0
*********************/
void timer()
{
TMOD=0x11;//¶¨Ê±Æ÷0¹¤×÷·½Ê½1
TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±
TL0=0xf7;//(65536-10)%256;//0.01ms
TH1=0;
TL1=0;
EA=1;//¿ª×ÜÖжÏ
ET0=1;//¿ª¶¨Ê±Æ÷0ÖжÏ
ET1=1;
TR0=1;//Æô¶¯¶¨Ê±Æ÷0
IT0=1;
EX0=1;
IRIN=1;
}
/*******Ö÷º¯Êý********/
void main()
{
timer(); //µ÷ÓÃÖжϴò¿ªº¯Êý
while(1)
{
xunji();
//back();
//run();
//Lefet();
//right();
// delay(3000);
//xunji();
}
}
/****¶¨Ê±Æ÷0Òç³öÀûÓÃpwmµ÷4¸öµç»úµÄËÙ¶È***/
void tim0() interrupt 1
{
//TR0=0;//¸³³õֵʱ£¬¹Ø±Õ¶¨Ê±Æ÷
TH0=0xff;//(65536-10)/256;//¸³³õÖµ¶¨Ê±
TL0=0xf7;//(65536-10)%256;//0.01ms£¬ÒòΪһ¸öÖÜÆÚ1us
//TR0=1;//´ò¿ª¶¨Ê±Æ÷
i++;
if(i>=100) //1khz
i=0;
if(i<=count) //Õ¼¿Õ±È%30,¿É¸Ä
{
QIN2=0;
HIN4=0;
}
else
{
QIN2=1;
HIN4=1;
}
if(i<=count2) //Õ¼¿Õ±È%30,¿É¸Ä
{
QIN4=0;
HIN2=0;
}
else
{
QIN4=1;
HIN2=1;
}
if(i<=count3) //Õ¼¿Õ±È%30,¿É¸Ä
{
QIN1=0;
HIN3=0;
}
else
{
QIN1=1;
HIN3=1;
}
if(i<=count4) //Õ¼¿Õ±È%30,¿É¸Ä
{
QIN3=0;
HIN1=0;
}
else
{
QIN3=1;
HIN1=1;
}
}
有问题请私聊博主哦
51单片机智能小车寻循迹代码相关推荐
- 51单片机智能小车——寻迹
材料: (1)51单片机开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)寻迹红外2个 一.组装 (1)L298N电机驱动模块与开发板接线如下图: 寻迹红外接线: 说明: 红外一OUT接 ...
- 基于51单片机智能小车循迹功能的实现
基于51单片机智能小车循迹功能的实现 目录 基于51单片机智能小车循迹功能的实现 一.思路(仅供参考) 二.部分硬件模块介绍 1.L298n电机驱动模块 2.两路红外循迹模块 三.实现 1.代码 2. ...
- 51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随)
**51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容. 功能比较多 ...
- 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...
用理论指导实践,以实践检验理论.6月28日,车辆工程学院在汽车科技馆二楼举行了"51单片机智能小车"电子设计成果展示,旨在加强学生学以致用能力,提升学生实践创新水平.2017级教改 ...
- 智能小车红外循迹原理
循迹电路 循迹电路由收发一体的红外收发管P1,P2:电位器R18,R29:发光二极管D6,D7和芯片LM324等组成.一共有两路,对应的红外电位器用于调节灵敏度.LM234用于信号的比较,并产生比较结 ...
- 51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...
为培养青年学子创新意识和创新能力,激发勇于创新的主动性和积极性,营造良好科技创新氛围,10月29日至30日,电气与信息工程学院双创协会于一教609.三教102和三教202开展循迹小车培训,该培训由电子 ...
- 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接
2021/04/28-更新工具的连接 ----------------------------------------- 前几天弄了个基于51芯片的蓝牙红外小车,因为是新手也没有人教,网上的资料也不够 ...
- 循迹智能小车 循黑线 智能小车 红外循迹传感器 单片机
循迹智能小车 循黑线 文章目录 循迹智能小车 循黑线 硬件菜单 硬件使用 硬件组装 程序设计前的理解 程序代码 个人原创博客: 点我浏览 硬件菜单 单片机型号:STC16F40K128 4路红外循迹模 ...
- 以51单片机为基础的自动循迹小车
51单片机自动循迹小车 #include<reg52.h>sbit IN1=P1^2; //左电机正转 sbit IN2=P1^3; //左电机反转 sbit IN3=P1^6; //右电 ...
- 智行小车(基于51单片机)——避障+循迹+停
讲道理,这辆小车是我们参加校赛所制作的,在这次的小车制作过程之中存在的很多的不足和时间的浪费情况. 队员的选择和分工也都存在着一定的问题(这应该是我最头疼的问题) 但是总得来说还算是取得了一个不错的结 ...
最新文章
- 第十五届全国大学生智能汽车竞赛华北赛区比赛
- log4j 源码解析_Log4j配置详解
- HDU 2112 HDU Today (dijkstar + map)
- Android清单AndroidManifest详细说明
- Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!
- QEBA:基于类边界查询访问的黑盒攻击
- shell [] [[]]的区别(转)
- 阿里巴巴Java开发手册终极版v1.3.0
- CodeBlocks常用快捷键
- Android SurfaceView动画(二)
- Kinect开发教程八:OpenNI2显示深度、彩色及融合图像
- 数学一年级应用题_小学一年级数学应用题100道
- python 两个nc文件 风场,ECMWF 不同step 的 NC 文件如何合并
- CS61A 2021Spring Lab: Cats
- 国产GP232RL 串口芯片完美兼容FT232RL 引脚开发资料
- steam邮箱登录教程
- Android学习之下拉列表
- RK3229 android9.0 按刷机按键进入loader
- 目前互联网比较赚钱的项目
- 唐宇迪学习笔记3:Python数据可视化库——Matplotlib