找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2170|回复: 3
收起左侧

基于AVR单片机的智能小车

[复制链接]
ID:399687 发表于 2018-9-20 15:49 | 显示全部楼层 |阅读模式
基于AVR单片机的智能小车,加入了红外模块和超声波模块,用来避障
P80920-154542.jpg

评分

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

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-9-20 17:32 | 显示全部楼层
好东东 楼主能分享一下源码和资料吗?
回复

使用道具 举报

ID:399687 发表于 2018-9-20 17:57 | 显示全部楼层
  1. #include <mega32a.h>
  2. #include <delay.h>
  3. void dao_car(void); //倒车
  4. void r_zhuan(void);//右转
  5. void l_zhuan(void);//左转
  6. void q_jing(void);//前进
  7. void stop_car(void);//停车
  8. void time0_init(void);//定时器初值
  9. void sonic_scan(void);//超声波扫描
  10. void r_hong(void);//右边红外检测
  11. void l_hong(void);//左边红外检测
  12. volatile int n,a;
  13. char temp;
  14. void main(void)
  15. {
  16.    DDRA=0x00;
  17.    DDRB=0XFF;
  18.     DDRD=0xff;
  19.     PORTA=0xff;
  20.     PORTB=0XFE;
  21.     PORTD=0xff;
  22.      temp=1;
  23.      n=0;
  24.      a=0;
  25.     time0_init();
  26. while (1)
  27.       {   
  28.         r_hong();//右红外
  29.         l_hong();//左红外
  30.        sonic_scan();
  31.       if (temp==0)
  32.         {   
  33.            if(PINA.2==1)
  34.            {
  35.             dao_car(); //倒车
  36.             delay_ms(30);
  37.            }
  38.              r_zhuan();//右转
  39.              r_zhuan();//右转
  40.              r_zhuan();//右转
  41.              r_zhuan();//右转
  42.             //////////////////////////////////////////////////////////////////////////////
  43.             sonic_scan();//超波声扫描
  44.              if (temp==0)
  45.              {
  46.                  l_zhuan();//左转
  47.                  l_zhuan();//左转
  48.                  l_zhuan();//左转
  49.                  l_zhuan();//左转
  50.                  l_zhuan();//左转
  51.                  l_zhuan();//左转
  52.                  l_zhuan();//左转
  53.                   l_zhuan();//左转
  54.              }
  55.             else
  56.             {
  57.                 goto exit;
  58.              }
  59.          //////////////////////////////////////////////////////////////////////////////////   
  60.             sonic_scan();//超波声扫描
  61.             if (temp==0)
  62.             {
  63.                 l_zhuan();//左转
  64.                  l_zhuan();//左转
  65.                  l_zhuan();//左转
  66.                  l_zhuan();//左转
  67.                  l_zhuan();//左转
  68.                  l_zhuan();//左转
  69.                  l_zhuan();//左转
  70.             }
  71.          }
  72.     exit:
  73.     q_jing();//前进
  74.    }
  75. }
  76. void q_jing(void) //前进
  77. {
  78.     PORTD.7=1;
  79.     PORTD.6=0;
  80.     PORTD.5=0;
  81.     PORTD.4=1;
  82. }
  83. //////////////////////////////////////////////////////////////////////////////////////
  84. void l_zhuan(void) //左转
  85. {
  86.      PORTD.7=0;
  87.     PORTD.6=1;
  88.     PORTD.5=0;
  89.     PORTD.4=1;
  90.     delay_ms(10);
  91.     stop_car();
  92.    delay_ms(20);
  93. }
  94. /////////////////////////////////////////////////////////////////////////////////////////////
  95. void r_zhuan(void)//右转
  96. {
  97.     PORTD.7=1;
  98.     PORTD.6=0;
  99.     PORTD.5=1;
  100.     PORTD.4=0;
  101.     delay_ms(10);
  102.     stop_car();
  103.     delay_ms(20);
  104. }
  105. //////////////////////////////////////////////////////////////////////////////////////////////
  106. void dao_car(void)//倒车
  107. {
  108.     PORTD.7=0;
  109.     PORTD.6=1;
  110.     PORTD.5=1;
  111.     PORTD.4=0;
  112. }
  113. //////////////////////////////////////////////////////////////////////////////////////////////////
  114. void stop_car(void)//停车
  115. {
  116.     PORTD.7=1;
  117.     PORTD.6=1;
  118.     PORTD.5=1;
  119.     PORTD.4=1;  
  120. }
  121. ///////////////////////////////////////////////////////////////////////////////////////////////////
  122. interrupt [TIM0_OVF] void timer0_ovf_isr(void)//定时器0中断溢出
  123. {
  124.   TCNT0 = 255;  
  125.   n++;
  126. }
  127. /////////////////////////////////////////////////////////////////////////////////////////////////////
  128. void time0_init(void)//定时器初值
  129. {   
  130.      SREG=0X80;
  131.      TCCR0 = 0x00;  
  132.      TCNT0 = 255;
  133.     TIMSK= 0x01;
  134. }
  135. //////////////////////////////////////////////////////////////////////////////////////////////////////
  136. void sonic_scan(void)//超声波扫描
  137. {
  138.     while(1)
  139.     {
  140.       PORTB.0=1;
  141.       delay_us(20);
  142.       PORTB.0=0;
  143.       while(1)
  144.       {  
  145.          if(PINA.4==1)
  146.          {
  147.             break;
  148.          }
  149.         
  150.       }
  151.        TCCR0 = 0x02;
  152.        n=0;  
  153.        while(1)
  154.        {  
  155.           if(PINA.4==0)
  156.           {
  157.            TCCR0 = 0x00;
  158.            break;
  159.           }
  160.         }
  161.        n=n/58;
  162.        if(n==0)
  163.        {
  164.          temp=0;
  165.          break;
  166.         }
  167.        else
  168.        {
  169.          temp=1;
  170.          break;
  171.        }
  172.       
  173. }
  174. delay_ms(1);
  175. }      

  176. //////////////////////////////////////////////////////////////////////////////////////////
  177. void r_hong(void)//右边红外检测
  178. {
  179.     if (PINA.0==0)
  180.     {
  181.        l_zhuan();//左转
  182.     }
  183. }
  184. //////////////////////////////////////////////////////////////////////////////
  185. void l_hong(void)//左边红外检测
  186. {
  187.     if (PINA.1==0)
  188.     {
  189.         r_zhuan();//右转
  190.     }
  191. }




