找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5703|回复: 7
收起左侧

自制超声波倒车小车(带程序!原理图!实物图)

[复制链接]
ID:212924 发表于 2017-7-31 09:18 | 显示全部楼层 |阅读模式
IMG_20170731_091217.jpg IMG_20170731_091151.jpg IMG_20170731_091147.jpg IMG_20170731_091141.jpg (~M52L(FXNFQFV9C0J[$GWQ.png
  1. #include <reg52.H>//Æ÷¼þÅäÖÃÎļþ
  2. #include <intrins.h>
  3. //´«¸ÐÆ÷½Ó¿Ú
  4. sbit RX  = P3^2;
  5. sbit TX  = P3^3;
  6. //°´¼üÉùÃ÷
  7. sbit S1  = P1^4;
  8. sbit S2  = P1^5;
  9. sbit S3  = P1^6;
  10. //·äÃùÆ÷
  11. sbit Feng= P2^0;
  12. sbit W1=P1^0;
  13. sbit W2=P1^1;
  14. sbit W3=P1^2;
  15. sbit W4=P1^3;
  16. //±äÁ¿ÉùÃ÷
  17. unsigned int  time=0;
  18. unsigned int  timer=0;
  19. unsigned char posit=0;
  20. unsigned long S=0;
  21. unsigned long BJS=50;//±¨¾¯¾àÀë80CM
  22. //ģʽ 0Õý³£Ä£Ê½ 1µ÷Õû
  23. char Mode=0;
  24. bit  flag=0;
  25. bit flag_KEY=0;
  26. unsigned char const discode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0xff/*-*/}; //ÊýÂë¹ÜÏÔʾÂë0123456789-ºÍ²»ÏÔʾ
  27. //unsigned char const positon[4]={0xfd,0xfb,0xf7,0xfe}; //λѡ
  28. unsigned char disbuff[4]    ={0,0,0,0};   //Êý×éÓÃÓÚ´æ·Å¾àÀëÐÅÏ¢
  29. unsigned char disbuff_BJ[4] ={0,0,0,0};//±¨¾¯ÐÅÏ¢
  30. void Display();
  31. //ÑÓʱ20ms£¨²»¾«È·£©
  32. void delay(void)
  33. {
  34.     unsigned char a,b,c;
  35.     for(c=2;c>0;c--)
  36.         for(b=38;b>0;b--)
  37.             for(a=60;a>0;a--);
  38. }
  39. //°´¼üɨÃè
  40. void Key_()
  41. {
  42. if(flag_KEY==0)
  43. {
  44.   if(Mode!=0)
  45.   {
  46.    //+
  47.    if(S1==0)
  48.    {
  49.     delay();    //ÑÓʱȥ¶¶
  50.     if(S1==0)
  51.     {
  52.      BJS++;  //±¨¾¯Öµ¼Ó
  53.      flag_KEY=1;
  54.      if(BJS>=151) //×î´ó151
  55.      {
  56.       BJS=0;
  57.      }
  58. //     while(S1==0)
  59. //     Display();
  60.     }
  61.    
  62.    }
  63.    //-
  64.    if(S2==0)
  65.    {
  66.     delay();
  67.     if(S2==0)
  68.     {
  69.      BJS--;  //±¨¾¯Öµ¼õ
  70.      flag_KEY=1;
  71.      if(BJS<=1)  //×îС1
  72.      {
  73.       BJS=150;
  74.      }
  75. //     while(S2==0)
  76. //     Display();
  77.     }
  78.    
  79.    }
  80.   }
  81.   //¹¦ÄÜ
  82.   if(S3==0)  //ÉèÖüü
  83.   {
  84.    delay();
  85.    if(S3==0)
  86.    {
  87.     Mode++;  //ģʽ¼Ó
  88.     flag_KEY=1;
  89.     if(Mode>=2)  //¼Óµ½2ʱÇåÁã
  90.     {
  91.      Mode=0;
  92.     }
  93. //    while(S3==0)
  94. //    Display();
  95.    }
  96.   }
  97. }
  98. if((P1&0x70)==0x70)
  99. {
  100.   flag_KEY=0;
  101. }
  102. }
  103. /**********************************************************************************************************/
  104. //ɨÃèÊýÂë¹Ü
  105. void Display(void)     
  106. {
  107. //Õý³£ÏÔʾ
  108. if(Mode==0)
  109. {
  110.   P0=0x00;  //¹Ø±ÕÏÔʾ
  111.   if(posit==1)//ÊýÂë¹ÜµÄСÊýµã
  112.   {
  113.    P0=(discode[disbuff[posit]])|0x80;//°´Î»»ò£¬×î¸ßλ±äΪ1£¬ÏÔʾСÊýµã
  114.   }
  115.   else if(posit==0)
  116.   {
  117.    P0=~discode[11];
  118.   }
  119.   else
  120.   {
  121.    P0=discode[disbuff[posit]];
  122.   }
  123.   switch(posit)
  124.   {
  125.    case 0 : W1=0;W2=1;W3=1;W4=1; break;
  126.    case 1 : W1=1;W2=0;W3=1;W4=1; break;
  127.    case 2 : W1=1;W2=1;W3=0;W4=1; break;
  128.    case 3 : W1=1;W2=1;W3=1;W4=0; break;
  129.   }
  130.   posit++;
  131.   if(posit>3)  //ÿ½øÒ»´ÎÏÔʾº¯Êý£¬±äÁ¿¼Ó1
  132.    posit=0;  //¼Óµ½3ʱÇåÁã
  133. }
  134. //±¨¾¯ÏÔʾ
  135. else
  136. {
  137.   P0=0x00;
  138.   if(posit==1)//ÊýÂë¹ÜµÄСÊýµã
  139.   {
  140.    P0=(discode[disbuff_BJ[posit]])|0x80;
  141.   }
  142.   else if(posit==0)
  143.   {
  144.    P0=0x76; //ÏÔʾ×Öĸ  
  145.   }
  146.   else
  147.   {
  148.    P0=discode[disbuff_BJ[posit]];
  149.   }
  150.   switch(posit)
  151.   {
  152.    case 0 : W1=0;W2=1;W3=1;W4=1; break;
  153.    case 1 : W1=1;W2=0;W3=1;W4=1; break;
  154.    case 2 : W1=1;W2=1;W3=0;W4=1; break;
  155.    case 3 : W1=1;W2=1;W3=1;W4=0; break;
  156.   }
  157.   posit++;
  158.   if(posit>3)
  159.    posit=0;
  160. }
  161. }
  162. /**********************************************************************************************************/
  163. //¼ÆËã
  164. void Conut(void)
  165. {
  166. time=TH0*256+TL0;   //¶Á³öT0µÄ¼ÆʱÊýÖµ
  167. TH0=0;
  168. TL0=0;      //Çå¿Õ¼ÆʱÆ÷
  169. S=(time*1.7)/100;     //Ëã³öÀ´ÊÇCM
  170. //ÉùÒôµÄËÙ¶ÈÊÇ340m/s£¬Ê±¼äµÄµ¥Î»ÊÇus£¬¼ÆËãµ½ÃëÐèÒª½«Ê±¼äÊý¾Ý/1000000£¬
  171. //³¤¶È=ËÙ¶È*ʱ¼ä£¬340*time/1000000£¬³¤¶ÈÊý¾Ýµ¥Î»ÊÇmת»»³ÉcmÐèÒª³ËÒÔ100µÃµ½340*time/10000£¬
  172. //СÊýµã¶¼Ïò×óÒÆÁ½Î»µÃµ½3.4*time/100£¬ÒòΪ³¬Éù²¨ÊÇÍù·µÁË£¬ËùÒÔÔÙ³ýÒÔ2,µÃµ½¾àÀëÊý¾Ý(time*1.7)/100
  173. if(Mode==0)     //·ÇÉèÖÃ״̬ʱ
  174. {
  175.   if((S>=700)||flag==1) //³¬³ö²âÁ¿·¶Î§ÏÔʾ¡°-¡±
  176.   {
  177.    Feng=0;      //·äÃùÆ÷±¨¾¯
  178.    flag=0;
  179.    disbuff[1]=10;    //¡°-¡±
  180.    disbuff[2]=10;    //¡°-¡±
  181.    disbuff[3]=10;    //¡°-¡±
  182.   }
  183.   else
  184.   {
  185.    //¾àÀëСÓÚ±¨¾¯¾à
  186.    if(S<=BJS)
  187.    {
  188.     Feng=0; //±¨¾¯
  189.    }
  190.    else  //´óÓÚ
  191.    {
  192.     Feng=1;  //¹Ø±Õ±¨¾¯
  193.    }
  194.    disbuff[1]=S%1000/100;   //½«¾àÀëÊý¾Ý²ð³Éµ¥¸öλ¸³Öµ
  195.    disbuff[2]=S%1000%100/10;
  196.    disbuff[3]=S%1000%10 %10;
  197.   }
  198. }
  199. else
  200. {
  201.    Feng=1;
  202.    disbuff_BJ[1]=BJS%1000/100;
  203.    disbuff_BJ[2]=BJS%1000%100/10;
  204.    disbuff_BJ[3]=BJS%1000%10 %10;
  205. }
  206. }
  207. /**********************************************************************************************************/
  208. //¶¨Ê±Æ÷0
  209. void zd0() interrupt 1    //T0ÖжÏÓÃÀ´¼ÆÊýÆ÷Òç³ö,³¬¹ý²â¾à·¶Î§
  210. {
  211. flag=1;       //ÖжÏÒç³ö±êÖ¾
  212. }
  213. /**********************************************************************************************************/
  214. //¶¨Ê±Æ÷1
  215. void zd3() interrupt 3    //T1ÖжÏÓÃÀ´É¨ÃèÊýÂë¹ÜºÍ¼Æ800MSÆô¶¯Ä£¿é
  216. {
  217. TH1=0xf8;
  218. TL1=0x30;     //¶¨Ê±2ms
  219. Key_();     //ɨÃè°´¼ü
  220. Display();    //ɨÃèÏÔʾ
  221. timer++;    //±äÁ¿¼Ó
  222. if(timer>=400)   //400´Î¾ÍÊÇ800ms
  223. {
  224.   timer=0;
  225.   TX=1;             //800MS  Æô¶¯Ò»´ÎÄ£¿é
  226.   _nop_();
  227.   _nop_();
  228.   _nop_();
  229.   _nop_();
  230.   _nop_();
  231.   _nop_();
  232.   _nop_();
  233.   _nop_();
  234.   _nop_();
  235.   _nop_();
  236.   _nop_();
  237.   _nop_();
  238.   _nop_();
  239.   _nop_();
  240.   _nop_();
  241.   _nop_();
  242.   _nop_();
  243.   _nop_();
  244.   _nop_();
  245.   _nop_();
  246.   _nop_();
  247.   TX=0;
  248. }
  249. }
  250. /**********************************************************************************************************/
  251. //Ö÷º¯Êý
  252. void main(void)
  253. {  
  254. TMOD=0x11;     //ÉèT0Ϊ·½Ê½1
  255. TH0=0;
  256. TL0=0;         
  257. TH1=0xf8;     //2MS¶¨Ê±
  258. TL1=0x30;
  259. ET0=1;    //ÔÊÐíT0ÖжÏ
  260. ET1=1;      //ÔÊÐíT1ÖжÏ
  261. TR1=1;      //¿ªÆô¶¨Ê±Æ÷
  262. EA=1;     //¿ªÆô×ÜÖжÏ
  263. while(1)
  264. {
  265.   while(!RX);  //µ±ÉϴνÓÊÕÍ겨ºó£¬RXÒý½ÅÊǵ͵çƽ£¬È¡·´¾ÍÊÇ1£¬´Ëwhile³ÉÁ¢£¬·´¸´ÅжÏRX״̬¡£µ±RXûÓнÓÊÕµ½·µ»Ø²¨Ê±ÊǸߵçƽ£¬È¡·´¾ÍÊÇ0£¬´Ëwhile²»³ÉÁ¢£¬Ìø³ö
  266.   TR0=1;   //¿ªÆô¼ÆÊý
  267.   while(RX);  //µ±RXûÓнÓÊÕµ½·µ»Ø²¨£¬´Ëwhile³ÉÁ¢£¬³ÌÐòÍ£ÔÚÕâÀïÒ»Ö±ÅжÏRX״̬¡£µ±RX½ÓÊÕµ½·µ»Ø²¨£¬RXÒý½Å±äΪµÍµçƽ£¬´Ëwhile²»³ÉÁ¢£¬Ìø³ö
  268.   TR0=0;   //Í£Ö¹¼ÆÊý
  269.   Conut();   //¼ÆËã
  270. }
  271. }




复制代码

原理图.doc

104 KB, 下载次数: 22, 下载积分: 黑币 -5

评分

参与人数 2黑币 +60 收起 理由
564654654 + 10 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2017-7-31 16:14 | 显示全部楼层
楼主能分享下源码压缩包吗 ,中文是乱码
回复

使用道具 举报

ID:212924 发表于 2017-8-1 08:42 | 显示全部楼层
admin 发表于 2017-7-31 16:14
楼主能分享下源码压缩包吗 ,中文是乱码

可以的
回复

使用道具 举报

ID:212924 发表于 2017-8-1 08:50 | 显示全部楼层
补上小车的程序,里面略有改动因为之前打算用SS8050三极管驱动电机但是最后发现无法和单片机共地所以没办法了只能用了继电器模块,有点大材小用,没办法比赛时间到了所以就这样

超声波测距小车C程序.docx

14.62 KB, 下载次数: 15, 下载积分: 黑币 -5

C程序

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:229527 发表于 2017-9-12 11:36 | 显示全部楼层
很给力!正在学习中,希望自己也能成功做出来
回复

使用道具 举报

ID:229527 发表于 2017-9-14 10:08 | 显示全部楼层
压缩包怎么还是乱码呀
回复

使用道具 举报

ID:233038 发表于 2017-9-14 10:18 | 显示全部楼层
感觉好厉害,虽然看不懂程序
回复

使用道具 举报

ID:231115 发表于 2017-9-25 11:38 | 显示全部楼层
好像是老外的程序,注释是外国的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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