找回密码
 立即注册

QQ登录

只需一步,快速开始

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

智能寻迹小车CODE

[复制链接]
跳转到指定楼层
楼主
第一次发帖 给我点黑b吧


资料下载:
智能寻迹小车CODE 11-14.rar (32.13 KB, 下载次数: 10)

  1. /*******************引脚定义****************/
  2. #include "reg51.h"  
  3. typedef unsigned int uint;  
  4. typedef unsigned char uchar;

  5. #define Duty_cycle  35  //占空比
  6. #define Cycle       100 //PWM周期

  7. sbit Sensor_1 = P1^1;  //红外检测
  8. sbit Sensor_2 = P1^2;  
  9. sbit Sensor_3 = P1^3;   

  10. sbit Motor_1H = P2^0;  //电机驱动控制信号
  11. sbit Motor_1L = P2^1;  
  12. sbit Motor_2H = P2^2;  
  13. sbit Motor_2L = P2^3;  

  14. sbit En_pwm1 = P2^4;          //使能信号(PWM)
  15. sbit En_pwm2 = P2^5;

  16. uchar timer1;           //定义变量
  17. /*******************************************************************************
  18. * 函 数 名       : Time1Config
  19. * 函数功能                 : 设置定时器
  20. * 输    入       : 无
  21. * 输    出       : 无
  22. *******************************************************************************/
  23. /**************设置定时器***********/
  24. void Time1Config()
  25. {
  26.         TMOD|= 0x10;   //设置定时计数器T1工作在模式1

  27.         /***定时器赋初始值,12MHZ下定时0.5ms***/  
  28.         TH1 = 0xFE;
  29.         TL1 = 0x0C;

  30.         ET1 = 1;          //开启定时器1中断
  31.         EA = 1;
  32.         TR1 = 1;         //开启定时器       
  33. }

  34. /************************************************  
  35. 延时函数   
  36. 总共延时
  37. 1ms
  38. 乘以
  39. count  
  40. ************************************************/  
  41. void DelayX1ms(uint count)  
  42. {  
  43. uint j;  
  44. while(count--!=0)  
  45. {  
  46.   for(j=0;j<72;j++);
  47. }  
  48. }  
  49. /************************************************

  50. 电机转动函数定义

  51. ************************************************/  

  52. void Go_Straight( )  
  53. {   
  54. Motor_1H = 0;  
  55. Motor_1L = 0;  
  56. Motor_2H = 0;  
  57. Motor_2L = 0;
  58. DelayX1ms(10);

  59. Motor_1H = 1;  
  60. Motor_1L = 0;  
  61. Motor_2H = 1;  
  62. Motor_2L = 0;
  63. DelayX1ms(20);
  64. }  

  65. void Turn_Left( )  
  66. {
  67. En_pwm1=0;
  68. En_pwm2=0;
  69. DelayX1ms(10);  

  70. Motor_1H = 0;  
  71. Motor_1L = 1;  
  72. Motor_2H = 1;  
  73. Motor_2L = 0;
  74. DelayX1ms(20);
  75. }  

  76. void Turn_Right( )  
  77. {  
  78. En_pwm1=0;
  79. En_pwm2=0;
  80. DelayX1ms(10);

  81. Motor_1H = 1;  
  82. Motor_1L = 0;  
  83. Motor_2H = 0;  
  84. Motor_2L = 1;
  85. DelayX1ms(20);
  86. }  

  87. void Go_Back( )  
  88. {  
  89. Motor_1H = 0;  
  90. Motor_1L = 0;  
  91. Motor_2H = 0;  
  92. Motor_2L = 0;
  93. DelayX1ms(10);

  94. Motor_1H = 0;  
  95. Motor_1L = 1;  
  96. Motor_2H = 0;  
  97. Motor_2L = 1;
  98. DelayX1ms(20);
  99. }


  100. /**************主函数**************************/  
  101. void main( )  
  102. {  
  103. Time1Config();  //定时器初始化

  104. while(1)  
  105. {  
  106. if(Sensor_1==0 && Sensor_2==1 && Sensor_3==0)      //状态:轨迹居中
  107.    Go_Straight();                                  //方向:前进
  108. else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==1)       //状态:偏左
  109.    Turn_Right();                                     //方向:右转
  110. else if(Sensor_1==1 && Sensor_2==0 && Sensor_3==0) //状态:偏右
  111.    Turn_Left();                                //方向:左转
  112. else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==0)       //状态:偏离轨道
  113.    Go_Back();                                      //方向:后退
  114. else  Go_Straight( );                              //其他情况:前进
  115. }     
  116. }

  117. /*******************************************************************************
  118. * 函 数 名       : Time1
  119. * 函数功能                 : 定时器1的中断函数
  120. * 输    入       : 无
  121. * 输    出       : 无
  122. * 备    注       : 3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断
  123. *******************************************************************************/
  124. /********************定时器1的中断函数********************/
  125. void Time1(void) interrupt 3    //3 为定时器1的中断号
  126. {
  127.            timer1++;         
  128.         if(timer1>Cycle)              //PWM周期为100*0.5ms
  129.                 {
  130.                         timer1=0;
  131.                 }
  132.                 if(timer1 < Duty_cycle)            //改变Duty_cycle这个值可以改变直流电机的速度
  133.                 {
  134.                         En_pwm1=1;
  135.                         En_pwm2=1;
  136.                 }
  137.                 else
  138.                 {
  139.                         En_pwm1=0;
  140.                         En_pwm2=0;
  141.                 }       
  142.         TH1 = 0xFE;                   //重新赋初值
  143.         TL1 = 0x0C;
  144. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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