找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2452|回復: 0
收起左側

智能尋跡小車CODE

[復制鏈接]
ID:160968 發(fā)表于 2017-1-9 16:20 | 顯示全部樓層 |閱讀模式
第一次發(fā)帖 給我點黑b吧
0.png

資料下載:
智能尋跡小車CODE 11-14.rar (32.13 KB, 下載次數(shù): 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;  //電機驅(qū)動控制信號
  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. * 函 數(shù) 名       : Time1Config
  19. * 函數(shù)功能                 : 設置定時器
  20. * 輸    入       : 無
  21. * 輸    出       : 無
  22. *******************************************************************************/
  23. /**************設置定時器***********/
  24. void Time1Config()
  25. {
  26.         TMOD|= 0x10;   //設置定時計數(shù)器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. 延時函數(shù)   
  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. 電機轉動函數(shù)定義

  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. /**************主函數(shù)**************************/  
  101. void main( )  
  102. {  
  103. Time1Config();  //定時器初始化

  104. while(1)  
  105. {  
  106. if(Sensor_1==0 && Sensor_2==1 && Sensor_3==0)      //狀態(tài):軌跡居中
  107.    Go_Straight();                                  //方向:前進
  108. else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==1)       //狀態(tài):偏左
  109.    Turn_Right();                                     //方向:右轉
  110. else if(Sensor_1==1 && Sensor_2==0 && Sensor_3==0) //狀態(tài):偏右
  111.    Turn_Left();                                //方向:左轉
  112. else if(Sensor_1==0 && Sensor_2==0 && Sensor_3==0)       //狀態(tài):偏離軌道
  113.    Go_Back();                                      //方向:后退
  114. else  Go_Straight( );                              //其他情況:前進
  115. }     
  116. }

  117. /*******************************************************************************
  118. * 函 數(shù) 名       : Time1
  119. * 函數(shù)功能                 : 定時器1的中斷函數(shù)
  120. * 輸    入       : 無
  121. * 輸    出       : 無
  122. * 備    注       : 3 為定時器1的中斷號 1 定時器0的中斷號 0 外部中斷1 2 外部中斷2  4 串口中斷
  123. *******************************************************************************/
  124. /********************定時器1的中斷函數(shù)********************/
  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. }
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表