【C51】10-基础51单片机的小车项目(51完结)

news2024/11/27 7:44:43

10.1小车的安装

10.2电机模块的开发(L9110S)

接通 VCC GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试
IA1 输入高电平, IA1 输入低电平,【 OA1 OB1 】电机正转;
IA1 输入低电平, IA1 输入高电平,【 OA1 OB1 】电机反转;
IA2 输入高电平, IA2 输入低电平,【 OA2 OB2 】电机正转;
IA2 输入低电平, IA2 输入高电平,【 OA2 OB2 】电机反转;

 10.3驱动电机模块让小车动起来(前后左右)

#include "reg52.h"
#include "intrins.h"

sbit RightCon1A = P3^2;
sbit RightCon1B = P3^3;

sbit LeftCon1A = P3^4;
sbit LeftCon1B = P3^5;

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void goForward()
{
	LeftCon1A = 0;
	LeftCon1B = 1;
	
	RightCon1A = 0;
	RightCon1B = 1;
}

void goRight()
{
	LeftCon1A = 0;
	LeftCon1B = 1;
	
	RightCon1A = 0;
	RightCon1B = 0;
}


void goLeft()
{
	LeftCon1A = 0;
	LeftCon1B = 0;
	
	RightCon1A = 0;
	RightCon1B = 1;
}

void goBack()
{
	LeftCon1A = 1;
	LeftCon1B = 0;
	
	RightCon1A = 1;
	RightCon1B = 0;
}

void main()
{
	while(1){
		goForward();
		Delay1000ms();
		Delay1000ms();
		goBack();
		Delay1000ms();
		Delay1000ms();
		goLeft();
		Delay1000ms();
		Delay1000ms();
		goRight();
		Delay1000ms();
		Delay1000ms();
	}
}


10.4通过串口控制小车方向

        1.通过串口调试工具  利用串口中断

#include "reg52.h"
#include "motor.h"
#include <string.h>

#define SIZE 12

sfr AUXR = 0x8E;

char buffer[SIZE];

void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR = 0x01;
	SCON = 0x50; //配置串口工作方式1,REN使能接收
	TMOD &= 0x0F;
	TMOD |= 0x20;//定时器1工作方式位8位自动重装
	
	TH1 = 0xFD;
	TL1 = 0xFD;//9600波特率的初值
	TR1 = 1;//启动定时器
	
	EA = 1;//开启总中断
	ES = 1;//开启串口中断
}

//通过串口中断的方式进行 	M1 前 M2 后 M3左 M4右
void Uart_Handler() interrupt 4
{
	static int i = 0;//静态变量,被初始化一次
	char tmp;

	if(RI)//中断处理函数中,对于接收中断的响应
	{
			RI = 0;//清除接收中断标志位
			tmp = SBUF;
			if(tmp == 'M'){
				i = 0;
			}
			buffer[i++] = tmp;
			
			//灯控指令
			if(buffer[0] == 'M'){
				switch(buffer[1]){
					case '1':
						goForward();    
						break;
					case '2':
						goBack();
						break;
					case '3':
						goLeft();
						break;
					case '4':
						goRight();
						break;
					default:
						stop();
					break;
				}
			}
			if(i == 12){
				i = 0;
				memset(buffer, '\0', SIZE);
			}				
	}
		
}

         2.通过蓝牙

添加点动控制,如果 APP 支持按下一直发数据,松开就停止发数据(蓝牙调试助手的自定义按键不
能实现),就能实现前进按键按下后小车一直往前走的功能

10.5利用PWM对小车进行调速

