避障、红外跟随程序、蓝牙控制程序、寻迹程序,注释详细

51单片机源程序,注释详细(4例),资源包括:避障、红外跟随程序、蓝牙控制程序、寻迹程序。非常适合为做智能小车参考资料。

截图:

none.gif

循迹程序:
  1. #include<reg52.h>
  2.  
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5.        
  6. uchar zkb_left1,zkb_right1,zkb_left2,zkb_right2,i1,j1,i2,j2; //占空比标志
  7.  
  8. sbit IN1=P1^0;        //电机控制端口
  9. sbit IN2=P1^1;
  10. sbit IN3=P1^2;
  11. sbit IN4=P1^3;
  12. sbit IN5=P1^4;       
  13. sbit IN6=P1^5;
  14. sbit IN7=P1^6;
  15. sbit IN8=P1^7;
  16.  
  17. sbit xj_left=P3^5;           //循迹端口
  18. sbit xj_mid=P3^6;
  19. sbit xj_right=P3^7;         
  20.  
  21.  
  22.  
  23. sbit zkba=P0^0;          //占空比控制端
  24. sbit zkbb=P0^1;
  25. sbit zkbc=P0^2;          //占空比控制端
  26. sbit zkbd=P0^3;
  27.  
  28. //sbit fm=P2^5;
  29.  
  30. void delay_ms(uint z)         //延时函数
  31. {
  32.         uchar x,y;
  33.         for(x=z;x>0;x--)
  34.                 for(y=110;y>0;y--);
  35. }
  36.  
  37. void init()          //初始化函数
  38. {
  39.         TMOD=0x01;
  40.         TH0=(65536-100)/256;
  41.         TL0=(65536-100)%256        ;
  42.         EA=1;
  43.         ET0=1;
  44.         TR0=1;
  45.         zkba=1;
  46.         zkbb=1;
  47.         zkbc=1;
  48.         zkbd=1;
  49. }
  50.  
  51. void time0() interrupt 1   //中断服务函数
  52. {
  53.         i1++;j1++;i2++;j2++;                  //进入中断i,j自加1
  54.         if(i1<zkb_right1)        {zkbb=1;}        //如果i小于设定值,使能端置1,否则置0
  55.         else zkbb=0;
  56.         if(i1==40)        {zkbb=~zkbb;i1=0;}  //如果i加到40;使能端取反,i置0
  57.  
  58.         if(j1<zkb_left1)        {zkba=1;}
  59.         else zkba=0;
  60.         if(j1==40)        {zkba=~zkba;j1=0;}
  61.        
  62.         if(i2<zkb_right2)        {zkbd=1;}        //如果i小于设定值,使能端置1,否则置0
  63.         else zkbd=0;
  64.         if(i2==40)        {zkbd=~zkbd;i2=0;}  //如果i加到40;使能端取反,i置0
  65.  
  66.         if(j2<zkb_left2)        {zkbc=1;}
  67.         else zkbc=0;
  68.         if(j2==40)        {zkbc=~zkbc;j2=0;}       
  69.        
  70.        
  71.         TH0=(65536-100)/256;          //定时器0重装初值
  72.         TL0=(65536-100)%256;
  73. }
  74.  
  75. void go()         //前进函数
  76. {
  77.         zkb_left1=8;
  78.         zkb_right1=8;
  79.         zkb_left2=8;
  80.         zkb_right2=8;
  81.        
  82.         IN1=1;        IN2=0;                  
  83.         IN3=1;        IN4=0;
  84.         IN5=1;        IN6=0;                  
  85.         IN7=1;        IN8=0;
  86. }
  87. void back()         //后退函数
  88. {
  89.         zkb_left1=8;
  90.         zkb_right1=8;
  91.         zkb_left2=8;
  92.         zkb_right2=8;
  93.        
  94.         IN1=0;        IN2=1;
  95.         IN3=0;        IN4=1;
  96.         IN5=0;        IN6=1;
  97.         IN7=0;        IN8=1;
  98. }
  99. void left()                //左转弯函数,
  100. {
  101.         zkb_left1=14;   //设置一个速度
  102.         zkb_right1=14;
  103.         zkb_left2=14;   
  104.         zkb_right2=14;
  105.        
  106.         IN1=0;        IN2=1;        //
  107.         IN3=1;        IN4=0;
  108.         IN5=0;        IN6=1;       
  109.         IN7=1;        IN8=0;
  110. }
  111. void right()                //右转弯函数
  112. {
  113.         zkb_left1=14;                //设置一个速度
  114.         zkb_right1=14;
  115.         zkb_left2=14;               
  116.         zkb_right2=14;
  117.        
  118.         IN1=1;        IN2=0;         //
  119.         IN3=0;        IN4=1;
  120.         IN5=1;        IN6=0;         //
  121.         IN7=0;        IN8=1;
  122. }
  123. void stop()                //停止函数
  124. {
  125.         IN1=0;        IN2=0;
  126.         IN3=0;        IN4=0;
  127.         IN5=0;        IN6=0;
  128.         IN7=0;        IN8=0;       
  129. }
  130.  
  131. /*void bee()         //蜂鸣器发声函数
  132. {
  133.          fm=1;
  134.          delay_ms(50);
  135.          fm=0;
  136.          delay_ms(50);
  137. }*/
  138.  
  139. void xunji()         //循迹函数
  140. {
  141.         uchar flag;           //定义一个标志位,用于状态判断
  142.         if(xj_left==0 & xj_mid==0 & xj_right==0)         //未检测到黑线
  143.         {flag=0;}
  144.          else if(xj_left==0 & xj_mid==1 & xj_right==0)        //中间寻迹检测到黑线
  145.         {flag=1;}
  146.          else if(xj_left==1 & xj_mid==0 & xj_right==0)        //左边检测到黑线
  147.         {flag=2;}
  148.          else if(xj_left==1 & xj_mid==1 & xj_right==0)        //左边和中间检测到黑线
  149.         {flag=3;}
  150.          else if(xj_left==0 & xj_mid==0 & xj_right==1)        //右边检测到黑线
  151.         {flag=4;}
  152.          else if(xj_left==0 & xj_mid==1 & xj_right==1)        //右边和中间检测到黑线
  153.         {flag=5;}
  154.          else if(xj_left==1 & xj_mid==1 & xj_right==1)        //全部检测到黑线
  155.         {flag=6;}
  156.                 else flag=7;   //其他情况标志位置0
  157.         switch (flag)
  158.         {
  159.                 case 0: go(); break;        //情况0,前进
  160.                 case 1: go(); break;        //情况1,前进
  161.                 case 2: left(); break;        //情况2,左转
  162.                 case 3: left(); break;        //
  163.                 case 4: right(); break;        //情况4,右转
  164.                 case 5: right();break;        //
  165.                 case 6: stop(); break;        //情况6,停止
  166.                 case 7: stop(); break;        //
  167.                 default: stop(); break;        //
  168.         }
  169. }
  170.  
  171. void main()
  172. {
  173.         init();
  174.         delay_ms(1);
  175.         while(1)
  176.         {
  177.                 xunji();
  178.         }
  179. }
复制代码

 

U客论坛下载-51单片机源程序,注释详细(4例):避障、红外跟随程序、蓝牙控制程序、.zip

 

文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-210707-1-1.html
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值