51单片机——循迹小车源码

这篇具有很好参考价值的文章主要介绍了51单片机——循迹小车源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

循迹小车keil代码,C51单片机,51单片机,单片机,嵌入式硬件

/***********************头文件*************************/
#include <REGX52.H>
#include <intrins.h>


/***********************单片机初始化引脚****************/
sbit IN1 = P1^4;
sbit IN2 = P1^3;
sbit IN3 = P1^2;
sbit IN4 = P1^1;
sbit ENA = P1^5;       //调速引脚
sbit ENB = P1^0;       //调速引脚
sbit Lsen = P2^7;
sbit Rsen = P2^4;
/****************初始化变量(标志位)***********************/
unsigned int compareA = 80,compareB = 80;    //小车左轮的速度compareA与右轮的速度compareB(0~100)
unsigned int counter = 0;    //卡定时次数的标志位
unsigned int a = 0;    //卡循迹同时扫到黑线的标志位


/***********************要用到的自定义函数******************/
void Delay(unsigned int xms)		//@11.0592MHz,延时函数(多少毫秒)
{
	while(xms)
	{
		unsigned char i, j;
		_nop_();

		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}


void go_ahead()
{
	compareA = 80;
	compareB = 80;
	IN1 = 0;
	IN2 = 1;
	IN3 = 1;
	IN4 = 0;
}

/**********速度慢的执行函数****************/
//void go_ahead_1()
//{
//	compareA = 10;
//	compareB = 10;
//	IN1 = 0;
//	IN2 = 1;
//	IN3 = 1;
//	IN4 = 0;
//}
/************等到最后停不住启动***********/



void turn_left()    //左转函数
{
	compareA = 80;
	compareB = 80;
	IN1 = 0;
	IN2 = 1;
	IN3 = 0;
	IN4 = 1;
}

void turn_right()   //右转函数
{
	compareA = 80;
	compareB = 80;
	IN1 = 1;
	IN2 = 0;
	IN3 = 1;
	IN4 = 0;

}

void stop()    //停止函数
{
	ENA = 0;
	ENB = 0;
}

void xunji()  //循迹函数
{
		if(Lsen == 1 && Rsen == 0)   //这里是循迹扫到黑为1,白为0;也有可能相反,自己去试
		{
			turn_left();   //普通与直角弯
		}
		else if(Lsen == 0 && Rsen == 1)
		{
			turn_right();   //普通与直角弯
		}
		else if( a == 0 && Lsen == 1 && Rsen == 1)
		{
			turn_left();   //“T”字形,右拐也行
			a++;
		}
		else if( a == 1 && Lsen == 1 && Rsen == 1)
		{
			go_ahead();  //也可重新定义一个速度慢的执行函数go_ahead_1()
			a++;
		}
		else if(a == 2 && Lsen == 1 && Rsen == 1)
		{
			stop();
			Delay(200);//调用延时函数
			turn_right(); 
			Delay(500);//调用延时函数,自己调节最后的转角,可能不是500,不触及边线即可
			stop();
			Delay(1000);//保证小车停稳
		}
		else
		{
			go_ahead();//除了以上特殊情况,直行即可
		}
}

/**************************************用于小车调速的定时器*********************************/
void Timer0_Init(void)		//每100微秒进一次中断
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x9C;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;	//定时器0开始计时
	EA = 1;
	ET0 = 1;
	PT0 = 0;
}


void Timer0_Routine() interrupt 1   //中断服务函数
{
	TL0 = 0x9C;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	counter++;
	if(counter == 100)  //100次为一个周期,即100*100=10000us=10ms为一个PWM周期
	{
		counter = 0;
	}
	if(counter > compareA)  
	{
		ENA = 0;
	}
	else if(counter <= compareA)
	{
		ENA = 1;
	}
	else if(counter > compareB)
		{
			ENB = 0;
		}
	else if(counter <= compareB)
		{
			ENB = 1;
		}	
	
}

/****************主函数(程序开始的地方)***********************/
void main()
{
	Timer0_Init();//初始化定时器0
	while(1)
	{
		xunji();
	}

}


 文章来源地址https://www.toymoban.com/news/detail-615660.html

