久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11765|回復: 4
打印 上一主題 下一主題
收起左側

循跡小車程序(C51)

[復制鏈接]
跳轉到指定樓層
樓主
ID:262 發表于 2014-10-21 14:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. 啟動鍵為U2P32
  2. 停止鍵為U2P33*/
  3. #include <at89x52.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. void motor_r_z(void);//右邊電動機正轉
  7. void motor_l_z(void);//左邊電動機正轉
  8. void motor_r_f(void);//右邊電動機反轉
  9. void motor_l_f(void);//左邊電動機反轉
  10. void go(uchar,uchar);//小車前進
  11. void stop(void);//小車停止
  12. sbit IN1=P2^5;//L298N的IN1接到P2.5
  13. sbit IN2=P2^4;//L298N的IN2接到P2.4
  14. sbit IN3=P2^1;//L298N的IN3接到P2.1
  15. sbit IN4=P2^2;//L298N的IN4接到P2.2
  16. sbit ENA=P2^0;//L298N的ENA接到P2.0
  17. sbit ENB=P2^3;//L298N的ENB接到P2.2
  18. sbit left_k=P0^5;//小車左轉信號輸入端為P0.5,P0.5為1時說明已經檢測到黑線
  19. sbit right_k=P0^4;//小車右轉信號輸入端為P0.4,P0.4為1時說明已經檢測到黑線
  20. sbit start_k=P3^2;//啟動按鍵為U2P32
  21. sbit stop_k=P3^3;//停止按鍵為U2P33
  22. sbit sound=P2^7;//蜂鳴器接到了P2.7上,P2.7為低電平的時候,蜂鳴器響。
  23. uchar data t_0;//每產生一次T0定時器中斷的時候t_0加1
  24. uchar data motor_r;//motor_r用于存放右邊電機轉速和轉向的數據
  25. uchar data motor_l;//motor_l用于存放左邊電機轉速和轉向的數據
  26. uchar data Speed_Parameters;
  27. //********************************延時程序
  28. void delay_1ms(uint n)
  29. {
  30. uint i,j;
  31. for(j=n;j>0;j--)
  32. for(i=20;i>0;i--);
  33. }
  34. //****************************初始化函數
  35. void ini(void)
  36. {
  37. TMOD=0x01; //T0工作在方式1
  38. TH0=0xff; //裝入T0初值
  39. TL0=0xf6;
  40. TR0=1;//開T0中斷
  41. ET0=1;//T0允許中斷
  42. EA=1;
  43. t_0=0;
  44. P2=0x00;
  45. sound=0;
  46. delay_1ms(100);//蜂鳴器響100ms
  47. sound=1;
  48. }
  49. //********************************蜂鳴器響
  50. void Sound(void)
  51. {
  52. sound=0;
  53. delay_1ms(60);
  54. sound=1;
  55. }
  56. //******************************啟動處理函數
  57. void start(void)
  58. {
  59.    uchar a;
  60. aa:while(start_k);//防抖程序
  61.    for(a=0;a<50;a++)
  62.    {
  63.   delay_1ms(1);
  64.      while(start_k)
  65.   goto aa;
  66.    }
  67.    Sound();//調用蜂鳴器發音程序
  68.    go(0x40,0x40);//直行
  69. }
  70. //*******************************直行函數
  71. void go(uchar left_motor,uchar right_motor)
  72. {
  73. Speed_Parameters=right_motor;//給速度參數賦值
  74. motor_r_z();//調用右邊電機正轉函數
  75. Speed_Parameters=left_motor;
  76. motor_l_z();//調用左邊電機正轉函數
  77. }
  78. //*******************************右邊電動機正轉
  79. void motor_r_z(void)
  80. {
  81. motor_r=0x64+Speed_Parameters;
  82. ENA=1;
  83. }
  84. //********************************左邊電機正轉
  85. void motor_l_z(void)
  86. {
  87. motor_l=0x64-Speed_Parameters;
  88. ENB=1;
  89. }
  90. //*********************************停止函數
  91. void stop(void)
  92. {
  93. ENB=0;
  94. ENA=0;
  95. }
  96. //********************************T0中斷服務程序(PWM產生)
  97. void time0(void) interrupt 1 using 2
  98. {
  99. TR0=0;//停止T0計數
  100. TH0=0xff;//當晶振頻率是12M時,每隔0.01ms中斷一次,200次中斷為PWM信號輸出的周期,
  101. TL0=0xf6;//PWM信號的頻率=1000/(200*0.01ms)=500HZ
  102. ++t_0;//產生一次中斷t_0加1
  103. ACC=t_0;//將t_0的值賦值給ACC
  104. CY=0;//清零CY
  105. ACC-=motor_r;//用ACC減去右邊電動機的參數(此參數決定了右邊電機的轉向和速度)
  106. if(CY==1)//判斷CY是否置1,如果為1,說明ACC-motor_r已經為負數,置位了CY
  107. {
  108. IN1=1;//IN1由原來的0變成了1
  109. IN2=0;//IN2由原來的1變成了0
  110. goto PWM_2;
  111. }
  112. IN1=0;//如果CY不等于1,IN1=0,IN2=1
  113. IN2=1;
  114. PWM_2:
  115. ACC=t_0;//重新將t_0的值賦值給ACC
  116. CY=0;//清零CY
  117. ACC-=motor_l;//用ACC減去左邊電動機的參數(此參數決定了左邊電機的轉向和速度)
  118.    if(CY==1)//判斷CY是否置1,如果為1,說明ACC-motor_l已經為負數,置位了CY
  119.    {
  120.   IN3=1;//IN3由原來的0變成了1
  121.      IN4=0;//IN4由原來的1變成了0
  122.     goto HIGHT;
  123.    }
  124. IN3=0;//如果CY不等于1,IN3=0,IN4=1
  125.    IN4=1;
  126. HIGHT:
  127. //ACC=t_0; //重新將t_0的值賦值給ACC
  128. if(t_0!=0xc8)//判斷t_0的值是否不等于200
  129. goto EXIT;//如果不等于200,程序指針指向EXIT執行程序
  130. ACC=0;//如果t_0的值等于200,清零ACC和t_0
  131. t_0=ACC;
  132. EXIT:
  133. TR0=1;//打開TO計數
  134. }
  135. //********************************啟動或關閉小車
  136. void all_on(void)
  137. {
  138. if((left_k==1)&&(right_k==1))
  139. {
  140.   stop();
  141.   start();//跳到啟動處理函數,執行程序
  142.   while((left_k==1)&&(right_k==1));
  143. }
  144. }
  145. //**********************************主函數
  146. void main(void)
  147. {
  148. uchar a;
  149. ini();//調用初始化函數
  150. start();//調用啟動處理函數
  151. ////判斷左傳感器狀態////
  152. while(1)
  153. {
  154. aa:
  155.   all_on();
  156.         while(!left_k)//判斷左邊傳感器的值是否為0
  157.         goto bb;//如果是0,程序指針指向標號bb,執行程序
  158.   P1_0=0;//如果是1,點亮P1.0上連接的發光二極管
  159.   // Sound();
  160.   while(left_k)//如果left_k的值一直為1,不斷的循環執行 go(0x00,0x64);小車左轉 直到left_k的值為0為止。
  161.   {
  162.    go(0x00,0x45);//0x00,0x64分別代表左右電動機的轉速,兩個值的取值為0x00到0x64之間,0x00最慢。0x64最快
  163.    all_on();
  164.   }            //0x00,0x64這兩個值不一樣代表兩個電機向前轉的速度不同,小車將拐彎
  165.         go(0x40,0x40);//執行到這句說明left_k已經為1,說明左傳感器已經離開了黑線。小車直線前進
  166.                  //0x40,0x40這連個值同表示小車執行這個函數時將向前走,用戶可以自任意修改這些數值,達到小車走黑線
  167.                  //最穩定的效果,建議不要取得太大(十六進制0x64是最大,其實也就是十進制數的100),也就是速度等級
  168.         //為0到100個等級。
  169.   P1_0=1;//關閉LED指示燈
  170. ////判斷右傳感器狀態////
  171. bb:
  172.   all_on();
  173.         while(!right_k)//判斷右傳感器的值是否為0
  174.         goto cc;//如果是0,程序指針指向標號cc,執行程序
  175.   P1_1=0;//如果是1,點亮P1.1上連接的發光二極管
  176.         // Sound();
  177.   while(right_k)//如果right_k的值一直為1,不斷的循環執行go(0x64,0x0),小車右轉,直到right_k的值為0為止
  178.    {
  179.    go(0x45,0x00);
  180.    all_on();
  181.   }
  182.         go(0x40,0x40);//執行到這句說明right_k已經為1,說明左傳感器已經離開了黑線。小車直線前進
  183.   P1_1=1;//關閉LED指示燈
  184. ///判斷是否按下停止按鈕//////
  185. cc:   

  186.   while(stop_k)//判斷停止鍵是否按下,按下的時候stop_k為1
  187.         goto aa;////如果是1,程序指針指向標號aa,執行程序
  188.         for(a=0;a<20;a++)//如果是0,進入防抖程序
  189.         {
  190.    delay_1ms(1);
  191.            while(stop_k)//判斷20次stop_k是否為1
  192.            goto cc;//如果是1,程序指針指向標號cc,執行程序
  193.         }
  194.         stop();//20次判斷之后stop_k都是0,立馬停止兩個電動機
  195.         start();//跳到啟動處理函數,執行程序。
  196. }
  197. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:28571 發表于 2015-4-18 16:00 | 只看該作者
下載看看,學習一下,謝謝!
回復

使用道具 舉報

板凳
ID:91274 發表于 2016-3-26 15:59 | 只看該作者
下載看看 ,謝謝樓主
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜高清 | 亚洲日本成人 | 久久国产精品免费一区二区三区 | 色综合中文 | 九色国产 | 亚洲福利| av天空| www.夜夜草 | 午夜精品视频在线观看 | 日本一道本视频 | 亚洲人在线播放 | 亚洲欧美国产毛片在线 | 欧美激情在线精品一区二区三区 | 久久久国产一区 | 欧美日本一区二区 | 国产美女一区 | 正在播放国产精品 | 亚洲精品视频免费观看 | 国产一级在线 | 亚洲综合日韩精品欧美综合区 | 日本特黄a级高清免费大片 国产精品久久性 | 九九久久精品视频 | 一区二区三区视频在线免费观看 | 亚洲一区二区三区久久 | 免费看一级毛片 | 人人干人人爽 | 九九热最新地址 | 国产99久久精品一区二区永久免费 | 日韩成人av在线 | 中文字幕在线一区 | 久久久久久亚洲精品 | 黄色片大全在线观看 | 国产极品粉嫩美女呻吟在线看人 | 日韩福利 | 亚洲国产网址 | 国产精品久久av | av影音在线 | 日本五月婷婷 | 国产 日韩 欧美 在线 | 欧美激情在线精品一区二区三区 | 国产一区二区在线免费观看 |