找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机循迹程序

[复制链接]
跳转到指定楼层
楼主
ID:425999 发表于 2018-11-13 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机循迹程序,循迹+灭火

单片机源程序如下:
  1. #include <reg52.h>

  2. sbit IN1 = P1^0;
  3. sbit IN2 = P1^1;
  4. sbit IN3 = P1^3;
  5. sbit IN4 = P1^2;
  6. sbit ENA = P1^4;
  7. sbit ENB = P1^5;

  8. sbit left1 = P3^5;
  9. sbit left2 = P3^3;
  10. sbit right1 = P3^4;
  11. sbit right2 = P3^6;
  12. sbit DJ = P3^2;

  13. unsigned char zkb1 = 0;
  14. unsigned char zkb2 = 0;
  15. unsigned char t = 0;


  16. void init()
  17. {
  18.         EA = 1;
  19.         TMOD |= 0x01;
  20.         TH0 =(65536 - 100) / 256;
  21.         TL0 = (65536 - 100)% 256;       
  22.         ET0 = 1;
  23.         TR0 = 1;
  24. }

  25. void timer0() interrupt 1
  26. {

  27.         TH0 = (65536 - 100) / 256;
  28.         TL0 = (65536 - 100) % 256;
  29.                
  30.         if(t < zkb1)
  31.         {
  32. //                 if(t % 2 == 0)
  33. //                 {
  34. //                     ENA = 1;
  35. //             }
  36. //                 else
  37. //                 {
  38. //                         ENA = 0;
  39. //                 }
  40.                 ENA = 1;
  41.         }
  42.         else
  43.         {
  44.                 ENA = 0;
  45.         }
  46.         if(t < zkb2)
  47.         {
  48. //                 if(t%2 == 0)
  49. //                 {
  50. //                     ENB = 1;
  51. //                 }
  52. //                 else
  53. //                 {
  54. //                         ENB = 0;
  55. //                 }
  56.                 ENB =1;
  57.         }
  58.         else
  59.         {
  60.                 ENB = 0;
  61.         }
  62.         ++t;
  63.         if(t >= 50)
  64.         {
  65.                 t = 0;
  66.         }
  67.        
  68.        

  69. }

  70. void turn_left1()
  71. {
  72.         zkb1 = 15;
  73.         zkb2 = 0;

  74. }

  75. void turn_left2()
  76. {

  77.         zkb1 = 15;
  78.         zkb2 = 0;
  79. }

  80. void turn_right1()
  81. {
  82.         zkb1 = 0;
  83.         zkb2 = 15;
  84. }

  85. void turn_right2()
  86. {
  87.         zkb1 = 0;
  88.         zkb2 = 15;
  89. }

  90. void qianjin()
  91. {
  92.         zkb1 = 15;
  93.         zkb2 = 15;
  94. }
  95. void stop()
  96.   {  zkb1 = 0;
  97.          zkb2 = 0;        }

  98. void xunji()
  99. {
  100.         unsigned char flag;
  101.         if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0))
  102.         {
  103.                 flag = 0;
  104.         }
  105.         if((right2 == 0)&&(right1 ==1)&&(left1 == 0)&&(left2 == 0))
  106.         {
  107.                 flag = 1;
  108.         }
  109.         if((right2 == 0)&&(right1 == 0)&&(left1 == 1)&&(left2 == 0))
  110.         {
  111.                 flag = 2;
  112.         }
  113.         if((right2 == 0)&&(right1 == 0)&&(left1 == 0)&&(left2 == 1))
  114.         {
  115.                 flag = 3;
  116.         }
  117.         if((right2 == 1)&&(right1 == 0)&&(left1 == 0)&&(left2 == 0))
  118.         {
  119.                 flag = 4;
  120.         }
  121.         switch(flag)
  122.         {
  123.                 case 0:qianjin();break;
  124.                
  125.                 case 1:turn_right1();break;
  126.                
  127.                 case 2:turn_left1();break;
  128.                
  129.                 case 3:turn_left2();break;
  130.                
  131.                 case 4:turn_right2();break;
  132.                
  133.                 default:qianjin();break;
  134.         }
  135. }
  136. void delay(unsigned int k)
  137. {   
  138.      unsigned int x,y;
  139.          for(x=0;x<k;x++)
  140.            for(y=0;y<2000;y++);
  141. }
  142. void miehuo()
  143. {        stop();
  144.          delay(100);
  145.                  DJ=1;
  146.                  delay(200);               
  147.                  DJ=0;
  148.                  qianjin();
  149.                  delay(50);
  150. }
  151. void main()
  152. {
  153.         init();
  154. //         zkb1 = 40;
  155. //         zkb2 = 30;
  156.         IN1 = 0;
  157.         IN2 = 1;
  158.     IN3 = 0;
  159.     IN4 = 1;
  160.           while(1)
  161.         if((right2 == 1)&&(right1 == 1)&&(left1 == 1)&&(left2 == 1))
  162.                           { miehuo();      }
  163.                           else
  164.                          { xunji();    }
  165. }
复制代码


循迹.zip (27.55 KB, 下载次数: 8)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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