找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2413|回复: 5
收起左侧

大神帮我看下我的智能车代码哪里出错,很急

[复制链接]
ID:99359 发表于 2016-1-24 10:00 | 显示全部楼层 |阅读模式
大神帮我看下我的智能车代码哪里出错,很急,按下按键1实现蓝牙遥控功能,按下按键2则实现魔幻手功能,以下是我的代码,但是遥控也遥控不了,也实现不了魔幻手功能,不知道哪里出错,希望大家指点指点

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit EX=P2^0;
sbit TX=P2^1;

sbit a1=P1^0;//电机控制口
sbit a2=P1^1;
sbit a3=P1^2;
sbit a4=P1^3;
sbit key1=P3^2;
sbit key2=P3^3;

uchar a;//接收蓝牙模块发送的数据
uchar flag;
uint time,distance,valA;
unsigned long S=0;

void delayxms(uint z)//调节电机转速
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void delay20us()//短延时函数,用于起声波传感器延时
{
        uchar a;
        for(a=0;a<150;a++);
}

void delaym(int z)//延时函数,调节电机转速
{
    int i,j;
        for(i=2;i>0;i--)
        for(j=z;j>0;j--);        
}

void qingj()//前进
{
        a1=1;
        a2=0;
        a3=1;
        a4=0;        
}

void hout()//后退
{
        a1=0;
        a2=1;
        a3=0;
        a4=1;        
}

void youz()//右转
{
        a1=0;
        a2=0;
        a3=1;
        a4=0;
        delayxms(9);        
        a1=0;
        a2=0;
        a3=0;
        a4=0;
        delayxms(1);        
}

void zuoz()//左转
{
        a1=1;
        a2=0;
        a3=0;
        a4=0;
        delayxms(9);        
        a1=0;
        a2=0;
        a3=0;
        a4=0;
        delayxms(1);        
}

void tingz()//停止
{
        a1=0;
        a2=0;
        a3=0;
        a4=0;
}

void lanya()
{
   TMOD=0x20;//定时器1工作方式2,8位自动重装  
    TH1=0xFd; //11.0592M晶振,9600波特率 
    TL1=0xFd;
    SCON=0x50;//串口方式1 SM0 SM1 01 允许接收  
    PCON=0x00;//SMOD=0 16分频
    TR1=1;//打开定时器1
        ES=1;//打开串口中断   
    EA=1;//开总中断  
    //以上跟串口通信初始化有关
}

void chao()
{
     TMOD=0x01;//设T0为方式1,GATE=1;
    EA=1;//开启总中断
    TH0=0;
    TL0=0;         
    ET0=1;//允许T0中断        
               
}

void keyscan()
{
        if(key1==0)
        delayxms(10);
        if(key1==0)
        {
            lanya();
                while(!key1);
    }

        if(key2==0)
        delayxms(10);
        if(key2==0)
        {
                 chao();
                while(!key2);
        }
}

void chaoshengbo()
{
        TX=1;//初始化Trig引脚,启动一次模块
        delay20us();
        TX=0;

//        for(valA=100;valA>0;valA--)//for循环是防止发射信号对回响信号的影,响根据实际情况是否用
// {
                if(EX==1)//判断Exho是否为高电平
                {

                        TR0=1;                            //开启计数
                        while(EX);                        //当RX为1计数并等待
                        TR0=0;                                //关闭计数
                        
                        time=TH0*256+TL0;   //计算整个距离的时间
                        TH0=0;
                        TL0=0;
                        TX=0;

                        S=((time*2)/100)-3;     //计算距离,算出来是CM  3是盲区 (time*1.7)/100;
                }
//        }
}

void main(void)
{
   keyscan();
        while(1)
        {         
               if(key1==0)
            {
                   if(a=='A') qingj();//前进

                else if(a=='B') hout();//后退
               
                else if(a=='C') zuoz();//左转
               
                else if(a=='D') youz();//右转

                else tingz();//停止        
                }

                if(key2==0)
                {
                        chaoshengbo();//超声波初始化
            
                        if(S>=20) qingj();
                        else hout();
        
        }
        }
}

