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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 978|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)循跡小車的程序錯誤,求解答

[復(fù)制鏈接]
回帖獎勵 200 黑幣 回復(fù)本帖可獲得 20 黑幣獎勵! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:1106201 發(fā)表于 2024-4-10 13:27 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
以下是我參照論壇內(nèi)大佬的代碼寫的單片機(jī)代碼,在仿真上出現(xiàn)了以下錯誤
1.在沒有信號時,其不能完全停止。motor仍顯示在轉(zhuǎn)動,但較為緩慢。(void stop)不知道是仿真的問題還是程序的問題。(全部給的反轉(zhuǎn),速度全部為0)
2.我寫的六個運(yùn)動方式,分別為:停止(stop),直走zhizou)、左大轉(zhuǎn)(dazhuan1)、右大轉(zhuǎn)(dazhuan2)、左微調(diào)(weitiao1)、右微調(diào)(weitiao2)
   現(xiàn)在的問題是除左大轉(zhuǎn)外,其余的運(yùn)轉(zhuǎn)方式都成功,左大轉(zhuǎn)的左電機(jī)管腳出出現(xiàn)閃爍,疑似信號沖突,但我沒有找到?jīng)_突的點(diǎn)在哪?
3.我嘗試過將左大轉(zhuǎn)的正反轉(zhuǎn)函數(shù)將0換成1,結(jié)果其運(yùn)行正常,求解
請求各位大佬的幫助,搞了幾天,真的看不到?jīng)_突的點(diǎn)在哪里.(還有,模擬紅外傳感器的按鈕松開表示有信號1,按下默認(rèn)為0)
程序?qū)懙暮軄y,但是希望各位大佬能耐心看完,指出問題所在。急需。
在此,感激不盡。祝生活愉快,萬事如意。
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. extern void Motor_Left_Q(bit ReverOrCoro, unsigned char DutyCycle); //????????
  5. extern void Motor_Left_H(bit ReverOrCoro, unsigned char DutyCycle);
  6. extern void Motor_Right_Q(bit ReverOrCoro, unsigned char DutyCycle); //????????
  7. extern void Motor_Right_H(bit ReverOrCoro, unsigned char DutyCycle);
  8. extern void stop(void);

  9. void Timer0Config(); //        ?????0

  10. void zhizou();
  11. void dazhuan1();
  12. void dazhuan2();
  13. void weitiao1();
  14. void weitiao2();


  15. sbit ENA1 = P1^5; //???????                                   
  16. sbit ENB1= P1^6;
  17. sbit ENA2 = P2^5; //???????                                   
  18. sbit ENB2= P2^6;
  19. sbit led = P2^4;//???
  20. uchar a;

  21. uchar Infrared; //??P0?????   ?????
  22. void scan(void);
  23. sbit inputL1=P0^0;   //?1
  24. sbit inputL2=P0^1;    //?2
  25. sbit inputR1=P0^2;      //?2
  26. sbit inputR2=P0^3;      //?1

  27. void main()
  28. {
  29.         Timer0Config();
  30.         ENA1 = 1;
  31.     ENB1 = 1;
  32.     ENA2 = 1;
  33.     ENB2 = 1;
  34.     while(1)
  35.         {               
  36.          scan();
  37.         }
  38. }


  39. void scan()           
  40. {
  41.           if(inputL1==0&&inputR1==0&&inputL2==0&&inputR2==0)        //0000
  42.           {
  43.                         stop();
  44.            }
  45.           if(inputL1==1&&inputL2==0&&inputR1==0&&inputR2==0) //1000
  46.           {
  47.                         dazhuan1();
  48.            }
  49.           if(inputL1==0&&inputL2==1&&inputR1==0&&inputR2==0)  //0100
  50.           {
  51.                         weitiao1();
  52.            }
  53.             if(inputL1==0&&inputL2==0&&inputR1==1&&inputR2==0) //0010
  54.           {
  55.                         weitiao2();
  56.            }
  57.       if(inputL1==0&&inputL2==0&&inputR1==0&&inputR2==1)        //0001
  58.           {
  59.                         dazhuan2() ;
  60.            }
  61.        else
  62.       {
  63.            zhizou();
  64.       }
  65. }


  66. void zhizou()
  67. {
  68.      Infrared = inputL1==1&&inputL2==1&&inputR1==1&&inputR2==1;
  69.          Motor_Left_Q(1, 100), Motor_Right_Q(1, 100);
  70.      Motor_Left_H(1, 100), Motor_Right_H(1, 100);
  71.          
  72. }
  73. void dazhuan1()       //左大轉(zhuǎn)/    1000
  74. {
  75.             Motor_Left_Q(0, 200); Motor_Right_Q(1, 200);
  76.             Motor_Left_H(0, 200); Motor_Right_H(1, 200);
  77.       
  78.     }

  79.     void dazhuan2()    //右大轉(zhuǎn)/   0001
  80. {
  81.         
  82.                 Motor_Left_Q(1, 200); Motor_Right_Q(0, 200);
  83.         Motor_Left_H(1, 200); Motor_Right_H(0, 200);   
  84.      }
  85. void weitiao1()     //左微調(diào)/  0100
  86. {
  87.         
  88.                 Motor_Left_Q(1, 10); Motor_Right_Q(1, 100);
  89.         Motor_Left_H(1, 10); Motor_Right_H(1, 100);
  90.         Infrared = inputL1==0&&inputL2==1&&inputR1==0&&inputR2==0;
  91.                
  92. }


  93. void weitiao2()//右微調(diào)/   0010
  94. {

  95.                 Motor_Left_Q(1, 100); Motor_Right_Q(1, 10);
  96.         Motor_Left_H(1, 100); Motor_Right_H(1, 10);//60
  97.         Infrared = inputL1==0&&inputL2==0&&inputR1==1&&inputR2==0;
  98. }               

  99. void stop()
  100. {
  101.          Motor_Left_Q(1, 0), Motor_Right_Q(1, 0);
  102.      Motor_Left_H(1, 0), Motor_Right_H(1, 0);  
  103. }
  104. void Timer0Config()
  105. {
  106.         TMOD &= 0xF0;
  107.         TMOD |= 0x01;
  108.         TH0 = 0xFF;
  109.         TL0 = 0x7E;
  110.         EA = 1;
  111.         ET0 = 1;
  112.         TR0 = 1;
  113. }
