找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机小车避障程序与电路原理图

[复制链接]
跳转到指定楼层
楼主
电路原理图如下:


单片机源程序如下:
  1. /**********  循迹程序  ************************/

  2. //    接口连接:

  3. //    P0.0和P0.1-----右电机
  4. //    P0.2和P0.3-----左电机

  5. //    P1.0-----------右光电管
  6. //    P1.1-----------前光电管
  7. //    P1.2-----------左光电管

  8. /*****************************************************/

  9. #include<reg52.h>//包含必要头文件

  10. sbit you1=P0^0;//定义单片机控制右边电机的引脚
  11. sbit you2=P0^1;//定义单片机控制右边电机的引脚
  12. sbit zuo1=P0^2;//定义单片机控制左边电机的引脚
  13. sbit zuo2=P0^3;//定义单片机控制左边电机的引脚

  14. sbit q=P1^1;//定义单片机连接循迹板前边光电管的引脚
  15. sbit y=P1^0;//定义单片机连接循迹板右边光电管的引脚
  16. sbit z=P1^2;//定义单片机连接循迹板左边光电管的引脚


  17. void delay(int z)//pwm中使用的延时函数
  18. {
  19.         int i,j;
  20.         for(i=2;i>0;i--)
  21.         for(j=z;j>0;j--);        
  22. }
  23. void qian()//左右轮协同前进子函数
  24. {
  25.         you1=0;
  26.         you2=1;
  27.         zuo1=0;
  28.         zuo2=1;
  29.         delay(8);//pwm调速 此为pwm有效值,前进时速度为全速的90%
  30.         you1=1;
  31.         you2=1;
  32.         zuo1=1;
  33.         zuo2=1;
  34.         delay(10-8);         
  35. }
  36. void you()//左右轮协同  右转子函数
  37. {
  38.         you1=0;
  39.         you2=1;
  40.         zuo1=1;
  41.         zuo2=0;
  42.         delay(7);//pwm调速 此为pwm有效值,前进时速度为全速的80%
  43.         you1=1;
  44.         you2=1;
  45.         zuo1=1;
  46.         zuo2=1;
  47.         delay(10-7);
  48. }
  49. void zuo()//左右轮协同  左转子函数
  50. {
  51.         you1=1;
  52.         you2=0;
  53.         zuo1=0;
  54.         zuo2=1;
  55.         delay(7);//pwm调速 此为pwm有效值,前进时速度为全速的80%
  56.         you1=1;
  57.         you2=1;
  58.         zuo1=1;
  59.         zuo2=1;
  60.         delay(10-7);
  61. }
  62. void ting()//左右轮都停止转动
  63. {
  64.         you1=1;
  65.         you2=1;
  66.         zuo1=1;
  67.         zuo2=1;
  68.         delay(50000);
  69. }

  70. //下面是后退函数,这里没有用到,注释掉了

  71. /*
  72. void hou()//左右轮协同前进子函数
  73. {
  74.         you1=1;
  75.         you2=0;
  76.         zuo1=1;
  77.         zuo2=0;
  78.         
  79. }
  80. */


  81. void main()//主函数
  82. {
  83.            z=1;
  84.            q=1;
  85.            y=1;

  86.                 while(1)//单片机不间断监测 (是个死循环)
  87.                 {           
  88.                                                                   
  89.                                 qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态
  90.                                 while((z==0)&&(y==1))//判断当左边光电管遇到黑线时
  91.                                 {                                                        
  92.                                         zuo();//调用左转子函数
  93.                                 }
  94.                                 while((z==1)&&(y==0))//判断当右边光电管遇到黑线时
  95.                                 {        
  96.                                         you();//调用右转子函数
  97.                                 }
  98.                                 while((z==0)&&(q==0)&&(y==0))//判断当左、前、右光电管均遇到黑线时
  99.                                 {
  100.                                          qian();                     //即遇到十字路口时 继续前进                                                        
  101.                                 }
  102.                                 while((z==0)&&(q==1)&&(y==0))//判断当左、右光电管均遇到黑线,前光电管时
  103.                                 {
  104.                                 
  105.                                         ting();                          //即遇到T字路口时 停止
  106.                                        
  107.                                 }
  108.                                                 
  109.                  }
  110. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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