原理 : 全速前进是 LeftCon1A = 0; LeftCon1B = 1; 完全停止是 LeftCon1A = 0;LeftCon1B = 0; 那么单位时 间内,比如20ms, 15ms 是全速前进, 5ms 是完全停止,
速度就会比 5ms 全速前进, 15ms 完全停止获得的功率多,相应的速度更快!
开发 :借用 PWM 的舵机控制代码
//main.c
extern char speed;
void main()
{
Time0Init();
//UartInit();
while(1){
speed = 10;//10份单位时间全速运行,30份停止,所以慢,20ms是40份的500us
Delay1000ms();
Delay1000ms();
speed = 20;
Delay1000ms();
Delay1000ms();
speed = 40;
Delay1000ms();
Delay1000ms();
}
}
//time.c
#include "motor.h"
#include "reg52.h"
char speed;
char cnt = 0;
void Time0Init()
{
//1. 配置定时器0工作模式位16位计时
TMOD = 0x01;
//2. 给初值,定一个0.5出来
TL0=0x33;
TH0=0xFE;
//3. 开始计时
TR0 = 1;
TF0 = 0;
//4. 打开定时器0中断
ET0 = 1;
//5. 打开总中断EA
EA = 1;
}
void Time0Handler() interrupt 1
{
cnt++; //统计爆表的次数. cnt=1的时候,报表了1
//重新给初值
TL0=0x33;
TH0=0xFE;
//控制PWM波
if(cnt < speed){
//前进
goForward();
}else{
//停止
stop();
}
if(cnt == 40){//爆表40次,经过了20ms
cnt = 0; //当100次表示1s,重新让cnt从0开始,计算下一次的1s
}
}

10.6循迹小车

        1.循迹模块使用

 TCRT5000传感器的红外发射二极管不断发射红外线

当发射出的红外线 没有 被反射回来或被反射回来但强度不够大时,
红外接收管一直处于关断状态, 此时模块的输出端为高电平 ,指示二极管一直处于 熄灭状态
被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和,
此时模块的输出端为 低电平 ,指示 二极管被点亮

//main.c

#include "motor.h"
#include "delay.h"
#include "reg52.h"

sbit Leftxunji  = P2^7;  //左循迹模块
sbit Rightxunji = P2^6;  //右循迹模块

void main()
{
	while(1){
		/*下方小车两个模块都能反射回来红外,输出低电平,灯亮,直走
上方小车左模块遇到黑线,红外被吸收,左模块输出高电平,右模块输出低电平,左转,反之右转*/
		if(Leftxunji == 0 && Rightxunji == 0){
			goForward();//前进
		}
		if(Leftxunji == 1 && Rightxunji == 1){
			stop();     //停止
		}
		if(Leftxunji == 0 && Rightxunji == 1){
			goRight();  //向右
		}
		if(Leftxunji == 1 && Rightxunji == 0){
			goLeft();		//向左
		}
	}
}

//motor.c

#include "reg52.h"

sbit RightCon1A = P3^2;
sbit RightCon1B = P3^3;

sbit LeftCon1A = P3^4;
sbit LeftCon1B = P3^5;

void goForward()
{
	LeftCon1A = 0;
	LeftCon1B = 1;
	
	RightCon1A = 0;
	RightCon1B = 1;
}

void goRight()
{
	LeftCon1A = 0;
	LeftCon1B = 1;
	
	RightCon1A = 0;
	RightCon1B = 0;
}


void goLeft()
{
	LeftCon1A = 0;
	LeftCon1B = 0;
	
	RightCon1A = 0;
	RightCon1B = 1;
}

void goBack()
{
	LeftCon1A = 1;
	LeftCon1B = 0;
	
	RightCon1A = 1;
	RightCon1B = 0;
}

void stop()
{
	LeftCon1A = 0;
	LeftCon1B = 0;
	
	RightCon1A = 0;
	RightCon1B = 0;
}



语音控制小车 SU-03T LD3320

网盘资料
https://pan.baidu.com/s/1dXQSla_8D5O3D7UCsHZ0Dw 提取码 3k5a
这个语音模块不需要编程,不需要二次开发
通过厂家给的网站配置后即可使用,傻瓜式操作,

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IIC电平转换电路原理分析

