找回密码
 立即注册

QQ登录

只需一步,快速开始

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

蓝牙小车可调速源程序

[复制链接]
跳转到指定楼层
楼主
ID:242216 发表于 2017-10-25 21:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include<reg52.h>  
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar Buffer[4] = {0}; //从串口接收的数据
  5. uint i,j;
  6. sbit Z1=P2^0;  //左电机前进
  7. sbit Z2=P2^1;  //左电机后退
  8. sbit Y1=P2^2;  //右电机前进
  9. sbit Y2=P2^3;  //右电机后退
  10. sbit ENA=P0^0;
  11. sbit ENB=P0^1;

  12. bit Right_moto_stp=1;
  13. bit Left_moto_stp =1;
  14. uchar pwm_val_left=0;   //定义变量
  15. uchar push_val_left=0;  //左电机占空比为N/20
  16. uchar pwm_val_right=0;
  17. uchar push_val_right=0; //右电机占空比为N/20



  18. void Delay_1ms(uint i)//1ms延时
  19. {
  20. uchar x,j;
  21. for(j=0;j<i;j++)
  22. for(x=0;x<=148;x++);
  23. }
  24. /********************************************************************
  25. * 名称 : Com_Int()
  26. * 功能 : 串口中断子函数
  27. * 输入 : 无
  28. * 输出 : 无
  29. ***********************************************************************/
  30. void Com_Int(void) interrupt 4
  31. {

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

  37. }
  38. EA = 1;
  39. }
  40. /********************************************************************
  41. * 名称 : Com_Init()
  42. * 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中断
  43. * 输入 : 无
  44. * 输出 : 无
  45. ***********************************************************************/
  46. void Com_Init(void)
  47. {

  48. TMOD = 0x20;
  49. PCON = 0x00;
  50. SCON = 0x50;
  51. TH1 = 0xFd; //设置波特率 9600
  52. TL1 = 0xFd;
  53. TR1 = 1; //启动定时器1
  54. ES = 1; //开串口中断
  55. EA = 1; //开总中断
  56. }

  57. void run()
  58. {
  59.                 push_val_left=20;   
  60.                 push_val_right=20;  

  61.                 Z1=0;Z2=1;
  62.                 Y1=0;Y2=1;
  63. Delay_1ms(100);
  64. }

  65. void backrun()
  66. {
  67.                 push_val_left=20;
  68.                 push_val_right=20;

  69. Z1=1;Z2=0;
  70. Y1=1;Y2=0;
  71. Delay_1ms(100);
  72. }

  73. void left()
  74. {
  75.                 push_val_left=13;
  76.                 push_val_right=13;

  77. Z1=1;Z2=1;
  78. Y1=0;Y2=1;
  79. Delay_1ms(100);
  80. }

  81. void right()
  82. {
  83.                 push_val_left=13;
  84.                 push_val_right=13;

  85. Z1=0;Z2=1;
  86. Y1=1;Y2=1;
  87. Delay_1ms(100);
  88. }

  89. void stop()
  90. {
  91. Z1=1;Z2=1;
  92. Y1=1;Y2=1;
  93. Delay_1ms(100);
  94. }

  95. void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变电机转速,占空比

  96. {

  97. if(Left_moto_stp)

  98. {                                                                           
  99. {if(pwm_val_left<=push_val_left)

  100. { ENB=1;}

  101. else

  102.   {ENB=0;}
  103.   }
  104. {if(pwm_val_left>=20)

  105.   {pwm_val_left=0;}
  106.   }
  107. }

  108. else

  109. {ENB=0;}

  110. }



  111. void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变电机转速,占空比

  112. {

  113. if(Right_moto_stp)

  114. {

  115. if(pwm_val_right<=push_val_right)

  116. {ENA=1;}

  117. else

  118. {ENA=0;}

  119. if(pwm_val_right>=20)

  120. {pwm_val_right=0;}

  121. }

  122. else

  123. {ENA=0;}

  124. }


  125. /*TIMER0中断服务函数产生PWM信号*/
  126. void timer0 ()interrupt 1
  127. {
  128.                 TH0=0XEC;     //5ms定时   
  129.                 TL0=0X30;  
  130.                 pwm_val_left++;
  131.                 pwm_val_right++;
  132.                 pwm_out_left_moto();
  133.                 pwm_out_right_moto();
  134. }

  135. void main()
  136. {


  137. Delay_1ms(100);
  138. Com_Init();//串口初始化
  139. TMOD|=0X01;

  140. TH0= 0XFC; //2ms定时

  141. TL0= 0X30;                                                                 

  142. TR0= 1;

  143. ET0= 1;

  144. EA = 1;

  145. while(1)
  146. {
  147. switch(Buffer[0])
  148. {
  149. case 5: stop(); break;
  150. case 2: run(); break;
  151. case 8: backrun(); break;
  152. case 4: left(); break;
  153. case 6: right(); break;

  154. default:break;
  155. }

  156. }
  157. }

复制代码





评分

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

查看全部评分

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

使用道具 举报

沙发
ID:79544 发表于 2017-11-4 14:11 | 只看该作者
这个不可以调速吧?看程序里没有啊。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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