找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4938|回復(fù): 30
收起左側(cè)

STC89c52rc單片機(jī)藍(lán)牙驅(qū)動小車,求指導(dǎo) 想做一個親手做的玩具

[復(fù)制鏈接]
ID:727019 發(fā)表于 2020-4-11 19:00 來自觸屏版 | 顯示全部樓層 |閱讀模式
萌新一枚,之前從來沒接觸過這些,只是想給剛出生不久的兒子做一個親手做的玩具,如圖接好線還好東西都沒燒,用手機(jī)藍(lán)牙控制,但是電機(jī)不轉(zhuǎn),是什么原因啊,有大佬時間充裕的指導(dǎo)一下小弟好么?
IMG_20200411_185442.jpg
IMG_20200411_185433.jpg
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-11 19:03 | 顯示全部樓層
/*
藍(lán)牙小車程序
T0產(chǎn)生PWM控制舵機(jī),T1用于串口通信
舵機(jī)330hz
*/
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit PWM=P1^0;          //舵機(jī)控制端口
sbit in1=P2^0;         //電機(jī)控制端口1
sbit in2=P2^1;         //電機(jī)控制端口2
sbit in3=P2^2;         //電機(jī)控制端口3
sbit in4=P2^3;         //電機(jī)控制端口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')  //前進(jìn)
                {
                        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')                //左轉(zhuǎn)
                {           
                        jd=22;
                }
                if(a == '4')                //右轉(zhuǎn)
                {          
                        jd=34;
                }
                if(a == '5')                 //回中
                {          
                        jd=28;                         
                }                        
        }  
       
}

回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-11 19:05 | 顯示全部樓層
已經(jīng)研究了2.3天了,頭都搞大了,如果不是實(shí)在想不出來,也不想麻煩大佬們啊
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-11 20:21 來自觸屏版 | 顯示全部樓層
哪位大佬幫幫忙啊
回復(fù)

使用道具 舉報

ID:367369 發(fā)表于 2020-4-11 21:26 | 顯示全部樓層
你先把   in1 in2 in3    in4      
直接在main函數(shù)中賦值,看電機(jī)是否轉(zhuǎn)動
void   main ()
{
                        in1=1;
                        in2=0;
                        in3=1;
                        in4=0;

}

然后藍(lán)牙接電腦上面看看收到的手機(jī)指令是否正確
回復(fù)

使用道具 舉報

ID:283908 發(fā)表于 2020-4-11 22:40 | 顯示全部樓層
是不是while()要運(yùn)行藍(lán)牙發(fā)過來的東西
比例:
void Remote()
{
        switch(a)
        {
                case 0X02:        停車函數(shù) (  );        break;        //停車
                case 0X00:        前進(jìn)函數(shù)();        break;        //前進(jìn)
        }       
}



void main ()
{
        InitUART();        
        while (1)
     {
         Remote();
     }
}
還有波特率9600、主板晶振是不是11.0592
藍(lán)牙的波特率也要設(shè)置在9600

回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-11 23:15 來自觸屏版 | 顯示全部樓層
game灬boy 發(fā)表于 2020-4-11 21:26
你先把   in1 in2 in3    in4      
直接在main函數(shù)中賦值,看電機(jī)是否轉(zhuǎn)動
void   main ()

你的意思是把程序修改一下試試么,就是把你發(fā)的這個插入到括號里是么
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-11 23:17 來自觸屏版 | 顯示全部樓層
神蜂 發(fā)表于 2020-4-11 22:40
是不是while()要運(yùn)行藍(lán)牙發(fā)過來的東西
比例:
void Remote()

前面的程序我看的不太懂,但是最后那個中文我燒程序時注意了,都是吻合的
回復(fù)

使用道具 舉報

ID:283908 發(fā)表于 2020-4-12 08:16 | 顯示全部樓層
yuhui1023 發(fā)表于 2020-4-11 23:17
前面的程序我看的不太懂,但是最后那個中文我燒程序時注意了,都是吻合的

那不急,我50幾歲了,搞電器維修的,平時不會打牌,工作之余業(yè)余愛好學(xué)習(xí)單片機(jī)打發(fā)時間。

剛剛開始學(xué)單片機(jī)時也是這樣,推薦你看看這里的教程,http://www.torrancerestoration.com/bbs/dpj-183489-1.html

希望,借51黑電子論壇,讓我們單片機(jī)技術(shù)和你兒子一起成長。
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-12 10:58 來自觸屏版 | 顯示全部樓層
神蜂 發(fā)表于 2020-4-12 08:16
那不急,我50幾歲了,搞電器維修的,平時不會打牌,工作之余業(yè)余愛好學(xué)習(xí)單片機(jī)打發(fā)時間。

剛剛開始學(xué) ...

謝謝大叔,您詮釋了什么叫學(xué)無止境
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-12 14:33 來自觸屏版 | 顯示全部樓層
用USB轉(zhuǎn)TTL連接電腦和藍(lán)牙,用手機(jī)鍵盤發(fā)送文本,電腦也能收到。。。
mmexport1586673037721.jpg
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-12 16:09 | 顯示全部樓層
實(shí)物連接圖

實(shí)物圖

實(shí)物圖
回復(fù)

使用道具 舉報

ID:514901 發(fā)表于 2020-4-12 16:33 | 顯示全部樓層
1,298的輸入電壓一般是9~12V
2,51單片機(jī)沒燒程序的話一般IO口都是高電平,要讓電機(jī)轉(zhuǎn)的話需要一高一低,你可以接開發(fā)板的VCC和GND試試就會轉(zhuǎn)了
3,藍(lán)牙控制的話需要燒錄單片機(jī)程序
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-12 17:20 | 顯示全部樓層
鄭漢松 發(fā)表于 2020-4-12 16:33
1,298的輸入電壓一般是9~12V
2,51單片機(jī)沒燒程序的話一般IO口都是高電平,要讓電機(jī)轉(zhuǎn)的話需要一高一低, ...

