社区
单片机/工控
帖子详情
C51编写单片机小车程序
大邪神
2012-06-24 12:25:51
走迷宫的单片机小车
硬件:3个光电开关分别置于车头前、左、右3个方向。
3轮小车,使用两个直流电机分别控制小车前两轮,后轮为万向轮;转弯通过一个电机工作,另一电机停止实现。
功能:前进时遇到障碍物转弯。
主要问题是光电开关的对电机的控制函数不会写
...全文
553
7
打赏
收藏
C51编写单片机小车程序
走迷宫的单片机小车 硬件:3个光电开关分别置于车头前、左、右3个方向。 3轮小车,使用两个直流电机分别控制小车前两轮,后轮为万向轮;转弯通过一个电机工作,另一电机停止实现。 功能:前进时遇到障碍物转弯。 主要问题是光电开关的对电机的控制函数不会写
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大邪神
2012-06-29
打赏
举报
回复
我最后编成这个样子,光电开关输出0为有障碍物,输出1为通路。以下程序能成功走出特定迷宫(通用性比较差,因为老师最后检查看的是离开迷宫的速度,智能要求不高)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define t 1
#define tr 120
#define tl 125
uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00为熄灭符
sfr P4 = 0xE8;
sbit IN1 =P1^0;
sbit IN2=P1^1;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit LED1=P2^6;
sbit LED2=P2^7;
sbit LightF=P3^2;
sbit LightL=P4^6;
sbit LightR=P3^7;
sbit BEEP=P4^4;
/********以下是延时函数********/
void Delay_ms(uint xms) //延时程序,xms是形式参数
{
uint i, j;
for(i=xms;i>0;i--) // i=xms,即延时xms, xms由实际参数传入一个值
for(j=115;j>0;j--); //此处分号不可少
}
/********以下是显示函数********/
void display()
{
P0=seg_data[0]; //显示毫秒十位
P2=0xfe; //开个位显示(开第1只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[1]; //显示毫秒百位
P2=0xfd; //开十位显示(开第2只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[2]; //显示秒个位
P2=0xfb; //开百位显示(开第3只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[3]; //显示秒十位
P2=0xf7; //开个位显示(开第4只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[4]; //显示分个位
P2=0xef; //开十位显示(开第5只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[5]; //显示分十位
P2=0xdf; //开个位显示(开第6只数码管)
Delay_ms(t); //延时10ms
P2=0xff;
}
/********以下是电机控制函数*********/
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
Delay_ms(10);
}
void qianjin()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void leftturn(uint ms)
{
LED2=0;
IN1=0;
IN2=1;
IN3=0;
IN4=1;
Delay_ms(ms);
}
void rightturn(uint ms)
{
LED1=0;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
Delay_ms(ms);
}
/********以下是蜂鸣器函数********/
void beep()
{
BEEP=0;
Delay_ms(50);
BEEP=1;
Delay_ms(50);
}
//****************主程序******************//
void main()
{ P0=0xff;
P2=0xff;
P1=0xff;
P4=0xff;
while(1)
{
display();
if (LightL==1)
{
qianjin();
Delay_ms(130);
stop();
leftturn(tl);
stop();
qianjin();
Delay_ms(200);
}
else if(LightR==1)
{
qianjin();
Delay_ms(160);
stop();
rightturn(tr);
stop();
qianjin();
Delay_ms(200);
}
else if(LightF==1)
{
qianjin();
if(LightR==1)
{
qianjin();
Delay_ms(50);
stop();
rightturn(tr);
stop();
qianjin();
Delay_ms(200);
}
if(LightL==1)
{
qianjin();
Delay_ms(50);
stop();
leftturn(tl);
stop();
qianjin();
Delay_ms(200);}
}
else if(LightR==0&&LightL==0&&LightF==0)
{
stop();
beep();
rightturn(280);
stop();
qianjin();
Delay_ms(50);
}
}
}
备注一下,我是北京邮电大学的学生
AnYidan
2012-06-24
打赏
举报
回复
车头遇障碍检测左右的通路,决定两个电机应该如何工作,哪一个停止,哪一个运行
如果左右也无通路,退回并检测左右是否有通路
1。小车长时间走直路比较困难,要求两个电机完全运行一致
2。看看走迷宫的算法,
大邪神
2012-06-24
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
对了,不支持倒车的话如果左前右都有障碍也可以不用停下来,还是停一轮运行另一轮使之转向180度掉头
[/Quote]
你就当“左前右都有障碍”不会发生。。。还有一点,Detect函数怎样写?我不知道接上光电开关之后怎样让其发挥效果
江南一书生
2012-06-24
打赏
举报
回复
对了,不支持倒车的话如果左前右都有障碍也可以不用停下来,还是停一轮运行另一轮使之转向180度掉头
江南一书生
2012-06-24
打赏
举报
回复
三个光电器件分别检测左中右是否有障碍。
伪代码:
while(1)
{
if(DetectBlock(FRONT))//前向有障碍
{
if(!DetectBlock(LEFT))//左边无障碍
{
//向左转
StopWheel(LEFT);
DriveWheel(RIGHT);
Wait();//根据电机转速延时一定时间使转向90度
}
else if(!DetectBlock(RIGHT))//右边无障碍
{
//向右转
StopWheel(RIGHT);
DriveWheel(LEFT);
Wait();//根据电机转速延时一定时间使转向90度
}
else//左右都有障碍 :(
{
//不支持倒车的话只好停下来
StopWheel(LEFT);
StopWheel(RIGHT);
}
}
else//前向无障碍
{
//继续前进
DriveWheel(LEFT);
DriveWheel(RIGHT);
}
}
大邪神
2012-06-24
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
车头遇障碍检测左右的通路,决定两个电机应该如何工作,哪一个停止,哪一个运行
[/Quote]
这也是我的想法,不用考虑后退问题,(如果考虑后退,电机运行的一致性就比较重要,所以同样地,电机是否一致也不考虑)
我只是代码不会写。。。。
C51
智能循迹
小车
源码+课件
C51
智能循迹
小车
课件和源码,包含如何制作
小车
模型和51
单片机
的
程序
编写
物联网与嵌入式领域-
单片机
小车
C51
程序
代码
2023年度博客之星《物联网与嵌入式》赛道第20名倾情奉献第一个资源,包含电机驱动
程序
、蓝牙串口
程序
、红外循迹
程序
、超声波避障
程序
等多个功能子
程序
,主
程序
中包含部分需要可进行改变裁剪! 适合
小车
竞赛、课程设计、课外实践、
单片机
入门学习等,代码都很简单,会点C语言基本都能读懂! 资源代码由自己
编写
裁剪,参考了互联网上部分代码!如侵权必删!
51
单片机
期末课程作业之蓝牙、操控、测速、里程
小车
源码+设计报告
51
单片机
期末课程作业 设计首先实现对
小车
行驶时的平均速度、即时速度以及里程等行驶参量的实时测量和显示功能,扩展了对
小车
的行驶时间的显示功能。 设计硬件部分设计采用了STC公司的STC89C52系列
单片机
为微控制器,根据车辆里程记录仪的要求对系统的主控模块、液晶显示模块、行车数据采集测量模块、蓝牙通信模块以及电机驱动等模块进行了设计。软件设计以Proteus为开发平台,结合
C51
系列
单片机
强大的在线调试能力,以C语言为编程语言
编写
出实用
程序
。并将之运用到了实物测试之中。 关键词:
c51
单片机
、 0.96OLED显示 、蓝牙控制、 L298n、 霍尔电机 详情请见主页课程设计同名博客
基于51
单片机
的智能寻迹
小车
.zip
本项目是作者研究
C51
单片机
时
编写
的小项目可以直接测试使用
keil_nice_蓝牙控制机械手
小车
c51
_ducktya_
51
单片机
的蓝牙
小车
,包括对定时器的处理和
程序
流程
单片机/工控
27,374
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章