一&#xff0c;简介 本文主要介绍IIC电平转换电路的原理&#xff0c;记录总结。 二&#xff0c;准备知识&#xff08;芯片介绍AW39114BQNR&#xff09; 登录官网&#xff0c;搜索该芯片的名称&#xff0c;查看对应的芯片手册。 芯片介绍&#xff1a; 典型应用电路&#xf…

【RISCV】RISCV e-906实现Tickless

Tickless 最初设计的思想是,能被任务唤醒,也能被中断唤醒 参考文章: freeRTOS 低功耗模式 和 空闲任务 FreeRTOS源码分析与应用开发09:低功耗Tickless模式 FreeRTOS学习十(低功耗) 【STM32】NVIC与中断控制 之 sysTick定时器 M3,M4实现tickleess的做法: M3,M4的机制:…

AIGC时代,基于云原生 MLOps 构建属于你的大模型(上)

为了满足企业在数字化转型过程中对更新迭代生产力工具的需求&#xff0c;灵雀云近日推出了云原生 MLOps 解决方案&#xff0c;帮助企业快速落地AI技术、实现智能化应用和服务。 为什么要打造云原生MLOps解决方案&#xff1f; 随着信息化技术的不断发展&#xff0c;企业在数字化…

什么是真正的骨传导耳机,几款不错的骨传导蓝牙耳机分享

骨传导耳机是通过耳朵传声方式&#xff0c;提高了听神经的使用频率&#xff0c;对听觉系统所产生刺激会随之下降。目前骨传导耳机主要应用于运动和娱乐两大领域&#xff0c;尤其是在运动场景中骨传导耳机能够避免传统耳机因佩戴入耳式耳机造成的听力下降问题&#xff0c;更能增…

vue播放rtsp流方案(支持h265)

前提 如果你的rtsp流不是h265的&#xff0c;可以使用webRtc-stream进行播放&#xff0c;我测试延迟1.5秒左右 参考链接: link 这个操作也挺方便的&#xff0c;也就是下载&#xff0c;启动 如果是h265&#xff0c;可以使用ffmpeg node rest2web jsmpeg方案。这个优点是特别快…

如何用Java代码操作数据库(JDBC编程)

目录 JDBC编程的由来 JDBC编程的准备工作 1. 下载数据库驱动包 2. 将jar包作为标准库​编辑 3. 编写JDBC代码&#xff08;需要通过下面几个步骤完成开发&#xff09; &#xff08;1&#xff09;JDBC编程&#xff08;在数据库中插入一条记录&#xff09; 运行结果&#xff1a;…

ZEPPELIN部署接入华为云MRS

ZEPPELIN部署接入华为云MRS 安装zeppelin配置Spark连接常见问题连接pg报错 Py4JJavaError: An error occurred while calling o779.load. : org.postgresql.util.PSQLException: The authentication type 5 is not supported. Check that you have configured the pg_hba.conf …

OpenMMLab-AI实战营第二期——3-1.深度学习预训练与MMPretrain

文章目录 1. MMPreTrain算法库介绍1.1 算法库与任务组成1.2 框架概览 2. 经典主干网络2.1 ResNet2.2 Vision Transformer 3. 自监督学习3.1 SimCLR3.2 MAE3.3 iBOT 4. 多模态算法4.1 CLIP4.2 BLIP 视频链接&#xff1a;b站-深度学习预训练与MMPretrain 1. MMPreTrain算法库介绍…

高并发下如何保证接口幂等性?

文章目录 前言&#xff1a; 一、insert前先select 二、加悲观锁 三、加乐观锁 四、加唯一索引 五、建防重表 六、根据状态机 七、加分布式锁 八、获取token 前言&#xff1a; 接口幂等性问题&#xff0c;对于开发人员来说&#xff0c;是一个跟语言无关的公共问题。本文分…

粮油食品行业MES系统源码

MES系统可以提供全面的生产过程监控和数据分析&#xff0c;帮助企业实现智能化、数字化生产。同时&#xff0c;MES系统可以优化生产计划和物料配送&#xff0c;降低废品率和能耗&#xff0c;提高生产效率和质量&#xff0c;降低生产成本&#xff0c;增加利润。 一、粮油MES系统…