我把電機(jī)線直接接在開發(fā)板的+5和GND是可以直接轉(zhuǎn)的,但是用藍(lán)牙就是不轉(zhuǎn)
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-12 22:16 來自觸屏版 | 顯示全部樓層
沒人幫忙了么。。。
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-13 08:09 來自觸屏版 | 顯示全部樓層
又是元?dú)鉂M滿的一天,繼續(xù)坐在電腦面前瞎摸索
回復(fù)

使用道具 舉報

ID:367369 發(fā)表于 2020-4-13 11:42 | 顯示全部樓層
串口優(yōu)先級是否高于定時器優(yōu)先級?還有藍(lán)牙發(fā)送的數(shù)據(jù)格式是什么16進(jìn)制還是字符?我看見你前面發(fā)了一張藍(lán)牙接收的圖片,你將你的串口助手設(shè)置為16進(jìn)制接受看看接收數(shù)據(jù)還是否為12345,如果不是,你的單片機(jī)接受的就是字符‘1’;‘2’;‘3’;‘4’;‘5’;了而不是接收的數(shù)字12345,如果是字符請將接受的數(shù)據(jù)減0x30, a = SBUF-0x30;或者寫為 a = SBUF-'0';
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-13 14:21 來自觸屏版 | 顯示全部樓層
game灬boy 發(fā)表于 2020-4-13 11:42
串口優(yōu)先級是否高于定時器優(yōu)先級?還有藍(lán)牙發(fā)送的數(shù)據(jù)格式是什么16進(jìn)制還是字符?我看見你前面發(fā)了一張藍(lán)牙 ...

我改成16進(jìn)制后顯示的是04,不是單純的4,如果需要改程序怎么改啊?請問能加您一個微信么
回復(fù)

使用道具 舉報

ID:367369 發(fā)表于 2020-4-13 19:17 | 顯示全部樓層
yuhui1023 發(fā)表于 2020-4-13 14:21
我改成16進(jìn)制后顯示的是04,不是單純的4,如果需要改程序怎么改啊?請問能加您一個微信么

你的程序判斷的條件有問題,我看到PS已經(jīng)置1,說明串口中斷優(yōu)先級較高,你的if(a==‘0’)是在判斷a等于字符0而不是a等于數(shù)字0,你可以把if括號中的判斷條件改為a==0,或者a==‘0’-0x30
加好友得私發(fā),直接評論會被刪
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-13 22:39 來自觸屏版 | 顯示全部樓層
game灬boy 發(fā)表于 2020-4-13 19:17
你的程序判斷的條件有問題,我看到PS已經(jīng)置1,說明串口中斷優(yōu)先級較高,你的if(a==‘0’)是在判斷a等于 ...

好的謝謝了,明天我再試一下
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-14 08:29 | 顯示全部樓層
還是元?dú)鉂M滿的一天,繼續(xù)坐在電腦面前瞎捉摸
回復(fù)

使用道具 舉報

ID:342451 發(fā)表于 2020-4-14 19:07 | 顯示全部樓層
給你套資料,僅供參考,挺全面的,當(dāng)時玩這個的時候是參照他的

《藍(lán)牙車資料包》.zip

10.58 MB, 下載次數(shù): 12

回復(fù)

使用道具 舉報

ID:342451 發(fā)表于 2020-4-14 19:09 | 顯示全部樓層
做藍(lán)牙小車,首先你先別急著去搞電機(jī),你先確定好藍(lán)牙與手機(jī)之間的通信部分是正常的,比如你手機(jī)按下,板子上點(diǎn)亮一個小燈,從最簡單的現(xiàn)象上去判斷問題。
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-15 16:40 來自觸屏版 | 顯示全部樓層
之一知足 發(fā)表于 2020-4-14 19:07
給你套資料,僅供參考,挺全面的,當(dāng)時玩這個的時候是參照他的

謝謝你,好人吶
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-18 09:22 來自觸屏版 | 顯示全部樓層
新的問題又來了,通訊口連接電腦供電單片機(jī)用藍(lán)牙是可以控制的,從l298n接過來的5vDC口供電就不能控制,只有一個開關(guān)電源燈亮是怎么回事啊
回復(fù)

使用道具 舉報

ID:691449 發(fā)表于 2020-4-18 11:41 | 顯示全部樓層
藍(lán)牙模塊的燈亮不亮?
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-18 15:15 來自觸屏版 | 顯示全部樓層
xianming 發(fā)表于 2020-4-18 11:41
藍(lán)牙模塊的燈亮不亮?

亮的,同樣的接線,同樣的程序,用電腦的usb接通信接口,可以控制小車,板上的燈也亮,但是用l298n輸出的5V接DC口就不行了,只有電源燈亮,控制的led燈不亮,我還用手機(jī)充電器轉(zhuǎn)的5V接通信接口,也不亮
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-19 23:41 來自觸屏版 | 顯示全部樓層
感謝好多熱心人技術(shù)支持,完工一大半了
mmexport1587310859392.jpg
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-4-20 15:40 來自觸屏版 | 顯示全部樓層
程序這卡住了,誰能幫我修改下程序啊
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-5-6 06:59 來自觸屏版 | 顯示全部樓層
基本完成了
IMG_20200417_193705.jpg
回復(fù)

使用道具 舉報

ID:727019 發(fā)表于 2020-5-8 22:58 來自觸屏版 | 顯示全部樓層
完成了
IMG_20200507_122534.jpg
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表