社区
单片机/工控
帖子详情
C51编写单片机小车程序
dxsooo
2012-06-24 12:25:51
走迷宫的单片机小车
硬件:3个光电开关分别置于车头前、左、右3个方向。
3轮小车,使用两个直流电机分别控制小车前两轮,后轮为万向轮;转弯通过一个电机工作,另一电机停止实现。
功能:前进时遇到障碍物转弯。
主要问题是光电开关的对电机的控制函数不会写
...全文
627
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
单片机
蓝牙
小车
.zip
通过
编写
C51
程序
,我们可以控制
单片机
的各个I/O端口,实现对电机、传感器等硬件设备的控制,进而构建出各种智能系统。在这个蓝牙
小车
项目中,
C51
单片机
负责处理来自蓝牙模块的指令,并驱动
小车
的马达和其他执行机构...
51
单片机
智能
小车
控制
程序
【51
单片机
智能
小车
控制
程序
】是基于
C51
编程语言设计的一个系统,用于实现对智能
小车
的精确操控。
C51
是一种专为8051系列
单片机
编写
的嵌入式编程语言,具有丰富的库函数和易于理解的语法,非常适合初学者和专业人士...
基于
c51
单片机
的智能循迹
小车
培训课件.ppt
软件设计方面,主要涉及PC端开发,需要
编写
程序
来实现对
单片机
的控制,包括但不限于路径识别、运动控制等。
程序
需要能够处理传感器的输入信号,并输出控制信号,使
小车
能够根据路径的变化做出相应的运动调整。此外,...
C51
单片机
控制的智能搬运
小车
【
C51
单片机
控制的智能搬运
小车
】是一个典型的嵌入式系统项目,它结合了硬件设计和软件编程,旨在实现自动化物料搬运。在这个项目中,51系列
单片机
作为核心控制器,通过C语言进行编程,使得
小车
能够自主地执行搬运...
单片机
培训课程--基于
C51
单片机
的智能循迹
小车
制作.rar
在本压缩包中,我们主要关注的是“
单片机
培训课程——基于
C51
单片机
的智能循迹
小车
制作”。这个项目涉及到的核心技术主要包括
单片机
编程、C语言应用以及电子电路设计。下面将对这些关键知识点进行详细的阐述。 1. *...
单片机/工控
27,517
社区成员
28,799
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章