找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1375|回复: 2
收起左侧

单片机舵机转动超声波测距程序 为啥我加入超声波测距舵机就不转了 求帮助

[复制链接]
ID:501937 发表于 2019-5-7 20:24 | 显示全部楼层 |阅读模式
  1.     #include<reg51.h>
  2.     #include<intrins.h>


  3.     #define uchar unsigned char
  4.     #define uint unsigned int
  5.            uchar num=0,sun;
  6.          uchar shi,ge,bai;
  7.          int jia=0;
  8.          
  9.          unsigned long  int s=0;
  10.                  void delay(uint max)
  11.        {
  12.            int x,y;
  13.             for(x=0;x<max;x++)
  14.                    for(y=0;y<500;y++);
  15.        }
  16.          int cade[]={1,8,18};
  17.     sbit RS=P2^6;
  18.     sbit RW=P2^5;  
  19.     sbit E=P2^7;  
  20.           sbit trig=P2^1;
  21.         sbit echo=P2^2;
  22.            sbit pwm=P2^0;

  23.         void start()
  24.         {
  25.          trig=1;
  26.          _nop_();
  27.          _nop_();
  28.          _nop_();
  29.          _nop_();
  30.          _nop_();
  31.          _nop_();
  32.          _nop_();
  33.          _nop_();
  34.          _nop_();
  35.          _nop_();
  36.          _nop_();
  37.          _nop_();
  38.          trig=0;
  39.         }

  40.         




  41.     uchar Lcd1602_ReadBusy()  
  42.     {
  43.        uchar temp;
  44.        RS=0;
  45.        RW=1;
  46.        _nop_();
  47.        P0=0xff;               


  48.        _nop_();
  49.        E=1;
  50.        _nop_();
  51.        temp=P0;   
  52.        _nop_();
  53.        E=0;
  54.        return (temp&0x80);

  55.     }


  56.     void Lcd1602_WriteCom(uchar com)
  57.     {
  58.        while(Lcd1602_ReadBusy());
  59.        RS=0;
  60.        RW=0;  
  61.        _nop_();
  62.        P0=com;  
  63.        _nop_();
  64.        E=1;     
  65.        _nop_();
  66.        _nop_();
  67.        E=0;      
  68.        _nop_();
  69.        _nop_();   
  70.     }

  71.     void Lcd1602_WriteData(uchar dat)
  72.     {
  73.        while(Lcd1602_ReadBusy());   
  74.        RS=1;   
  75.        RW=0;  
  76.        _nop_();
  77.        P0=dat;
  78.        _nop_();
  79.        E=1;
  80.        _nop_();
  81.        _nop_();
  82.        E=0;
  83.        _nop_();
  84.        _nop_();   
  85.     }

  86.     void Lcd1602_init()
  87.     {
  88.        delay(15);
  89.        Lcd1602_WriteCom(0x38);  
  90.        delay(5);
  91.        Lcd1602_WriteCom(0x38);
  92.        delay(5);
  93.        Lcd1602_WriteCom(0x38);
  94.        Lcd1602_WriteCom(0x0c);  
  95.        Lcd1602_WriteCom(0x01);
  96.        Lcd1602_WriteCom(0x06);
  97.     }



  98.          void  count()
  99.          {
  100.         
  101.                  TMOD=0x01;
  102.                  ET0=1;
  103.                  EA=1;
  104.                  TL0=0;
  105.                  TH0=0;
  106.                  start();
  107.                  while(!echo);
  108.                  TR0=1;
  109.                  while(echo);
  110.                  TR0=0;
  111.                  s=TH0*256+TL0+jia;
  112.                  jia=0;
  113.                  s=s*0.017*12/11;
  114.                  Lcd1602_init();
  115.                  bai=s/100;
  116.                  shi=s/10%10;
  117.                  ge=s%10%10;
  118.                  Lcd1602_WriteCom(0x80+0x02);
  119.                  Lcd1602_WriteData(0x30+bai);
  120.                  Lcd1602_WriteData(0x30+shi);
  121.                  Lcd1602_WriteData(0x30+ge);

  122.         
  123.          }
  124.          void T1_time()interrupt 3
  125.          {
  126.          jia=jia+65536;
  127.          TH0=0;
  128.          TL0=0;
  129.          }
  130.           void duoji(uint i)

  131.           {
  132.          
  133.           TMOD=0X11;
  134.           TH0=(65536-100)/256;
  135.           TR0=(65536-100)%256;
  136.           EA=1;
  137.           ET0=1;
  138.           TR0=1;
  139.                  sun=cade[i];
  140.         

  141.          }
  142.             void T0_time()interrupt 1
  143.                   {
  144.                                      TH0=(65536-100)/256;
  145.                                          TL0=(65536-100)%256;
  146.                                            num++;
  147.                                               if(num==50)  num=0;
  148.                                                             if(num>sun) pwm=0;
  149.                                                                  else  pwm=1;
  150.                                                                  }

  151.                   void main()
  152.                   {
  153.                   duoji(0);
  154.                   delay(100);
  155.         
  156.                   duoji(1);
  157.                   delay(100);
  158.                   count();
  159.                
  160.                   
  161.                   duoji(2);
  162.                   delay(100);
  163.                   }
复制代码



回复

使用道具 举报

ID:630001 发表于 2019-11-3 12:44 | 显示全部楼层
补下电路图
回复

使用道具 举报

ID:630001 发表于 2019-11-3 13:03 | 显示全部楼层
你舵机TMOD为0x11,超声波为0x01,先舵机设置,后超声波,TMOD数值改了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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