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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4路紅外循跡加超聲波避障程序和資料-網上買的的智能小車

  [復制鏈接]
跳轉到指定樓層
樓主
ID:224025 發表于 2017-8-12 09:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本小車是從網上買的,7.2v電車供電,L298N電機驅動模塊。
系統的硬件包括以下幾個部分:
(1)MCU:STC89C52;
(2)電源:7.2V、1600mah的可充電鎳鎘電池;
(3)紅外光電傳感器;
(4)超聲波傳感器:HC-SR04
(5)兩個直流電機;
(6)電機驅動芯片:L298N。

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define somenop  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();
  4. #define DIS_DATA  P0

  5. unsigned char code DIS_TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  6.                     0x88,0x83,0xc6,0xa1,0x86,0x8e};
  7. sbit cs0 = P2^0;
  8. sbit cs1 = P2^1;
  9. sbit cs2 = P2^2;
  10. sbit cs3 = P2^3;
  11. sbit MOTO1_IN1 = P1^0;//左輪電機
  12. sbit MOTO1_IN2 = P1^1;
  13. sbit MOTO2_IN1 = P1^2;//右輪電機
  14. sbit MOTO2_IN2 = P1^3;
  15. sbit MOTO1_PWM = P1^4;
  16. sbit MOTO2_PWM = P1^5;
  17. sbit Tx = P3^3;
  18. sbit Rx = P3^2;
  19. sbit Key_1 = P3^5;
  20. sbit Key_2 = P3^4;
  21. sbit Led = P1^7;

  22. void RED_SCAN(void);
  23. void Turn_Forward(void);
  24. void Turn_Right(void);
  25. void Turn_Left(void);
  26. void Turn_Stop(void);
  27. void Turn_SRight(void);
  28. void Turn_SLeft(void);
  29. void Test(void);
  30. void Key_Scan(void);
  31. void send_wave(void);
  32. void Delay10us(void);
  33.        
  34. unsigned char i = 0,j = 0;
  35. unsigned char a = 0,b = 0;
  36. unsigned char flag = 0;
  37. unsigned char flag1 = 0;
  38. unsigned char timeH = 0,timeL = 0,time = 0;
  39. unsigned char mode;
  40. unsigned char flag_csb_juli=0;
  41. unsigned char iCnt;
  42. unsigned int displayvalue;
  43. unsigned int scan_status;

  44. float distance;

  45. int main()
  46. {
  47.         Tx = 0;
  48.         EA = 1;
  49.         TMOD = 0x11;
  50.         TR0=0;
  51.         TR1=0;
  52.         MOTO1_PWM = 0;
  53.         MOTO2_PWM = 0;
  54.         TH0 = 65517/256;
  55.         TL0 = 65517%256;
  56.        
  57.         while(1)
  58.         {       
  59.                 Key_Scan();
  60.                 if(mode == 1)
  61.                 {
  62.                         ET0 = 1;
  63.                         TR0 = 1;
  64.                 }
  65.                 if(mode == 2)
  66.                 {
  67.                         ET0 = 0;
  68.                         TR0 = 0;
  69.                         MOTO1_PWM = 1;
  70.                         MOTO2_PWM = 1;
  71.                         send_wave();
  72.                        
  73.                 }
  74.         }
  75.        
  76. }

  77. void RED_SCAN(void)
  78. {
  79.         switch(P2&0xf0)
  80.         {
  81.                
  82.                         case 0x60:        Turn_Forward();flag = 0;scan_status=110;
  83.                         break;
  84.                
  85.                         case 0xC0:        Turn_Right();flag = 0;scan_status=1100;
  86.                         break;
  87.                
  88.                         case 0x30:  Turn_Left();flag = 0;scan_status=11;
  89.                         break;
  90.                
  91.                         case 0x80:  Turn_SRight();flag = 2;scan_status=1000;
  92.                         break;
  93.                
  94.                         case 0x10:  Turn_SLeft(); flag = 1;scan_status=1;
  95.                         break;
  96.                
  97.                         case 0xE0:  Turn_Right();flag = 0;scan_status=1110;
  98.                         break;
  99.                
  100.                         case 0x70:  Turn_Left();flag = 0;scan_status=111;
  101.                         break;
  102.                        
  103.                         case 0x20:  Turn_Right();flag = 0;scan_status=10;
  104.                         break;
  105.                        
  106.                         case 0x40:         Turn_Left();flag = 0;scan_status=100;
  107.                         break;
  108.                        
  109.                         default:                Test();        scan_status=0;
  110.                         break;

  111.         }

  112. }

  113. void Turn_Forward(void)
  114. {
  115.         MOTO1_IN1=0;
  116.         MOTO1_IN2=1;
  117.         MOTO2_IN1=0;
  118.         MOTO2_IN2=1;
  119.         a=80;
  120.         b=70;
  121. }

  122. void Turn_Right(void)
  123. {
  124.         MOTO1_IN1=0;
  125.         MOTO1_IN2=1;
  126.         MOTO2_IN1=0;
  127.         MOTO2_IN2=1;
  128.         a=70;
  129.         b=85;
  130. }


  131. void Turn_Left(void)
  132. {
  133.         MOTO1_IN1=0;
  134.         MOTO1_IN2=1;
  135.         MOTO2_IN1=0;
  136.         MOTO2_IN2=1;
  137.         a=85;
  138.         b=70;
  139. }
  140. void Turn_SRight(void)
  141. {
  142.         MOTO1_IN1=0;
  143.         MOTO1_IN2=1;
  144.         MOTO2_IN1=0;
  145.         MOTO2_IN2=0;
  146. //        TR0=1;
  147.         a=80;
  148.         b=70;

  149. }
  150. void Turn_SLeft(void)
  151. {
  152.         MOTO1_IN1=0;
  153.         MOTO1_IN2=0;
  154.         MOTO2_IN1=0;
  155.         MOTO2_IN2=1;
  156.         a=80;
  157.         b=70;
  158. }
  159. void Turn_Stop(void)
  160. {
  161.         MOTO1_IN1=0;
  162.         MOTO1_IN2=0;
  163.         MOTO2_IN1=0;
  164.         MOTO2_IN2=0;

  165. }

  166. void Test(void)
  167. {
  168.         if(flag==0)
  169.         Turn_Stop();
  170.         if(flag==1)
  171.         Turn_SLeft();
  172.         if(flag==2)
  173.         Turn_SRight();
  174. }

  175. void timer0() interrupt 1
  176. {       
  177.                
  178.                 TR0 = 0;
  179.                
  180.                 i++;
  181.                 TH0=65517/256;
  182.                 TL0=65517%256;
  183.                  
  184.         iCnt++;
  185.                         if(mode == 1)
  186.                         {
  187.                                 displayvalue=scan_status;
  188.                                 //displayvalue=1234;
  189.                         }
  190.                         else
  191.                         {
  192.                             displayvalue=(int)distance;
  193.                        
  194.                         }
  195.                        
  196.                         if(iCnt == 10)
  197.                         {
  198.                                 DIS_DATA = 0xff;        //消影
  199.                                 cs0 = 1;
  200.                                 cs1 = 1;
  201.                                 cs2 = 1;
  202.                                 cs3 = 0;
  203.                                 DIS_DATA = DIS_TABLE[displayvalue % 10];
  204.                         }
  205.                         if(iCnt == 20)
  206.                         {
  207.                                 DIS_DATA = 0xff;        //消影
  208.                                 cs0 = 1;
  209.                                 cs1 = 1;
  210.                                 cs2 = 0;
  211.                                 cs3 = 1;
  212.                                 DIS_DATA = DIS_TABLE[displayvalue /10 % 10];                         
  213.                        
  214.                         }
  215.                         if(iCnt == 30)
  216.                         {
  217.                                 DIS_DATA = 0xff;        //消影
  218.                                 cs0 = 1;
  219.                                 cs1 = 0;
  220.                                 cs2 = 1;
  221.                                 cs3 = 1;
  222.                                 DIS_DATA = DIS_TABLE[displayvalue /100 % 10];                       
  223.                         }
  224.                         if(iCnt == 40)
  225.                         {
  226.                            // iCnt == 0;
  227.                                 DIS_DATA = 0xff;        //消影
  228.                                 cs0 = 0;
  229.                                 cs1 = 1;
  230.                                 cs2 = 1;
  231.                                 cs3 = 1;
  232.                                 DIS_DATA = DIS_TABLE[displayvalue /1000 % 10];                       
  233.                         }
  234.                         if(iCnt == 50)
  235.                         {
  236.                             iCnt == 0;
  237.                     DIS_DATA = 0xff;        //消影
  238.                         }


  239.                 if(i==a)  
  240.                 {
  241.                         MOTO1_PWM = 1;
  242.                 }
  243.                 if(i==b)
  244.                 {
  245.                         MOTO2_PWM = 1;
  246.                 }
  247.        
  248.                 if(i==100)
  249.                 {
  250.                         i=0;
  251.                         MOTO1_PWM = 0;
  252.                         MOTO2_PWM = 0;
  253.                         RED_SCAN();
  254.                        
  255.                 }
  256.                 TR0 = 1;
  257. }
  258. void Key_Scan(void)
  259. {
  260.         if(Key_1 == 0)
  261.         {
  262.                 mode = 1;
  263.                 while(!Key_1);
  264.         }
  265.         if(Key_2 == 0)
  266.         {
  267.                 mode = 2;
  268.                 while(!Key_2);
  269.         }
  270. }

  271. void send_wave()
  272. {
  273.         Tx = 1;                        //10us的高電平觸發
  274.         Delay10us();
  275.         Tx = 0;
  276.         flag_csb_juli = 0;
  277.         TH1 = 0;                        //給定時器0清零
  278.         TL1 = 0;
  279.         TR1 = 0;                        //關定時器0定時
  280.         while(Rx==0);                //當Echo為零時等待
  281.         TR1=1;
  282.         while(Rx==1)                        //當Echo為1計數并等待
  283.         {
  284.                    flag_csb_juli = 1;
  285.          }
  286.         if(flag_csb_juli == 1)
  287.         {
  288.                   TR1=0;        //關定時器0定時
  289.                   distance =TH1 * 256 + TL1;    //讀出定時器1的定時時間
  290.                   distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017cM 算出來是c米
  291.                                                                                                 // distance單位是厘米
  292.                 if((distance < 20))                                        //距離 = 速度 * 時間
  293.                 {
  294.                         Turn_SLeft();                                        //如果大于3.8m就超出超聲波的量程
  295.                
  296.                 }
  297.                         if((distance > 20))                                        //距離 = 速度 * 時間
  298.                 {
  299.                         Turn_Forward();                                        //如果大于3.8m就超出超聲波的量程
  300.                 }
  301.         }
  302. }

  303. void Delay10us()                //@11.0592MHz
  304. {
  305.         unsigned char i;

  306.         _nop_();
  307.         i = 25;
  308.         while (--i);
  309. }
