找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4281|回復(fù): 2
收起左側(cè)

基于51單片機(jī)手機(jī)方向傳感器藍(lán)牙控制小車(chē)

[復(fù)制鏈接]
ID:453264 發(fā)表于 2018-12-24 13:42 | 顯示全部樓層 |閱讀模式
制作目的:通過(guò)手機(jī)前傾,后傾,左傾,右傾,采集手機(jī)姿態(tài)(讀取手機(jī)方向傳感器數(shù)據(jù)),調(diào)整手機(jī)姿態(tài)控制小車(chē)運(yùn)動(dòng)


源碼易懂,修改容易
附: 手機(jī)apk ,c源碼,proteus仿真



#include<reg52.h>//

sbit SEH_PWM=P1^7;//舵機(jī)PWM口定義

unsigned char SEH_count=11;
unsigned char count=0;
sbit a=P0^0;
sbit b=P0^1;

unsigned char T0RH =(65536-100)/256;//賦初值定時(shí)
//0.02ms;  //T0重載值的高字節(jié)
unsigned char T0RL =(65536-100)%256;  //T0重載值的低字節(jié)
unsigned char RxdByte = 0;  //串口接收到的字節(jié)

void ConfigTimer0();
void ConfigUART(unsigned int baud);

void PWM(unsigned char x)
{
        SEH_count=x;
}

void main()
{
       
    EA = 1;       //使能總中斷
    a=0;
    b=0;
    ConfigTimer0();   //配置T0定時(shí)1ms
    ConfigUART(9600);  //配置波特率為9600

    while (1)
    {  
                                        switch(RxdByte)       
                                {
                                        case 0x31:{
                                                                                PWM(11);//手機(jī)向單片機(jī)發(fā)送‘0’,舵機(jī)轉(zhuǎn)到0度
                                                                                a=1;
                                                                                b=0;   
                                                                                };break;
                                        case 0x32:{
                                                                                PWM(13);//手機(jī)向單片機(jī)發(fā)送‘1’,舵機(jī)轉(zhuǎn)到45度
                                                                                a=1;
                                                                                b=0;
                                                                                  
                                                                                };break;
                                        case 0x33:{
                                                                                PWM(9);//手機(jī)向單片機(jī)發(fā)送‘2’,舵機(jī)轉(zhuǎn)到90度
                                                                                a=1;
                                                                                b=0;
                                                                                };break;
                                        case 0x34:{
                                                                                PWM(14);//手機(jī)向單片機(jī)發(fā)送‘3’,舵機(jī)轉(zhuǎn)到135度  
                                                                                a=0;
                                                                                b=0;
                                                                                };break;
                                        case 0x35:{                       
                                                                                PWM(11);//手機(jī)向單片機(jī)發(fā)送‘4’,舵機(jī)轉(zhuǎn)到180?
                                                                                a=0;
                                                                                b=0;
                                                                                };break;
                                        case 0x36:{
                                                                                PWM(8);        //       
                                                                                a=0;
                                                                                b=0;                                                                                                       
                                                                                };break;
                                        case 0x37:{
                                                                            a=0;
                                                                                b=1;
                                                                                PWM(13);//                                                                                                                               
                                                                                };break;
                                        case 0x38:{               
                                                                                PWM(11);
                                                                                a=0;
                                                                                b=1;
                                                                                };break;
                                        case 0x39:{
                                                                                a=0;
                                                                                b=1;
                                                                                PWM(9);
                                                                                };break;
                                }
    }
}
/* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
void ConfigTimer0()
{



    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0為模式1
    TH0 = T0RH;     //加載T0重載值
    TL0 = T0RL;
    ET0 = 1;        //使能T0中斷
    TR0 = 1;        //啟動(dòng)T0
}
/* 串口配置函數(shù),baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  //配置串口為模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1為模式2
    TH1 = 256 - (11059200/12/32)/baud;  //計(jì)算T1重載值
    TL1 = TH1;     //初值等于重載值
    ET1 = 0;       //禁止T1中斷
    ES  = 1;       //使能串口中斷
    TR1 = 1;       //啟動(dòng)T1
}

/* T0中斷服務(wù)函數(shù),完成LED掃描 */
void InterruptTimer0() interrupt 1
{
    TH0 = T0RH;  //重新加載重載值
    TL0 = T0RL;
          if(count <= SEH_count)
    {

        SEH_PWM=1;
    }
    else
    {
        SEH_PWM=0;
    }


    count++;
    if (count >= 164)
    {
        count = 0;
                       
    }
       
}
/* UART中斷服務(wù)函數(shù) */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到字節(jié)
    {
        RI = 0;  //手動(dòng)清零接收中斷標(biāo)志位
        RxdByte = SBUF;  //接收到的數(shù)據(jù)保存到接收字節(jié)變量中
        SBUF = RxdByte;  //接收到的數(shù)據(jù)又直接發(fā)回,叫作-"echo",
                         //用以提示用戶輸入的信息是否已正確接收
    }
    if (TI)  //字節(jié)發(fā)送完畢
    {
        TI = 0;  //手動(dòng)清零發(fā)送中斷標(biāo)志位
    }
}








藍(lán)牙玩具車(chē)控制.rar

854 KB, 下載次數(shù): 33, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:530990 發(fā)表于 2019-5-8 21:00 | 顯示全部樓層
分享,謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:304358 發(fā)表于 2019-5-16 09:18 | 顯示全部樓層
沒(méi)有電路圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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