找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3707|回复: 30
收起左侧

STC89c52rc单片机蓝牙驱动小车,求指导 想做一个亲手做的玩具

[复制链接]
ID:727019 发表于 2020-4-11 19:00 来自手机 | 显示全部楼层 |阅读模式
萌新一枚,之前从来没接触过这些,只是想给刚出生不久的儿子做一个亲手做的玩具,如图接好线还好东西都没烧,用手机蓝牙控制,但是电机不转,是什么原因啊,有大佬时间充裕的指导一下小弟好么?
IMG_20200411_185442.jpg
IMG_20200411_185433.jpg
回复

使用道具 举报

ID:727019 发表于 2020-4-11 19:03 | 显示全部楼层
/*
蓝牙小车程序
T0产生PWM控制舵机,T1用于串口通信
舵机330hz
*/
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit PWM=P1^0;          //舵机控制端口
sbit in1=P2^0;         //电机控制端口1
sbit in2=P2^1;         //电机控制端口2
sbit in3=P2^2;         //电机控制端口3
sbit in4=P2^3;         //电机控制端口4


uint time=0,jd;
uchar a;

void InitUART() //串口初始化
{
        TMOD = 0x21;
        PCON = 0x00;
        SCON = 0x50;  
    TH1 = 0xFD;        //T1 波特率9600
    TL1 = 0xFD;
        TR1 = 1;
        TH0  = 0xFF;//T0 0.01ms
        TL0  = 0xF6;
        TR0 = 1;
        ES = 1;
        PS = 1;
        ET0 = 1;
        EA = 1;
       
}

void main ()
{
        InitUART();       
        while (1);
}

void Time0_Int() interrupt 1 //中断程序 1
{
        TR0=0;
        TH0=0xFF;
        TL0=0xF6;
        TR0=1;
        time++;
        if(time>300)
        time=0;         //303个周期  330hz
        if (time<=jd)
        PWM=1;
        else
        PWM=0;
       
}

void UARTInterrupt () interrupt 4  //中断程序 4
{

if(RI==1)
    {
            RI = 0;
                a = SBUF;
                if (a == '0')  //前进
                {
                        in1=1;
                        in2=0;
                        in3=1;
                        in4=0;

                }
                if (a == '1')           //后退
                {
                        in1=0;
                        in2=1;
                        in3=0;
                        in4=1;
                }
                if (a == '2')                //停止
                {
                        in1=1;
                        in2=1;
                        in3=1;
                        in4=1;
                }
                if(a == '3')                //左转
                {           
                        jd=22;
                }
                if(a == '4')                //右转
                {          
                        jd=34;
                }
                if(a == '5')                 //回中
                {          
                        jd=28;                         
                }                        
        }  
       
}

回复

使用道具 举报

ID:727019 发表于 2020-4-11 19:05 | 显示全部楼层
已经研究了2.3天了,头都搞大了,如果不是实在想不出来,也不想麻烦大佬们啊
回复

使用道具 举报

ID:727019 发表于 2020-4-11 20:21 来自手机 | 显示全部楼层
哪位大佬帮帮忙啊
回复

使用道具 举报

ID:367369 发表于 2020-4-11 21:26 | 显示全部楼层
你先把   in1 in2 in3    in4      
直接在main函数中赋值,看电机是否转动
void   main ()
{
                        in1=1;
                        in2=0;
                        in3=1;
                        in4=0;

}

然后蓝牙接电脑上面看看收到的手机指令是否正确
回复

使用道具 举报

ID:283908 发表于 2020-4-11 22:40 | 显示全部楼层
是不是while()要运行蓝牙发过来的东西
比例:
void Remote()
{
        switch(a)
        {
                case 0X02:        停车函数 (  );        break;        //停车
                case 0X00:        前进函数();        break;        //前进
        }       
}



void main ()
{
        InitUART();        
        while (1)
     {
         Remote();
     }
}
还有波特率9600、主板晶振是不是11.0592
蓝牙的波特率也要设置在9600

