当前位置: 首页 > news >正文

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

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 12sfr 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.lryc.cn/news/92336.html

相关文章:

  • 进程、线程、锁阶段总结汇总
  • Filters.jar图片转素描
  • 将MSYS2 MinGW集成到Windows终端
  • SpringBoot项目使用slf4j的MDC日志打点功能
  • 宝塔修改默认端口后面板打不开
  • tinkerCAD案例:3.基本按钮
  • 客户线上反馈:从信息搜集到疑难 bug 排查全流程经验分享
  • 悲观锁、乐观锁、自旋锁
  • 七、进程地址空间
  • 浅谈智能微电网供电系统的谐波治理
  • springboot项目的社区/博客系统
  • go语言基础——函数、结构体、接口
  • 项目集管理—项目集治理
  • MySQL了解之复制(一)
  • Halcon得出三角形内切圆
  • 2023年6月北京/广州/深圳CDGA/CDGP数据治理认证招生
  • KMP 算法(Knuth-Morris-Pratt)
  • Java泛型详解
  • 2023上海国际嵌入式展 | 如何通过人工智能驱动的自动化测试工具提升嵌入式开发效率
  • 微信小程序个人心得
  • 苹果MacOS系统傻瓜式本地部署AI绘画Stable Diffusion教程
  • DBA之路-- 闪回恢复区FRA(Flash recovery area)与闪回特性(flashback)[待更新]
  • chatgpt赋能python:Python3.6.5到Python3.7.5:升级指南
  • Element UI DatePicker 日期选择器
  • sw2urdf导出的urdf文件中的惯性参数(inertial)错误的问题
  • AICG - Stable Diffusion 学习思考踩坑实录(待续补充)
  • LiangGaRy-学习笔记-Day19
  • 智能指针(1)
  • Steemit 会颠覆 Quora/知乎 甚至 Facebook 吗?
  • 002Mybatis初始化引入