復制代碼

所有資料51hei提供下載:

共享程序 循跡加數碼管.rar (1.6 KB, 下載次數: 154)
【Realplay】HC-SR04 超聲波模塊 測距模塊 超聲波 傳感器 送資料.rar (1.67 MB, 下載次數: 163)




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:223438 發表于 2017-8-18 02:17 | 只看該作者
感謝分享
回復

使用道具 舉報

板凳
ID:228376 發表于 2017-8-19 11:56 | 只看該作者
謝謝LZ的分享
回復

使用道具 舉報

地板
ID:262559 發表于 2018-2-3 14:48 來自手機 | 只看該作者
收藏了
回復

使用道具 舉報

5#
ID:538658 發表于 2019-5-20 13:36 | 只看該作者
請問樓主有這個程序的電路原理圖么,有的話發1572166292@qq.com,謝謝。
回復

使用道具 舉報

6#
ID:528547 發表于 2019-5-20 15:29 | 只看該作者
感謝分享
回復

使用道具 舉報

7#
ID:560755 發表于 2019-6-21 11:03 | 只看該作者
18730630826 發表于 2019-5-20 13:36
請問樓主有這個程序的電路原理圖么,有的話發,謝謝。

同問樓主跪求
回復

使用道具 舉報

8#
ID:569149 發表于 2019-6-21 21:59 | 只看該作者
在哪買的,鏈接發一下唄
回復

