找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙控制小车上位机、下位机源程序

[复制链接]
跳转到指定楼层
楼主
一款用来控制小车的上位机,含程序代码,之前自己用的时候找了很久才找到,现在贴出来,方便大家使用

上位机和下位机的源码:
蓝牙遥控小车.zip (109.45 KB, 下载次数: 39)


下位机单片机源码:
  1. #include<reg52.h>
  2. #include<math.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar Buffer[4] = {0}; //从串口接收的数据
  6. uint i,j;
  7. sbit en1=P2^4; /* L298的Enable A */
  8. sbit en2=P2^5; /* L298的Enable B */
  9. sbit s1=P2^0; /* L298的Input 1 */
  10. sbit s2=P2^1; /* L298的Input 2 */
  11. sbit s3=P2^2; /* L298的Input 3 */
  12. sbit s4=P2^3; /* L298的Input 4 */
  13. uchar t=0; /* 中断计数器 */
  14. uchar m1=0; /* 电机1速度值 */
  15. uchar m2=0; /* 电机2速度值 */
  16. uchar tmp1,tmp2; /* 电机当前速度值 */


  17. /********************************************************************
  18. * 名称 : Delay_1ms()
  19. * 功能 : 延时子程序,延时时间为 1ms * x
  20. * 输入 : x (延时一毫秒的个数)
  21. * 输出 : 无
  22. ***********************************************************************/
  23. void Delay_1ms(uint i)//1ms延时
  24. {
  25. uchar x,j;
  26. for(j=0;j<i;j++)
  27. for(x=0;x<=148;x++);
  28. }



  29. /********************************************************************
  30. * 名称 : Init()
  31. * 功能 : 初始化,晶振11.0592,波特率9600,使串口中断,同时定时器0控制PWM
  32. * 输入 : 无
  33. * 输出 : 无
  34. ***********************************************************************/
  35. void Init(void)
  36. {
  37. TMOD = 0x22;
  38. PCON = 0x00;
  39. SCON = 0x50;
  40. TH0=0x9b;
  41. TL0=0x9b;
  42. TH1 = 0xFd; //设置波特率 9600
  43. TL1 = 0xFd;
  44. TR1 = 1; //启动定时器1
  45. ET0=1;
  46. TR0=1;
  47. ES = 1; //开串口中断
  48. EA = 1; //开总中断
  49. }
  50. void motorL( char speed)
  51. {         m1=abs(speed); /* 取速度的绝对值 */
  52.         if(speed>0)
  53.                 {s1=0;
  54.                  s2=1;
  55.                  }
  56.      else
  57.            {        s1=1;
  58.                         s2=0;
  59.                  }  
  60. }
  61. void motorR( char speed)
  62. {
  63.         m2=abs(speed); /* 电机2的速度控制 */
  64.         if(speed>0)
  65.                 {s3=0;
  66.                  s4=1;
  67.                  }
  68.         else
  69.                  {        s3=1;
  70.                         s4=0;
  71.                  }  
  72. }
  73. void GO(void)

  74. {        motorL(100);
  75.         motorR(100);

  76. }
  77. void BACK()
  78. {        motorL(-100);
  79.         motorR(-100);
  80. }
  81. void TL(void)
  82. {
  83.         motorL(-30);
  84.         motorR(100);
  85. }
  86. void TR(void)
  87. {        motorL(100);
  88.         motorR(-30);
  89. }

  90. void STOP(void)
  91. {
  92. s1=1;
  93. s2=1;
  94. s3=1;
  95. s4=1;
  96. }

  97. void main()
  98. {
  99. Delay_1ms(100);
  100. Init();//初始化


  101. while(1)
  102. {
  103. switch(Buffer[0])
  104. {
  105. case 0: STOP(); break;
  106. case 1: GO(); break;
  107. case 2: TR(); break;
  108. case 3: BACK();break;
  109. case 4: TL();  break;                  

  110. default:break;
  111. }

  112. }
  113. }

  114. void Com_Int(void) interrupt 4
  115. {

  116.         EA = 0;
  117.         if(RI == 1) //当硬件接收到一个数据时,RI会置位
  118.         {
  119.                 Buffer[0] = SBUF - 48; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  120.                 RI = 0;

  121.         }
  122.         EA = 1;
  123. }
  124. void timer0() interrupt 1 /* T0中断服务程序 */
  125. {
  126.         if(t==0) /* 1个PWM周期完成后才会接受新数值 */
  127.         {         tmp1=m1;
  128.                 tmp2=m2;
  129.         }
  130.         if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号 */
  131.         if(t<tmp2) en2=1; else en2=0; /* 产生电机2的PWM信号 */
  132.         t++;
  133.         if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */
  134. }                                 

复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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