找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4233|回复: 5
打印 上一主题 下一主题
收起左侧

51单片机超声波红外联合避障(附源代码)

[复制链接]
跳转到指定楼层
#
演示视频:

智能小车实物图



单片机源程序如下:
  1. #include"reg52.h"
  2. #include"intrins.h"
  3. #include"motor.h"

  4. sbit L_sensor=P0^4;
  5. sbit R_sensor=P0^5;


  6. sbit trig=P2^0;


  7. u8 t1_count=0;
  8. u32 time_count=0;
  9. sbit int0=P3^2;
  10. void timer0_init(void)
  11. {
  12.     TMOD |= 0x09;
  13.     TL0 = 0;
  14.     TH0 = 0 ;
  15.           
  16.     TR0 = 1;
  17. }
  18. void timer1_init(void)
  19. {
  20.     TMOD|=0X10;
  21.     TL1=(65536-10000)%256;
  22.     TH1=(65536-10000)/256;
  23.     ET1=1;
  24.     EA=1;
  25.           PT1=0;
  26.     TR1=1;
  27. }

  28. //u8 sr_finished=0;
  29. u8 SR_O4_EN_MAX=0;
  30. u16 caculatedistance(u16 us)//计算距离
  31. {
  32.     u16 temp;
  33.           
  34.     temp=(float)us/1000*340/2;//mm
  35.           
  36.        
  37.           
  38.     if(temp>500)temp=500;
  39.           else if(temp<20)temp=20;
  40.           
  41.    
  42.     time_count=0;
  43.     return temp;//mm
  44. }
  45. u16 distance_mm=0;
  46. u8 L_count=0,R_count=0;
  47. u8 R_sensor_en=1,L_sensor_en=1;
  48. void timer1_interrupt() interrupt 3
  49. {
  50.     TL1=(65536-10000)%256;
  51.     TH1=(65536-10000)/256;
  52.     t1_count++;
  53.           
  54.           if(L_count==0)L_sensor_en=1;
  55.           else
  56.                 {
  57.                         L_count--;
  58.                 }
  59.           if(R_count==0)R_sensor_en=1;
  60.                 else
  61.                 {
  62.                         R_count--;
  63.                 }
  64.     if(t1_count==5)
  65.     {
  66.                           
  67.         int0=1;
  68.         while(int0);
  69.         int0=0;
  70.         time_count=(u16)TH0*256+TL0;
  71.                           
  72.       //  sr_finished=1;
  73.                           distance_mm=caculatedistance(time_count);
  74.                           
  75.                           
  76.                          
  77.                           if(distance_mm<150)
  78.                                 {
  79.                                        
  80.           if(!L_sensor&&R_sensor)
  81.                                         {
  82.                                                 turn_right();
  83.                                                 Delay100ms();
  84.                                                 Delay100ms();
  85.                                                
  86.                                         }
  87.                        
  88.                                         else
  89.                                         {
  90.                                                 turn_left();
  91.                                                 Delay100ms();
  92.                                                 Delay100ms();
  93.                                                
  94.                                         }
  95.                                        
  96.                                        
  97.                                 }
  98.                                 else
  99.                                 {
  100.                                
  101.                                         Go_ahead();
  102.                                         if(L_sensor&&!R_sensor)
  103.                       {
  104.                                                 if(R_sensor_en)
  105.                                                 {
  106.                                                         turn_left();
  107.                                                         L_sensor_en=0;
  108.                                                         L_count=70;
  109.                                                 }
  110.                              
  111.                                                
  112.                       }
  113.                        if(!L_sensor&&R_sensor)
  114.                       {
  115.                                                 if(L_sensor_en)
  116.                                                 {
  117.                                                         R_count=70;
  118.                                           R_sensor_en=0;
  119.                                 turn_right();
  120.                                                 }
  121.                                                
  122.                        }
  123.                
  124.                                 }
  125.                                 if(!L_sensor&&!R_sensor)
  126.               {
  127.                                    Go_back();
  128.            Delay50ms();
  129.                                         Delay50ms();
  130.            turn_right();
  131.           Delay50ms();
  132.           Delay50ms();       
  133.           Delay50ms();
  134.           Delay50ms();       
  135.                                         
  136.                     }
  137.                        
  138.                     TH0=TL0=0;
  139.         t1_count=0;
  140. ……………………

  141. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
壁障小车.rar (38.39 KB, 下载次数: 30)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

5#
ID:258375 发表于 2018-4-15 18:43 | 只看该作者
支持一下
回复

使用道具 举报

地板
ID:258375 发表于 2018-4-15 18:28 | 只看该作者
改掉两个点即可进入
回复

使用道具 举报

板凳
ID:258375 发表于 2018-4-15 18:27 | 只看该作者
欢饮光顾
回复

使用道具 举报

沙发
ID:258375 发表于 2018-4-15 18:24 | 只看该作者
我的店铺地址(以上)
回复

使用道具 举报

楼主
ID:258375 发表于 2018-4-15 18:20 | 只看该作者
https://item点taobao点com/item.htm?spm=a1z10.1-c-s.w4004-17637612881.18.784f10c16keQHP&id=567759158800
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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