找回密码
 立即注册

QQ登录

只需一步,快速开始

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

四驱的蓝牙小车单片机程序 调不了速了

[复制链接]
跳转到指定楼层
楼主
ID:274511 发表于 2018-1-10 20:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
四驱的蓝牙小车调不了速了,求大佬看看。(或者求一份四驱的完整的蓝牙小车程序也行),芯片是STC89C52RC,驱动是L298n
  1. #include<reg52.h>
  2. #include<math.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar receiveDate,time1,time2,time3,time4;
  6. uint e;

  7. sbit ena=P1^0;
  8. sbit enb=P1^5;
  9. sbit enc=P0^5;
  10. sbit end=P0^0;
  11. sbit a1=P1^1;
  12. sbit a2=P1^2; //右前轮
  13. sbit b1=P1^3;
  14. sbit b2=P1^4; //左前轮
  15. sbit c1=P0^4;
  16. sbit c2=P0^3;//左后轮
  17. sbit d1=P0^2;
  18. sbit d2=P0^1; //右后轮

  19. void Delay_1ms(uint t)

  20. {

  21.    uchar i,j;
  22.    for(i=0;i<t;i++)
  23.    for(j=0;j<=148;j++);

  24. }


  25. void Com_Int(void) interrupt 4

  26. {
  27.   
  28.   receiveDate=SBUF;
  29.   e=SBUF;
  30.   RI=0;   
  31.   SBUF=receiveDate;
  32.   while(!TI);
  33.   TI=0;

  34. }

  35. void Init(void)

  36. {
  37. //      TMOD=0x21;  //设置计数器工作方式2
  38. //      SCON=0X50;   //设置为工作方式1
  39. //      PCON=0X80;   //波特率加倍
  40. //      TH1=0XFA;       //计数器初始值设置,注意波特率是4800的
  41. //      TL1=0XFA;
  42. //      TR1=1;               //打开计数器
  43. //      ES=1;          //打开接收中断
  44. //      EA=1;          //打开总中断
  45. //      TH0=(65536-45872)/256;
  46. //      TL0=(65536-45872)%256;
  47. //      TR0=1;
  48. //      ET0=1;


  49.     TCON=0X21;
  50.     SCON=0X50;
  51.     TH0=(65536-45872)/256;
  52.     TL0=(65536-45872)%256;
  53.     TH1=0XFA;
  54.     TL1=0XFA;
  55.     TR1=1;
  56.     ET0=1;
  57.     SM0=0;
  58.     SM1=1;
  59.     REN=1;
  60.     EA=1;
  61.     ES=1;

  62. }
  63. void PWM1(uint a)
  64. {
  65.       if(time1==100){time1=0;}
  66.       if(time1<a){ena=1;}
  67.       else{ena=0;}
  68. }
  69. void PWM2(uint b)
  70. {
  71.       if(time2==100){time2=0;}
  72.       if(time2<b){enb=1;}
  73.       else{enb=0;}
  74. }
  75. void PWM3(uint c)
  76. {
  77.       if(time3==100){time3=0;}
  78.       if(time3<c){enc=1;}
  79.       else{enc=0;}
  80. }
  81. void PWM4(uint d)
  82. {
  83.       if(time4==100){time4=0;}
  84.       if(time4<d){end=1;}
  85.       else{end=0;}
  86. }
  87. void go()
  88. {
  89.     a1=1;a2=0;PWM1(50);    //右前轮
  90.     b1=1;b2=0;PWM2(50);    //左前轮
  91.     c1=1;c2=0;PWM3(50);//左后轮
  92.     d1=1;d2=0;PWM4(50);//右后轮
  93. }
  94. void brack()
  95. {
  96.     a1=0;a2=1;PWM1(20);
  97.     b1=0;b2=1;PWM2(20);
  98.     c1=0;c2=1;PWM3(20);
  99.     d1=0;d2=1;PWM4(20);
  100. }
  101. void right()
  102. {
  103.     a1=1;a2=0;PWM1(50);
  104.     b1=1;b2=0;PWM2(50);
  105.     c1=0;c2=1;PWM3(50);
  106.     d1=1;d2=0;PWM4(50);
  107. }
  108. void left()
  109. {
  110.     a1=1;a2=0;PWM1(80);
  111.     b1=1;b2=0;PWM2(70);
  112.     c1=1;c2=0;PWM3(80);
  113.     d1=0;d2=1;PWM4(50);
  114. }

  115. void main()
  116. {
  117.      Delay_1ms(100);
  118.      Init();
  119.      
  120.    while(1)

  121.    {

  122.     switch(e)

  123.        {
  124.             case 0x00:
  125.                 a1=0;a2=0;b1=0;b2=0;c1=0;c2=0;d1=0;d2=0;   //停止
  126.                 break;
  127.             case 0x01:
  128.                 go();
  129.                  break;
  130.             case 0x02:
  131.                  brack();
  132.                 break;
  133.             case 0x03:
  134.                  right();
  135.                  break;
  136.             case 0x04:
  137.                  left();
  138.                 break;
  139.        }
  140.    }
  141. }

  142. void time0() interrupt 1
  143. {
  144.       TH0=(65536-45872)/256;
  145.       TL0=(65536-45872)%256;
  146.       time1++;
  147.       time2++;
  148.       time3++;
  149.       time4++;         
  150. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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