IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机智能小车寻循迹代码 -> 正文阅读

[嵌入式]51单片机智能小车寻循迹代码

小车可以实现循迹(可以过直角,弯路,前进后退等情况以及PWNM调速等)

如想了解接线的请私聊作者

由于小车的情况比较复杂要考虑的东西很多,有时候接线不合适都跑不起来

如果遇到问题请私聊作者

话不多说直接上代码吧:

//以下为代码段
#include"reg51.h"
#include "intrins.h"
typedef  unsigned int  u16;
typedef  unsigned char u8;

sbit HIN1=P1^4;//  P1.0ê?3?pwm
sbit HIN2=P3^0;//  P1.1ê?3?pwm
sbit HIN3=P1^6;//  P1.2ê?3?pwm
sbit HIN4=P1^7;//  P1.3ê?3?pwm

sbit QIN1=P1^0;//  P1.4ê?3?pwm
sbit QIN2=P1^1;//  P1.5ê?3?pwm
sbit QIN3=P1^2;//  P1.6ê?3?pwm
sbit QIN4=P1^3;//  P1.7ê?3?pwm

sbit IRIN=P3^2;  // oìía?ú?a3.2 ?D??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????±è£¨?ù?è′óD?£?
//u8 z=0, x=0;


/********?ù±??óê±oˉêy*******/
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;//óò×a
	 count2=40;//zou?y′?
	 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)//??óD?ì2aμ?oú??
	{m=0;}
	
	if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//?D???ì2aμ?oú??
	{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)//′ó·ùóò×a
	{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;//′ó·ù×ó×a
		//case (5):right();delay(900);break;//′ó·ù?èóò×a
		
		case (6):lefet_1();delay(900);break;//?±??  ×ó×a
		case (7):right_1();delay(900);break;//?±??  óò×a
		
		//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;
	}	
}

/*******************
* 1|?ü£o′ò?aDèòaó?μ?μ??D??
* ó?μ?μ??D??£o?¨ê±?÷0?¢1 1¤×÷·?ê?1 16???¨ê±?÷?£ê?
* ía2?????0
*********************/
void timer()
{
 	TMOD=0x11;//?¨ê±?÷01¤×÷·?ê?1
	TH0=0xff;//(65536-10)/256;//?33??μ?¨ê±
	TL0=0xf7;//(65536-10)%256;//0.01ms
	TH1=0;
	TL1=0;
	EA=1;//?a×ü?D??
	ET0=1;//?a?¨ê±?÷0?D??
	ET1=1;
	TR0=1;//???ˉ?¨ê±?÷0 
	IT0=1;
  EX0=1;
  IRIN=1;
}


/*******?÷oˉêy********/
void main()
{		
 	timer();   //μ÷ó??D??′ò?aoˉêy

	while(1)
	{  
		
		xunji();
		
		
		
		//back();
    //run();
		 //Lefet();
		//right();
   // delay(3000);		
		//xunji();
	}
}

/****?¨ê±?÷0ò?3?à?ó?pwmμ÷4??μ??úμ??ù?è***/
void tim0() interrupt 1
{
	//TR0=0;//?33??μê±£?1?±??¨ê±?÷
	TH0=0xff;//(65536-10)/256;//?33??μ?¨ê±
	TL0=0xf7;//(65536-10)%256;//0.01ms£?òò?aò????ü?ú1us
	//TR0=1;//′ò?a?¨ê±?÷
	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;
	} 
	
}

注释出现乱码了,然后下面我在以文本的形式编一下:

#include"reg51.h"
#include "intrins.h"
typedef ?unsigned int ?u16;
typedef ?unsigned char u8;

sbit HIN1=P1^4;// ?P1.0ê?3?pwm
sbit HIN2=P3^0;// ?P1.1ê?3?pwm
sbit HIN3=P1^6;// ?P1.2ê?3?pwm
sbit HIN4=P1^7;// ?P1.3ê?3?pwm

sbit QIN1=P1^0;// ?P1.4ê?3?pwm
sbit QIN2=P1^1;// ?P1.5ê?3?pwm
sbit QIN3=P1^2;// ?P1.6ê?3?pwm
sbit QIN4=P1^3;// ?P1.7ê?3?pwm

sbit IRIN=P3^2; ?// oìía?ú?a3.2 ?D??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????±è£¨?ù?è′óD?£?
//u8 z=0, x=0;


/********?ù±??óê±oˉêy*******/
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;//óò×a
?? ? count2=40;//zou?y′?
?? ? 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)//??óD?ì2aμ?oú??
?? ?{m=0;}
?? ?
?? ?if(k1==1&&k2==1&&k3==0&&k4==1&&k5==1)//?D???ì2aμ?oú??
?? ?{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)//′ó·ùóò×a
?? ?{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;//′ó·ù×ó×a
?? ??? ?//case (5):right();delay(900);break;//′ó·ù?èóò×a
?? ??? ?
?? ??? ?case (6):lefet_1();delay(900);break;//?±?? ?×ó×a
?? ??? ?case (7):right_1();delay(900);break;//?±?? ?óò×a
?? ??? ?
?? ??? ?//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;
?? ?}?? ?
}

/*******************
* 1|?ü£o′ò?aDèòaó?μ?μ??D??
* ó?μ?μ??D??£o?¨ê±?÷0?¢1 1¤×÷·?ê?1 16???¨ê±?÷?£ê?
* ía2?????0
*********************/
void timer()
{
??? ?TMOD=0x11;//?¨ê±?÷01¤×÷·?ê?1
?? ?TH0=0xff;//(65536-10)/256;//?33??μ?¨ê±
?? ?TL0=0xf7;//(65536-10)%256;//0.01ms
?? ?TH1=0;
?? ?TL1=0;
?? ?EA=1;//?a×ü?D??
?? ?ET0=1;//?a?¨ê±?÷0?D??
?? ?ET1=1;
?? ?TR0=1;//???ˉ?¨ê±?÷0?
?? ?IT0=1;
? EX0=1;
? IRIN=1;
}


/*******?÷oˉêy********/
void main()
{?? ??? ?
??? ?timer(); ? //μ÷ó??D??′ò?aoˉêy

?? ?while(1)
?? ?{ ?
?? ??? ?
?? ??? ?xunji();
?? ??? ?
?? ??? ?
?? ??? ?
?? ??? ?//back();
? ? //run();
?? ??? ? //Lefet();
?? ??? ?//right();
? ?// delay(3000);?? ??? ?
?? ??? ?//xunji();
?? ?}
}

/****?¨ê±?÷0ò?3?à?ó?pwmμ÷4??μ??úμ??ù?è***/
void tim0() interrupt 1
{
?? ?//TR0=0;//?33??μê±£?1?±??¨ê±?÷
?? ?TH0=0xff;//(65536-10)/256;//?33??μ?¨ê±
?? ?TL0=0xf7;//(65536-10)%256;//0.01ms£?òò?aò????ü?ú1us
?? ?//TR0=1;//′ò?a?¨ê±?÷
?? ?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;
?? ?}?
?? ?
}

?

?

?有问题请私聊博主哦

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:59:50  更:2021-08-06 10:01:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:51:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码