标题: 刚刚学了一个月51单片机,做了个超声波小车(舵机控制)还望各位指点 [打印本页]

作者: shuzhi990    时间: 2019-2-21 13:51
标题: 刚刚学了一个月51单片机,做了个超声波小车(舵机控制)还望各位指点
另含舵机测试程序,l298n驱动电机程序
程序写得不是很好,还希望各位高手多多指点


实在是没弄懂该怎么发程序。。。只好截图了。。。

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

  3. sbit duojip=P1^2;                  //舵机输出接口

  4. sbit trig=P1^0;                          //触发脚
  5. sbit echo=P1^1;                          //接受脚

  6. unsigned int dis;         //测算出的距离
  7. unsigned char duojiCNT;
  8. unsigned char duojiJD;

  9. void open();           //打开超声波函数
  10. void jisuan();         //计算距离函数

  11. void main()
  12. {
  13.    unsigned int a = 20000;
  14.    TMOD=0X11;                                               
  15.    TR0=1;                          //打开定时器0,1,打开中断,并定时0.5ms
  16.    EA=1;
  17.    ET0=1;
  18.    TH0=0XFE;
  19.    TL0=0X33;
  20.    while(1)
  21.    {  
  22.      if(dis<=8)
  23.         {
  24.       duojiJD=1;
  25.           duojiCNT=0;
  26.           for(a=20000;a>0;a--);
  27.           for(a=20000;a>0;a--);
  28.           open();
  29.           jisuan();
  30.                                                        //{如果距离大于8,前进,并每隔一个for循环开启一次超声波,                                                                                                                                                                                                 
  31.                                                                //如果距离小于8,舵机转到0度//{如果0度处距离大于8,舵机归中,并前进                        {距离小于8,舵机归中,后退       
  32.                   if(dis>=8)                                                                                        //{如果0度处距离小于8,舵机转到180度,开启超声波{距离大于8,归中
  33.                   {
  34.                    duojiJD=3;      //舵机归中
  35.                    duojiCNT=0;
  36.                    for(a=20000;a>0;a--);
  37.                    for(a=20000;a>0;a--);
  38.                    }
  39.                    else
  40.                    {
  41.                    duojiJD=5;      //舵机转到180度
  42.                    duojiCNT=0;
  43.                    for(a=20000;a>0;a--);         
  44.                    for(a=20000;a>0;a--);
  45.                    for(a=20000;a>0;a--);
  46.                    open();
  47.                    jisuan();
  48.                       if(dis>=8)
  49.                           {
  50.                            duojiJD=3;
  51.                        duojiCNT=0;
  52.                            }
  53.                            else
  54.                            {
  55.                            duojiJD=5;
  56.                            duojiCNT=0;
  57.                            for(a=20000;a>0;a--);
  58.                        for(a=20000;a>0;a--);
  59.                        for(a=20000;a>0;a--);
  60.                            }
  61.                    }
  62.                 }
  63.         else
  64.         {
  65.          duojiJD=3;
  66.          duojiCNT=0;
  67.          open();
  68.          jisuan();
  69.          for(a=20000;a>0;a--);
  70.          }
  71.    }
  72. }

  73. void open()
  74. {
  75.   trig=1;
  76.   _nop_();
  77.   _nop_();
  78.   _nop_();
  79.   _nop_();
  80.   _nop_();
  81.   _nop_();
  82.   _nop_();
  83.   _nop_();
  84.   _nop_();
  85.   _nop_();
  86.   _nop_();
  87.   _nop_();
  88.   trig=0;
  89. }

  90. void jisuan()
  91. {
  92.    unsigned int t;
  93.    TH1=0;
  94.    TL1=0;
  95.    while(!echo);
  96.    TR1=1;
  97.    while(echo);
  98.    TR1=0;
  99.    t=TL1+TH1*255;
  100.    dis=(t*1.7)/100;
  101. }

  102. void timer() interrupt 1
  103. {
  104.    TH0=0XFE;
  105.    TL0=0X33;
  106.    if(duojiCNT<duojiJD)
  107.    {
  108.      duojip=1;
  109.          }
  110.         else
  111.         {
  112.          duojip=0;
  113.          }
  114.    duojiCNT++;
  115.    duojiCNT=duojiCNT%40;                        //每20ms duojiCNT归零
  116. }  
复制代码

所有资料51hei提供下载:
舵机测试,电机测试,超声波小车程序.rar (85.41 KB, 下载次数: 49)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1