回复

使用道具 举报

ID:727019 发表于 2020-4-11 23:15 来自手机 | 显示全部楼层
game灬boy 发表于 2020-4-11 21:26
你先把   in1 in2 in3    in4      
直接在main函数中赋值,看电机是否转动
void   main ()

你的意思是把程序修改一下试试么,就是把你发的这个插入到括号里是么
回复

使用道具 举报

ID:727019 发表于 2020-4-11 23:17 来自手机 | 显示全部楼层
神蜂 发表于 2020-4-11 22:40
是不是while()要运行蓝牙发过来的东西
比例:
void Remote()

前面的程序我看的不太懂,但是最后那个中文我烧程序时注意了,都是吻合的
回复

使用道具 举报

ID:283908 发表于 2020-4-12 08:16 | 显示全部楼层
yuhui1023 发表于 2020-4-11 23:17
前面的程序我看的不太懂,但是最后那个中文我烧程序时注意了,都是吻合的

那不急,我50几岁了,搞电器维修的,平时不会打牌,工作之余业余爱好学习单片机打发时间。

刚刚开始学单片机时也是这样,推荐你看看这里的教程,http://www.51hei.com/bbs/dpj-183489-1.html

希望,借51黑电子论坛,让我们单片机技术和你儿子一起成长。
回复

使用道具 举报

ID:727019 发表于 2020-4-12 10:58 来自手机 | 显示全部楼层
神蜂 发表于 2020-4-12 08:16
那不急,我50几岁了,搞电器维修的,平时不会打牌,工作之余业余爱好学习单片机打发时间。

刚刚开始学 ...

谢谢大叔,您诠释了什么叫学无止境
回复

使用道具 举报

ID:727019 发表于 2020-4-12 14:33 来自手机 | 显示全部楼层
用USB转TTL连接电脑和蓝牙,用手机键盘发送文本,电脑也能收到。。。
mmexport1586673037721.jpg
回复

使用道具 举报

ID:727019 发表于 2020-4-12 16:09 | 显示全部楼层
实物连接图

实物图

实物图
回复

使用道具 举报

ID:514901 发表于 2020-4-12 16:33 | 显示全部楼层
1,298的输入电压一般是9~12V
2,51单片机没烧程序的话一般IO口都是高电平,要让电机转的话需要一高一低,你可以接开发板的VCC和GND试试就会转了
3,蓝牙控制的话需要烧录单片机程序
回复

使用道具 举报

ID:727019 发表于 2020-4-12 17:20 | 显示全部楼层
郑汉松 发表于 2020-4-12 16:33
1,298的输入电压一般是9~12V
2,51单片机没烧程序的话一般IO口都是高电平,要让电机转的话需要一高一低, ...

我把电机线直接接在开发板的+5和GND是可以直接转的,但是用蓝牙就是不转
回复

使用道具 举报

ID:727019 发表于 2020-4-12 22:16 来自手机 | 显示全部楼层
没人帮忙了么。。。
回复

使用道具 举报

ID:727019 发表于 2020-4-13 08:09 来自手机 | 显示全部楼层
又是元气满满的一天,继续坐在电脑面前瞎摸索
回复

使用道具 举报

ID:367369 发表于 2020-4-13 11:42 | 显示全部楼层
串口优先级是否高于定时器优先级?还有蓝牙发送的数据格式是什么16进制还是字符?我看见你前面发了一张蓝牙接收的图片,你将你的串口助手设置为16进制接受看看接收数据还是否为12345,如果不是,你的单片机接受的就是字符‘1’;‘2’;‘3’;‘4’;‘5’;了而不是接收的数字12345,如果是字符请将接受的数据减0x30, a = SBUF-0x30;或者写为 a = SBUF-'0';
回复

使用道具 举报

