标题: 蓝牙小车可调速源程序 [打印本页]

作者: 俣戈    时间: 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. }

复制代码






作者: 腾飞的龙    时间: 2017-11-4 14:11
这个不可以调速吧?看程序里没有啊。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1