使用道具 舉報

9#
ID:242298 發表于 2019-12-22 11:40 | 只看該作者
O(∩_∩)O謝謝LZ分享
回復

使用道具 舉報

10#
ID:676153 發表于 2020-2-24 13:16 | 只看該作者
感謝分享,學到很多
回復

使用道具 舉報

11#
ID:641629 發表于 2020-10-8 09:58 | 只看該作者
資料沒啥用   原理圖都沒有一個
回復

使用道具 舉報

12#
ID:747323 發表于 2020-12-22 10:29 | 只看該作者
能給發一下原理圖嗎?
回復

使用道具 舉報

13#
ID:876226 發表于 2021-1-26 12:06 | 只看該作者
有用,剛好和我的硬件符合
回復

使用道具 舉報

14#
ID:704424 發表于 2021-3-23 10:11 | 只看該作者
感覺還是不錯的,支持一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区免费 | 日韩淫片免费看 | 欧美在线高清 | 99热这里只有精品8 激情毛片 | 91在线精品秘密一区二区 | 不卡一二区 | 亚洲精品成人在线 | 成人免费淫片aa视频免费 | 91精品国产乱码久久久 | 国产一区| 在线黄色网 | 日韩黄色av | 日本免费在线 | 日韩中文电影 | 日本精品一区二区三区在线观看视频 | 精品国产乱码久久久久久丨区2区 | 久草资源网站 | 黄色av免费 | 中文字幕电影在线观看 | 成人精品视频 | 国产精品久久777777 | h视频在线免费 | 日韩欧美中文 | 亚洲一区二区三区四区五区午夜 | 久久伦理中文字幕 | 亚洲国产精品99久久久久久久久 | 精品免费视频一区二区 | 亚洲综合成人网 | 午夜影视在线观看 | 欧美日韩一 | 国产高清一区二区三区 | 亚洲视频免费在线观看 | 视频三区| 秋霞影院一区二区 | 久久午夜剧场 | 在线观看成人精品 | 成人av播放 | 国产在线一区二区 | 精品久久国产 | 一级片av | 国产一区在线免费 |