找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3460|回复: 2
打印 上一主题 下一主题
收起左侧

基于51单片机手机方向传感器蓝牙控制小车

[复制链接]
跳转到指定楼层
楼主
ID:453264 发表于 2018-12-24 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
制作目的:通过手机前倾,后倾,左倾,右倾,采集手机姿态(读取手机方向传感器数据),调整手机姿态控制小车运动


源码易懂,修改容易
附: 手机apk ,c源码,proteus仿真



#include<reg52.h>//

sbit SEH_PWM=P1^7;//舵机PWM口定义

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

unsigned char T0RH =(65536-100)/256;//赋初值定时
//0.02ms;  //T0重载值的高字节
unsigned char T0RL =(65536-100)%256;  //T0重载值的低字节
unsigned char RxdByte = 0;  //串口接收到的字节

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定时1ms
    ConfigUART(9600);  //配置波特率为9600

    while (1)
    {  
                                        switch(RxdByte)       
                                {
                                        case 0x31:{
                                                                                PWM(11);//手机向单片机发送‘0’,舵机转到0度
                                                                                a=1;
                                                                                b=0;   
                                                                                };break;
                                        case 0x32:{
                                                                                PWM(13);//手机向单片机发送‘1’,舵机转到45度
                                                                                a=1;
                                                                                b=0;
                                                                                  
                                                                                };break;
                                        case 0x33:{
                                                                                PWM(9);//手机向单片机发送‘2’,舵机转到90度
                                                                                a=1;
                                                                                b=0;
                                                                                };break;
                                        case 0x34:{
                                                                                PWM(14);//手机向单片机发送‘3’,舵机转到135度  
                                                                                a=0;
                                                                                b=0;
                                                                                };break;
                                        case 0x35:{                       
                                                                                PWM(11);//手机向单片机发送‘4’,舵机转到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;
                                }
    }
}
/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0()
{



    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0为模式1
    TH0 = T0RH;     //加载T0重载值
    TL0 = T0RL;
    ET0 = 1;        //使能T0中断
    TR0 = 1;        //启动T0
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  //配置串口为模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1为模式2
    TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值
    TL1 = TH1;     //初值等于重载值
    ET1 = 0;       //禁止T1中断
    ES  = 1;       //使能串口中断
    TR1 = 1;       //启动T1
}

/* T0中断服务函数,完成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中断服务函数 */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到字节
    {
        RI = 0;  //手动清零接收中断标志位
        RxdByte = SBUF;  //接收到的数据保存到接收字节变量中
        SBUF = RxdByte;  //接收到的数据又直接发回,叫作-"echo",
                         //用以提示用户输入的信息是否已正确接收
    }
    if (TI)  //字节发送完毕
    {
        TI = 0;  //手动清零发送中断标志位
    }
}








蓝牙玩具车控制.rar

854 KB, 下载次数: 33, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:530990 发表于 2019-5-8 21:00 | 只看该作者
分享,谢谢楼主
回复

使用道具 举报

板凳
ID:304358 发表于 2019-5-16 09:18 | 只看该作者
没有电路图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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