复制代码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:399687 发表于 2018-9-20 17:59 | 显示全部楼层
  1. #include <mega32a.h>
  2. #include <delay.h>
  3. void dao_car(void); //倒车
  4. void r_zhuan(void);//右转
  5. void l_zhuan(void);//左转
  6. void q_jing(void);//前进
  7. void stop_car(void);//停车
  8. void time0_init(void);//定时器初值
  9. void sonic_scan(void);//超声波扫描
  10. void r_hong(void);//右边红外检测
  11. void l_hong(void);//左边红外检测
  12. volatile int n,a;
  13. char temp;
  14. void main(void)
  15. {
  16.    DDRA=0x00;
  17.    DDRB=0XFF;
  18.     DDRD=0xff;
  19.     PORTA=0xff;
  20.     PORTB=0XFE;
  21.     PORTD=0xff;
  22.      temp=1;
  23.      n=0;
  24.      a=0;
  25.     time0_init();
  26. while (1)
  27.       {   
  28.         r_hong();//右红外
  29.         l_hong();//左红外
  30.        sonic_scan();
  31.       if (temp==0)
  32.         {   
  33.            if(PINA.2==1)
  34.            {
  35.             dao_car(); //倒车
  36.             delay_ms(30);
  37.            }
  38.              r_zhuan();//右转
  39.              r_zhuan();//右转
  40.              r_zhuan();//右转
  41.              r_zhuan();//右转
  42.             //////////////////////////////////////////////////////////////////////////////
  43.             sonic_scan();//超波声扫描
  44.              if (temp==0)
  45.              {
  46.                  l_zhuan();//左转
  47.                  l_zhuan();//左转
  48.                  l_zhuan();//左转
  49.                  l_zhuan();//左转
  50.                  l_zhuan();//左转
  51.                  l_zhuan();//左转
  52.                  l_zhuan();//左转
  53.                   l_zhuan();//左转
  54.              }
  55.             else
  56.             {
  57.                 goto exit;
  58.              }
  59.          //////////////////////////////////////////////////////////////////////////////////   
  60.             sonic_scan();//超波声扫描
  61.             if (temp==0)
  62.             {
  63.                 l_zhuan();//左转
  64.                  l_zhuan();//左转
  65.                  l_zhuan();//左转
  66.                  l_zhuan();//左转
  67.                  l_zhuan();//左转
  68.                  l_zhuan();//左转
  69.                  l_zhuan();//左转
  70.             }
  71.          }
  72.     exit:
  73.     q_jing();//前进
  74.    }
  75. }
  76. void q_jing(void) //前进
  77. {
  78.     PORTD.7=1;
  79.     PORTD.6=0;
  80.     PORTD.5=0;
  81.     PORTD.4=1;
  82. }
  83. //////////////////////////////////////////////////////////////////////////////////////
  84. void l_zhuan(void) //左转
  85. {
  86.      PORTD.7=0;
  87.     PORTD.6=1;
  88.     PORTD.5=0;
  89.     PORTD.4=1;
  90.     delay_ms(10);
  91.     stop_car();
  92.    delay_ms(20);
  93. }
  94. /////////////////////////////////////////////////////////////////////////////////////////////
  95. void r_zhuan(void)//右转
  96. {
  97.     PORTD.7=1;
  98.     PORTD.6=0;
  99.     PORTD.5=1;
  100.     PORTD.4=0;
  101.     delay_ms(10);
  102.     stop_car();
  103.     delay_ms(20);
  104. }
  105. //////////////////////////////////////////////////////////////////////////////////////////////
  106. void dao_car(void)//倒车
  107. {
  108.     PORTD.7=0;
  109.     PORTD.6=1;
  110.     PORTD.5=1;
  111.     PORTD.4=0;
  112. }
  113. //////////////////////////////////////////////////////////////////////////////////////////////////
  114. void stop_car(void)//停车
  115. {
  116.     PORTD.7=1;
  117.     PORTD.6=1;
  118.     PORTD.5=1;
  119.     PORTD.4=1;  
  120. }
  121. ///////////////////////////////////////////////////////////////////////////////////////////////////
  122. interrupt [TIM0_OVF] void timer0_ovf_isr(void)//定时器0中断溢出
  123. {
  124.   TCNT0 = 255;  
  125.   n++;
  126. }
  127. /////////////////////////////////////////////////////////////////////////////////////////////////////
  128. void time0_init(void)//定时器初值
  129. {   
  130.      SREG=0X80;
  131.      TCCR0 = 0x00;  
  132.      TCNT0 = 255;
  133.     TIMSK= 0x01;
  134. }
  135. //////////////////////////////////////////////////////////////////////////////////////////////////////
  136. void sonic_scan(void)//超声波扫描
  137. {
  138.     while(1)
  139.     {
  140.       PORTB.0=1;
  141.       delay_us(20);
  142.       PORTB.0=0;
  143.       while(1)
  144.       {  
  145.          if(PINA.4==1)
  146.          {
  147.             break;
  148.          }
  149.         
  150.       }
  151.        TCCR0 = 0x02;
  152.        n=0;  
  153.        while(1)
  154.        {  
  155.           if(PINA.4==0)
  156.           {
  157.            TCCR0 = 0x00;
  158.            break;
  159.           }
  160.         }
  161.        n=n/58;
  162.        if(n==0)
  163.        {
  164.          temp=0;
  165.          break;
  166.         }
  167.        else
  168.        {
  169.          temp=1;
  170.          break;
  171.        }
  172.       
  173. }
  174. delay_ms(1);
  175. }      

  176. //////////////////////////////////////////////////////////////////////////////////////////
  177. void r_hong(void)//右边红外检测
  178. {
  179.     if (PINA.0==0)
  180.     {
  181.        l_zhuan();//左转
  182.     }
  183. }
  184. //////////////////////////////////////////////////////////////////////////////
  185. void l_hong(void)//左边红外检测
  186. {
  187.     if (PINA.1==0)
  188.     {
  189.         r_zhuan();//右转
  190.     }
  191. }




复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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