ID:727019 发表于 2020-4-13 14:21 来自手机 | 显示全部楼层
game灬boy 发表于 2020-4-13 11:42
串口优先级是否高于定时器优先级?还有蓝牙发送的数据格式是什么16进制还是字符?我看见你前面发了一张蓝牙 ...

我改成16进制后显示的是04,不是单纯的4,如果需要改程序怎么改啊?请问能加您一个微信么
回复

使用道具 举报

ID:367369 发表于 2020-4-13 19:17 | 显示全部楼层
yuhui1023 发表于 2020-4-13 14:21
我改成16进制后显示的是04,不是单纯的4,如果需要改程序怎么改啊?请问能加您一个微信么

你的程序判断的条件有问题,我看到PS已经置1,说明串口中断优先级较高,你的if(a==‘0’)是在判断a等于字符0而不是a等于数字0,你可以把if括号中的判断条件改为a==0,或者a==‘0’-0x30
加好友得私发,直接评论会被删
回复

使用道具 举报

ID:727019 发表于 2020-4-13 22:39 来自手机 | 显示全部楼层
game灬boy 发表于 2020-4-13 19:17
你的程序判断的条件有问题,我看到PS已经置1,说明串口中断优先级较高,你的if(a==‘0’)是在判断a等于 ...

好的谢谢了,明天我再试一下
回复

使用道具 举报

ID:727019 发表于 2020-4-14 08:29 | 显示全部楼层
还是元气满满的一天,继续坐在电脑面前瞎捉摸
回复

使用道具 举报

ID:342451 发表于 2020-4-14 19:07 | 显示全部楼层
给你套资料,仅供参考,挺全面的,当时玩这个的时候是参照他的

《蓝牙车资料包》.zip

10.58 MB, 下载次数: 12

回复

使用道具 举报

ID:342451 发表于 2020-4-14 19:09 | 显示全部楼层
做蓝牙小车,首先你先别急着去搞电机,你先确定好蓝牙与手机之间的通信部分是正常的,比如你手机按下,板子上点亮一个小灯,从最简单的现象上去判断问题。
回复

使用道具 举报

ID:727019 发表于 2020-4-15 16:40 来自手机 | 显示全部楼层
之一知足 发表于 2020-4-14 19:07
给你套资料,仅供参考,挺全面的,当时玩这个的时候是参照他的

谢谢你,好人呐
回复

使用道具 举报

ID:727019 发表于 2020-4-18 09:22 来自手机 | 显示全部楼层
新的问题又来了,通讯口连接电脑供电单片机用蓝牙是可以控制的,从l298n接过来的5vDC口供电就不能控制,只有一个开关电源灯亮是怎么回事啊
回复

使用道具 举报

ID:691449 发表于 2020-4-18 11:41 | 显示全部楼层
蓝牙模块的灯亮不亮?
回复

使用道具 举报

ID:727019 发表于 2020-4-18 15:15 来自手机 | 显示全部楼层
xianming 发表于 2020-4-18 11:41
蓝牙模块的灯亮不亮?

亮的,同样的接线,同样的程序,用电脑的usb接通信接口,可以控制小车,板上的灯也亮,但是用l298n输出的5V接DC口就不行了,只有电源灯亮,控制的led灯不亮,我还用手机充电器转的5V接通信接口,也不亮
回复

使用道具 举报

ID:727019 发表于 2020-4-19 23:41 来自手机 | 显示全部楼层
感谢好多热心人技术支持,完工一大半了
mmexport1587310859392.jpg
回复

使用道具 举报

ID:727019 发表于 2020-4-20 15:40 来自手机 | 显示全部楼层
程序这卡住了,谁能帮我修改下程序啊
回复

使用道具 举报

ID:727019 发表于 2020-5-6 06:59 来自手机 | 显示全部楼层
基本完成了
IMG_20200417_193705.jpg
回复

使用道具 举报

ID:727019 发表于 2020-5-8 22:58 来自手机 | 显示全部楼层
完成了
IMG_20200507_122534.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表