void zd0() interrupt 1         //T0中断用来计数器溢出,超过测距范围
{
    flag=1;        //中断溢出标志
        EX=0;
}

void serial() interrupt 4//中断子函数
{
        RI=0;//清0
        a=SBUF;
}

回复

使用道具 举报

ID:79544 发表于 2016-1-24 21:23 | 显示全部楼层
程序肯定不行,再好好找找别的程序试试。你那个蓝牙不是程序只是初始化。
回复

使用道具 举报

ID:99359 发表于 2016-1-25 18:37 | 显示全部楼层
腾飞的龙 发表于 2016-1-24 21:23
程序肯定不行,再好好找找别的程序试试。你那个蓝牙不是程序只是初始化。

你会帮我改改上面的程序吗
回复

使用道具 举报

ID:79544 发表于 2016-1-26 21:23 | 显示全部楼层
你先试试单个功能看看行不行
回复

使用道具 举报

ID:79544 发表于 2016-1-26 21:27 | 显示全部楼层
这是个单字符的蓝牙控制的小车程序
  1. /************************************************
  2. //蓝牙控制小车 加舵机 加避障 可以调速 正确的程序
  3.         单片机: STC12C5608AD
  4. //        晶振  :           11.0592M晶振
  5.         作者  :苏义江
  6.         时间  :2016-1-8
  7. ***************************************************/
  8. #include <reg52.h>
  9. #include<intrins.h>
  10. #define uint unsigned int
  11. #define uchar unsigned char
  12. //sfr  T2MOD=0xc9;
  13. sbit in1  =P1^0; //电机1端口
  14. sbit in2  =P1^1;
  15. sbit ina  =P1^2;  //电机PWM-A

  16. sbit in3  =P1^3;//电机2端口
  17. sbit in4  =P1^4;
  18. sbit inb  =P1^5;//电机PWM-B

  19. sbit bz_l =P2^0;  //避障左
  20. sbit bz_z =P2^1;  //避障右
  21. sbit bz_r =P2^2;  //避障右

  22. sbit moto_pwm =P3^4;//PWM输出脚控制舵机
  23. sbit yan      =P3^5;//头灯光

  24. sbit landeng =P3^2;//蓝前大灯
  25. sbit hondeng =P3^3;//红前大灯
  26. sbit yinyue  =P3^7;//音乐端口

  27. sbit wela    =P1^6;//位码
  28. sbit dula    =P1^7;//段码
  29. uchar code table[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,
  30.                                                 0x82,0xF8,0x80,0x90,0xBF,0xff};
  31. uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  32. //uchar disbuff[4] ={ 0,0,0,0,};//数码管全显示 0
  33. uint tt = 0;//变量定义
  34. uint num=0;//变量定义

  35. uchar pwm_lefr=0;//定义 定时器自加1变量
  36. //uchar pwm_lefr1=0;//定义 定时器自加1变量
  37. uchar duojiguizhong=14;//舵机归中1.5ms
  38. uchar duojiguizhong1=14;//舵机归中1.5ms
  39. uchar tmp,w,sudu; //变量w 定义PWM值

  40. void init() ;
  41. void delay1(uint z)//延时函数
  42. {
  43.         uint x,y;
  44.         for(x=z;x>0;x--)
  45.                 for(y=120;y>1;y--);
  46. }
  47. void delay(uint z)
  48. {
  49.         uint x,y;
  50.         for(x=0;x<z;x++)
  51.         for(y=0;y<1000;y++);
  52.        
  53. }

  54. /*void xianshi(uchar num)//显示
  55. {  
  56.   uchar gw,sw,bw,qianw;
  57.         qianw=num/1000%100;
  58.    bw=num%1000/100;   
  59.    sw=num%100/10;   
  60.    gw=num%10;
  61.             
  62.    P2=0xfe;   
  63.    wela=1;     
  64.    _nop_();_nop_();   
  65.    wela=0;     
  66.    P2=table[qianw];
  67.     dula=1;     
  68.    _nop_();_nop_();   
  69.    dula=0;   
  70.    delay1(2);

  71.    P2=0xfd;
  72.    wela=1;     
  73.    _nop_();
  74.    _nop_();   
  75.    wela=0;     
  76.    P2=table[bw];
  77.     dula=1;     
  78.    _nop_();
  79.    _nop_();   
  80.    dula=0;   
  81.    delay1(2);

  82.         P2=0xfb;   
  83.    wela=1;     
  84.    _nop_();_nop_();   
  85.      wela=0;     
  86.    P2=table[sw];   
  87.    dula=1;     
  88.    _nop_();_nop_();   
  89.    dula=0;
  90.    delay1(2);
  91.                 P2=0xf7;   
  92.    wela=1;     
  93.    _nop_();_nop_();   
  94.      wela=0;     
  95.    P2=table[gw];   
  96.    dula=1;     
  97.    _nop_();_nop_();   
  98.    dula=0;
  99.    delay1(2); //显示个 十 百 千

  100. }  */

  101. void pwmmaic()//产生PWM
  102. {
  103.         if(pwm_lefr<=duojiguizhong)       
  104.                 moto_pwm=1;
  105.                 else
  106.                 moto_pwm=0;
  107.                 if(pwm_lefr>=200)
  108.                 pwm_lefr=0;               
  109. }

  110. void duoji_kz()//舵机控制
  111. {
  112.         yan=0;
  113.         duojiguizhong=9;
  114.        
  115.         delay(800);
  116.         yan=0;
  117.         duojiguizhong=16;
  118.        
  119.         delay(800);
  120.         yan=0;
  121.         duojiguizhong=24;
  122.        
  123.         delay(800);
  124.         yan=0;
  125.         duojiguizhong=16;
  126.        
  127.         delay(800);
  128.         yan=0;
  129.         delay(1500);
  130.         yan=1;       
  131. }
  132. void lankong()        //蓝色LED
  133. {
  134.         landeng=0;
  135.         delay1(80);
  136.         landeng=1;
  137.         delay1(80);
  138. }
  139. void hongkong()        //红色LED
  140. {
  141.         hondeng=0;
  142.         delay1(80);
  143.         hondeng=1;
  144.         delay1(80);
  145. }
  146. void qianjin()
  147. {
  148.         in1=1;in2=0;in3=0;in4=1;
  149.         w=40;
  150.         yan=0;landeng=0;hondeng=0;yinyue=0;       
  151. }   
  152. void houtui()
  153. {
  154.         in1=0;in2=1;in3=1;in4=0;
  155.         w=40;
  156.         yan=1;hondeng=0;yinyue=0;       
  157. }  
  158. void zuozhuan()
  159. {
  160.         in3=1;in4=0;
  161.         w=40;
  162.         lankong();yinyue=1;
  163. }
  164. void youzhuan()
  165. {
  166.         in1=0;in2=1;
  167.         w=40;
  168.         hongkong();yinyue=1;
  169. }  
  170. void tingzhi()
  171. {
  172.         in1=0;in2=0;in3=0 ;in4=0;
  173.         hongkong();lankong();yinyue=1;
  174. }
  175. void zhuanquan()
  176. {
  177.         in1=1;in2=0;in3=1;in4=0;
  178.         w=40;
  179.         lankong();yinyue=1;
  180. }
  181. void bizhang()        //避障
  182. {
  183.          if(bz_l==1&&bz_z==1)
  184.          qianjin();
  185.           if(bz_l==0&&bz_z==1)
  186.          zuozhuan();
  187.           if(bz_l==1&&bz_z==0)
  188.          youzhuan();
  189.           if(bz_l==0&&bz_z==0)
  190.           {
  191.                  tingzhi();
  192.                 delay(100);
  193.                  zuozhuan();
  194.                  delay(400);
  195.                  qianjin();       
  196.                  }
  197.         /*
  198.     if(bz_l==1&&bz_z==1&&bz_r==1)
  199.          qianjin();
  200.         if(bz_l==0&&bz_z==1&&bz_r==1)
  201.          zuozhuan();
  202.          if(bz_l==0&&bz_z==0&&bz_r==1)
  203.          zuozhuan();
  204.          if(bz_l==1&&bz_z==1&&bz_r==0)
  205.          youzhuan();
  206.          if(bz_l==1&&bz_z==0&&bz_r==0)
  207.          youzhuan();
  208.          if(bz_l==1&&bz_z==0&&bz_r==1)
  209.          {
  210.                  tingzhi();
  211.                 delay(100);
  212.                 houtui();
  213.                 delay(500);
  214.                 zuozhuan();
  215.                 delay(200);
  216.                 qianjin();
  217.          }
  218.          if(bz_l==0&&bz_z==0&&bz_r==0)
  219.          {       
  220.                  tingzhi();
  221.                 delay(100);
  222.                 houtui();
  223.                 delay(500);
  224.                 zuozhuan();
  225.                 delay(200);
  226.                 qianjin();
  227.          }         */
  228. }
  229. void init()   //串口初始化
  230. {                                                                       //关中断
  231.     SCON =0x50; //串口模式1,允许接收                  
  232.     TMOD =0x20;//定时器1为模式2 8-bit自动装载方式用于产生波特率
  233.     PCON=0x00;//波特率不倍增
  234.         TH1=0xfd;//波特率9600  11.0592M
  235.         TL1=0xfd;
  236.         TH0=0xfd;
  237.         TH0=0xae;
  238.         EA=1;
  239.         ES=1;
  240.         ET0=1; //        T0中断允许
  241.         TR0=1; //        启动T0定时器
  242.         TR1=1; //        启动T1定时器
  243.         duojiguizhong=16;
  244.         duojiguizhong1=16;
  245. }
  246. void ctrl() //接收处理函数
  247. {
  248.    switch(tmp)
  249.    {        
  250.             case 1:qianjin(); break;                                                    
  251.      case 2: houtui();break;                                                                            
  252.      case 3:zuozhuan(); break;
  253.      case 4:youzhuan();break;  
  254.          case 0:tingzhi(); break;
  255.          case 7:duoji_kz();break;        //舵机         C
  256.          case 8: bizhang(); break;        //避障        D
  257.          
  258.    /*case 1:duoji_kz();qianjin(); break;                                                    
  259.      case 2:duoji_kz(); houtui();break;                                                                            
  260.      case 3:zuozhuan(); break;
  261.      case 4:youzhuan();break;  
  262.          case 0:tingzhi(); break;  */
  263.    }
  264. }
  265. void tiaosu () //调速
  266. {
  267.         switch(sudu)
  268.         {
  269.                 case 5: zhuanquan();        break;         //A
  270.                 case 6: w=75; break;         //B               
  271.         }
  272. }
  273. void main()
  274. {
  275.    init();         
  276.    while(1)
  277.    {
  278. //        xianshi( num ); //显示函数  
  279.         ctrl();
  280.         tiaosu();  
  281.    }
  282. }
  283. void time0() interrupt 1
  284. {  
  285.     TH0=0xfd;
  286.     TL0=0xae;
  287.         tt++;
  288.         pwm_lefr++;
  289. //        pwm_lefr1++;
  290.         pwmmaic();
  291.         if(tt<w)
  292.         {
  293.                 ina=1;
  294.                 inb=1;
  295.         }
  296.         else
  297.         {
  298.                 ina=0;
  299.                 inb=0;
  300.         }
  301.         if(tt==100)
  302.         {tt=0;
  303.        
  304.         num++;
  305.         if(num==9999)num=0;       
  306.         }
  307. }
  308. void ckzd() interrupt 4
  309. {
  310.         ES=0;
  311.         RI=0;
  312.         tmp=SBUF;
  313.         sudu=SBUF;
  314.         ES=1;
  315. }
复制代码
回复

使用道具 举报

ID:79544 发表于 2016-1-26 21:28 | 显示全部楼层
里面数码管和舵机以及避障和PWM你可以屏蔽掉
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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