到了这里,关于51单片机——循迹小车源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于单片机智能循迹小车仿真设计

    ** 单片机设计介绍,基于单片机智能循迹小车仿真设计   基于单片机的智能循迹小车是一种通过传感器检测地面情况,并根据设定的规则进行动作控制的机器人。它使用单片机作为主控制器,通过连接放置在车身底部的红外传感器和电机等组件来实现循迹和运动控制。 下

    2024年02月04日
    浏览(43)
  • 51单片机实现简易计算机,Keil4代码Proteus工程一步到位

    目录  前言  Proteus硬件部分 键盘 程序部分 运算代码逻辑(代码解释) LCD屏幕显示运算结果 输入部分 键值判断部分 删除按键的实现 程序执行运算 Hello,大家好。想做关于嵌入式的一些小项目已经很久了,今天借着我们课设的机会,给大家展示我自己对代码逻辑的理解,为了方

    2024年02月08日
    浏览(42)
  • 51单片机迷宫小车的设计

    本次迷宫小车设计,使用C51进行编程,实现小车的功能。本次完成的小车功能可分为两大模块,分别是硬件功能和软件功能。 总共有两部分来写,分别为: 硬件功能上实现了小车的底层驱动,如:红外检测,控制电机使小车进行直行,转弯,自动修正、红外的分时检测,发

    2024年02月06日
    浏览(46)
  • 【C51】10-基础51单片机的小车项目(51完结)

    10.1小车的安装 10.2电机模块的开发(L9110S) 接通 VCC , GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试 IA1 输入高电平, IA1 输入低电平,【 OA1 OB1 】电机正转; IA1 输入低电平, IA1 输入高电平,【 OA1 OB1 】电机反转; IA2 输入高电平, IA2 输入低

    2024年02月08日
    浏览(49)
  • 【51单片机实例教程】智能小车(一)让你的小车跑起来

    文章目录 前言 一、硬件 1.小车底盘 2.51单片机最小系统板 3.L298N双路电机驱动板

    2024年02月11日
    浏览(51)
  • 35、基于51单片机自动灭火避障智能小车 消防灭火小车系统设计

    智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车就是其中的一个体现,本次设计的多功能智能灭火避障小车, 以 STC89C 52单片机作为微控制器,设计出一种 可以寻

    2024年02月03日
    浏览(52)
  • Keil uvision5安装——51单片机篇

    目录 一、Keil uvsion5-下载安装 二、Keil uvsion5-软件破解 三、STC官方库添加 四、Keil相关配置 1.中文显示配置 2.消除定义但未被使用函数的警告配置(针对51单片机) 五、程序烧入软件的使用 步骤1:点击下方链接,将文件下载到电脑上。 链接:https://pan.baidu.com/s/1HI-URr7KCL2bHxK5

    2023年04月09日
    浏览(52)
  • 51单片机入门(1)环境搭建(Keil+ISP)

    在学习51单片机之前,环境搭建是必不可少的一步,本文主要介绍Keil软件和STC-ISP软件的安装 本人只是一个普通的嵌入式低级(初级)玩家,文章主要针对新手,所以大佬要是发现文中有何不妥之处,还请口下留情,若能指出,我一定虚心改正 Keil C51是美国Keil Software公司出品

    2023年04月09日
    浏览(62)
  • 51单片机(STC8) -- 开发环境搭建(Keil C51)

    STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4,后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核(1T),比传统 8051 约快 12 倍以上,指令代码完全兼容传统8051 • 21个中断源,4 级中断优先级 • 支持在线仿真 工作电压 • 1.9V~5.5V 工作温度 • -40℃~85℃ Flash 存储

    2024年01月25日
    浏览(48)
  • 51单片机-PWM调速(直流电机,智能小车的电机调速)

    这次来对PWM做一个总结 最近学习时,发现PWM控制在很多地方都会用到,比如使用PWM来控制电机的速度,使用PWM来生成想要的波形。 那么到底什么是PWM呢? PWM即 脉冲宽度调制 ,在具有惯性的系统中,可以通过对 一系列脉冲的宽度进行调制 ,来等效的获得所需要的模拟参量。

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包