復(fù)制代碼
  1. #include<reg51.h>

  2. sbit IN1 = P1^0; //定義左前電機(jī)控制引腳   
  3. sbit IN2 = P1^1; //                     
  4. sbit IN3 = P1^2; //定義左后電機(jī)控制引腳   
  5. sbit IN4 = P1^3; //                     
  6. sbit IN5 = P2^0; //定義右前電機(jī)控制引腳   
  7. sbit IN6 = P2^1; //                     
  8. sbit IN7 = P2^2; //定義右后電機(jī)控制引腳   
  9. sbit IN8 = P2^3; //                     

  10. void Motor_Left_Q(bit ReverOrCoro, unsigned char DutyCycle);  //左前邊電機(jī)控制函數(shù)
  11. void Motor_Right_Q(bit ReverOrCoro, unsigned char DutyCycle); //右前邊電機(jī)控制函數(shù)
  12. void Motor_Left_H(bit ReverOrCoro, unsigned char DutyCycle);  //左后邊電機(jī)控制函數(shù)
  13. void Motor_Right_H(bit ReverOrCoro, unsigned char DutyCycle); //右后邊電機(jī)控制函數(shù)

  14. unsigned char cnt = 0;

  15. void Motor_Left_Q(bit ReverOrCoro, unsigned char DutyCycle) //傳遞正反轉(zhuǎn)(1為正轉(zhuǎn),0為反轉(zhuǎn))、占空比參數(shù)    左前
  16. {
  17.         if(ReverOrCoro == 1)
  18.         {
  19.                 IN1 = 1;
  20.                 if(cnt <= DutyCycle)
  21.                 {
  22.                         IN2 = 0;
  23.                 }
  24.                 else
  25.                 {
  26.                         IN2 = 1;
  27.                 }
  28.         }
  29.         else
  30.         {
  31.                 IN2 = 1;
  32.                 if(cnt <= DutyCycle)
  33.                 {
  34.                         IN1 = 0;
  35.                 }
  36.                 else
  37.                 {
  38.                         IN1 = 1;
  39.                 }
  40.         }
  41. }

  42. void Motor_Left_H(bit ReverOrCoro, unsigned char DutyCycle) //傳遞正反轉(zhuǎn)(1為正轉(zhuǎn),0為反轉(zhuǎn))、占空比參數(shù)DutyCycle   左后
  43. {
  44.         if(ReverOrCoro == 1)
  45.         {
  46.                 IN3 = 1;
  47.                 if(cnt <= DutyCycle)
  48.                 {
  49.                         IN4 = 0;
  50.                 }
  51.                 else
  52.                 {
  53.                         IN4 = 1;
  54.                 }
  55.         }
  56.         else
  57.         {
  58.                 IN4 = 1;
  59.                 if(cnt <= DutyCycle)
  60.                 {
  61.                         IN3 = 0;
  62.                 }
  63.                 else
  64.                 {
  65.                         IN3 = 1;
  66.                 }
  67.         }
  68. }

  69. void Motor_Right_Q(bit ReverOrCoro, unsigned char DutyCycle) //傳遞正反轉(zhuǎn)(1為正轉(zhuǎn),0為反轉(zhuǎn))、占空比參數(shù)    右前
  70. {
  71.         if(ReverOrCoro == 1)
  72.         {
  73.                 IN5 = 1;
  74.                 if(cnt <= DutyCycle)
  75.                 {
  76.                         IN6 = 0;
  77.                 }
  78.                 else
  79.                 {
  80.                         IN6 = 1;
  81.                 }
  82.         }
  83.         else if(ReverOrCoro == 0)
  84.         {
  85.                 IN6 = 1;
  86.                 if(cnt <= DutyCycle)
  87.                 {
  88.                         IN5 = 0;
  89.                 }
  90.                 else
  91.                 {
  92.                         IN5 = 1;
  93.                 }
  94.         }
  95. }

  96. void Motor_Right_H(bit ReverOrCoro, unsigned char DutyCycle) //傳遞正反轉(zhuǎn)(1為正轉(zhuǎn),0為反轉(zhuǎn))、占空比參數(shù)    右后
  97. {
  98.         if(ReverOrCoro == 1)
  99.         {
  100.                 IN7 = 1;
  101.         IN8 = 0;
  102.                 /*if(cnt <= DutyCycle)
  103.                 {
  104.                         
  105.                 }
  106.                 else
  107.                 {
  108.                         IN8 = 1;
  109.                 }*/
  110.         }
  111.         else if(ReverOrCoro == 0)
  112.         {
  113.                 IN8 = 1;
  114.         IN7 = 0;
  115.                 /*if(cnt <= DutyCycle)
  116.                 {
  117.                         
  118.                 }
  119.                 else
  120.                 {
  121.                         IN7 = 1;
  122.                 }*/
  123.         }
  124. }
  125. void InterruptTimer0() interrupt 1  
  126. {
  127.         TH0 = 0xFF;
  128.         TL0 = 0x7E;
  129.         cnt++;
  130.         if(cnt >= 100)
  131.         {
  132.                 cnt = 0;
  133.         }
  134. }