C#,彩票数学——彩票预测是玄学还是数学?什么是彩票分析?怎么实现彩票号码的预测?

彩票原理系列文章 彩票与数学——彩票预测是玄学还是数学&#xff1f;https://mp.csdn.net/mp_blog/creation/editor/122517043彩票与数学——常用彩票术语的统计学解释https://mp.csdn.net/mp_blog/creation/editor/122474853彩票与数学——彩票缩水的数学概念与原理https://…

小狐狸ChatGPT创作系统如何添加AI文本创作自定义模型,自定义模型方法

后台根据自己的定位选建好类别管理 具体模型文档参照如下对应修改或新增,格式 :模型标题+描述+模型内容+提示文字 模型标题描述模型内容提示文字写一篇文章用你喜欢的语言写一篇关于任何主题的文章用[TARGETLANGGE]写一篇关于[PROMPT]的文章输入文章的主题,然后按发送键按…

【微信小程序插件】下拉刷新、下拉加载

概述 今天在优化小程序的列表时候&#xff0c;想要把原生的 scroll-view 组件替换成一个下拉刷新的组件&#xff0c;然后就找了一下&#xff0c;果然有大神已经封装好。coolui-scroller 就是这样满足需求的一款插件&#xff0c;但是微信官网给出的描述以及安装引入的方式&…

Python读取CSV文件的几种方法

话不多说&#xff0c;开干&#xff01;&#xff01;&#xff01; 目录 1. 使用 csv 模块 2.使用 numpy 库 3.使用pandas库 4.使用标准库中的 csv 模块 5.注意事项 1. 使用 csv 模块 &#xff08;1&#xff09;项目目录如下图所示&#xff1a; &#xff08;2&#xff09;…

皕杰报表中的图表钻取

皕杰报表中图表的钻取是通过超链接实现的&#xff0c;其实质就是通过超链接打开了一张的新表&#xff0c;而把原表中的条件通过参数传递给新表&#xff0c;从而得到我们所需的明细数据。 超链接的地址在单元格的超链接地址属性里添加属性值&#xff0c;如果超链接字符串不需要动…

企业级微服务架构实战项目--xx优选1

一 项目概述 1.1 项目概述 xx优选项目&#xff1a;是依托社区和团长社交关系实现生鲜商品流通的新零售模式。 1.2 技术栈 1.3 功能架构图 第2部分 1.4 技术架构* 1.5 工程结构 ssyx-parent&#xff1a;父工程&#xff0c;根目录&#xff0c;管理子模块&#xff1a; ​ comm…

如何自动化的对PCAP数据包进行suricata/snort/zeek分析

在前一篇文章中&#xff0c;这里介绍了dalton的安装&#xff0c;以及使用dalton中的多种探针手动分析pcap数据包。在和其他程序联动的时候&#xff0c;手动分析无法满足要求&#xff0c;本篇文章将介绍如何通过使用dalton提供的API进行数据包的自动化分析。 在手动提交数据包分…

从零手写操作系统之RVOS系统调用实现-09

从零手写操作系统之RVOS系统调用实现-09 系统模式&#xff1a;用户态和内核态如何让任务运行在用户态下 系统模式的切换用户模式下访问特权指令测试系统调用系统调用执行流程系统调用传参规范系统调用封装 系统调用完整流程解析执行测试 本系列参考: 学习开发一个RISC-V上的操作…

基于html+mysql+Spring+mybatis+Springboot的Springboot宠物医院管理系统

运行环境: 最好是java jdk 1.8&#xff0c;我在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以&#xff0c;如果编译器的版本太低&#xff0c;需要升级下编译器&#xff0c;不要弄太低的版本 tomcat服务器环…

一般人不要轻易去自学网络安全(黑客)

笔者本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 我为啥说自学黑客&#xff0c;一般人我还是劝你算了吧&#xff01;因为我就是那个不一般的人。 首先我谈下对黑客&a…