找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机stc89c52蓝牙控制小车红外手势开关,我写了程序不知道为什么不能遥控

[复制链接]
跳转到指定楼层
楼主
ID:476498 发表于 2019-2-22 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我代码
#include<reg52.h>

typedef unsigned int u16;          
typedef unsigned char u8;

sbit int1=P0^0;
sbit int2=P0^1;
sbit int3=P0^2;
sbit int4=P0^3;
sbit kaiguan=P3^7;
u8 receiveData;
void delay(u8 a)
{
        while(a--);       
}
void Timer0Init()
{
        TMOD|=0X01;
        TH0=0X4c;       
        TL0=0X00;       
        ET0=1;
        EA=1;
        TR0=1;               
}
void UsartInit()
{
        SCON=0X50;                       
        TMOD=0X20;                       
        PCON=0X00;                       
        TH1=0XFD;                               
        TL1=0XFD;
        ES=1;                                               
        EA=1;                                               
        TR1=1;                                       
}
void forward()               
{
        int1=1;
        int2=0;
        int3=1;
        int4=0;
}

void backward()               
{
        int1=0;
        int2=1;
        int3=0;
        int4=1;
}
void turn_left()       
{
        int1=1;
        int2=0;
        int3=0;
        int4=0;
}
void rotate_left()       
{
        int1=1;
        int2=0;
        int3=0;
        int4=1;
}
void turn_right()       
{
        int1=0;
        int2=0;
        int3=1;
        int4=0;
}
void rotate_right()       
{
        int1=0;
        int2=1;
        int3=1;
        int4=0;       
}
void stop()                       
{       
        int1=1;
        int2=1;
        int3=1;
        int4=1;       
}

void tip1()
{
        rotate_left();
        delay(3);
        rotate_right();
        delay(3);
}

void tip2()
{
        rotate_left();
        delay(6);
        rotate_right();
        delay(6);

}

void tip3()
{
        turn_left();
        delay(66);
}

void tip4()
{
        turn_right();
        delay(55);
}

void ctrl()   
{
        if(kaiguan==0)
        {
                while(1)
                {
                if(receiveData==0x01)
                forward();
                if(receiveData==0x02)
                        backward();
                if(receiveData==0x03)
                        turn_left();
                if(receiveData==0x04)
                        turn_right();
                if(receiveData==0x05)
                        stop();
                if(receiveData==0x06)
                        tip1();
                if(receiveData==0x07)
                        tip2();
                if(receiveData==0x08)
                        tip3();
                if(receiveData==0x09)
                        tip4();
               
                }
        }
}
void main ()
{        Timer0Init();
       
       
                UsartInit();
       
        while(1);       
}

void Timer0() interrupt 1
{
        static u8 i;
        TH0=0XFC;       
        TL0=0X18;
        i++;
        if(i==50)
        {
                i=0;       
        }       
}

void Usart() interrupt 4
{
       
       
        if(RI==1)
        {
                receiveData=SBUF;
                RI=0;
        }       
        ctrl();
}


IMG20190222141804.jpg (2.95 MB, 下载次数: 87)

IMG20190222141804.jpg

IMG20190222141812.jpg (3.09 MB, 下载次数: 82)

IMG20190222141812.jpg

IMG20190222141815.jpg (2.86 MB, 下载次数: 75)

IMG20190222141815.jpg

IMG20190222141835.jpg (2.75 MB, 下载次数: 72)

IMG20190222141835.jpg

Screenshot_2019-02-22-10-30-13-40.png (138.21 KB, 下载次数: 73)

Screenshot_2019-02-22-10-30-13-40.png

Screenshot_2019-02-22-10-30-25-39.png (160.23 KB, 下载次数: 86)

Screenshot_2019-02-22-10-30-25-39.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2019-2-23 10:38 | 只看该作者
简单看了你的程序结构,至少有这样的问题吧
第一:最大的错误,在串口中断函数中,用了while(1),这样的结果就是,只要串口中断一次后,就卡那里了,再次串口中断,中断嵌套了,这可不是好现象,结果就不好判断了。
将 ctrl();写到主函数中吧。
第二:看不到你的APP程序,你确定它发送的是十六进制数?
第三:你的红外避障模块在等于0时为开是吧,就是有手势的时候,那就要你一直挡住它,手机再遥控才有效哦,只要车一动,你没挡住,车就不开了——它是不会一直等于0的。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:476498 发表于 2019-3-1 17:29 | 只看该作者
HC6800-ES-V2.0 发表于 2019-2-23 10:38
简单看了你的程序结构,至少有这样的问题吧
第一:最大的错误,在串口中断函数中,用了while(1),这样的结 ...

while去掉了
但是开关的问题怎么解决/?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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