復(fù)制代碼

motor,test.zip

25.55 KB, 下載次數(shù): 4

仿真

程序測試.zip

106.07 KB, 下載次數(shù): 4

其中的個人嘗試為原文件

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

使用道具 舉報

板凳
ID:161164 發(fā)表于 2024-4-11 11:31 | 只看該作者
程序附件里只有keil的項目檔
沒有C檔H檔
回復(fù)

使用道具 舉報

沙發(fā)
ID:79094 發(fā)表于 2024-4-11 09:00 | 只看該作者
硬件 連接有沒有問題
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 美女在线国产 | 欧美在线不卡 | 国产不卡一 | 在线观看毛片网站 | 亚洲成人一区二区 | 日韩成人在线观看 | 午夜视频在线 | 免费一二区 | 欧美日韩亚洲一区 | 亚洲黄色在线免费观看 | 综合九九 | 久久中文字幕一区 | 男人的天堂中文字幕 | 中文字幕在线精品 | 亚洲中字在线 | 久久久久久久久国产精品 | 黄色小视频大全 | 久草精品视频 | 欧美一区视频 | 免费久久网| av在线播放免费 | 国产成人在线播放 | 一级片在线观看 | 一级毛片在线播放 | 国产高清在线观看 | 国产成人av一区二区三区 | 99久久精品国产一区二区三区 | 亚洲午夜精品视频 | 国产一二三区免费视频 | 欧美综合国产精品久久丁香 | 中文成人无字幕乱码精品 | 成人一区二区在线 | 亚洲精品第一页 | 秋霞在线一区 | 福利视频网站 | 国产午夜精品一区二区三区四区 | 亚洲第一色av | 国产电影一区二区在线观看 | 国产区精品在线观看 | 欧美激情国产精品 | 午夜一区|