找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+超声波控制舵机转动源程序

[复制链接]
跳转到指定楼层
楼主
ID:595263 发表于 2020-3-12 17:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit Trig=P3^4;            //控制端
  7. sbit Echo=P3^5;          //接收端
  8. sbit led=P1^3;
  9. sbit servorControl =P1^3;  //舵机的控制引脚

  10. uchar flag=0;
  11. uchar control=5;
  12. uchar servorTime=0;






  13. unsigned char T0RH=0;
  14. unsigned char T0RL=0;

  15. void time_init()
  16. {
  17.         EA=1;
  18.         TMOD=0x11;
  19.         TH0 = 0;
  20.         TL0 = 0;
  21. }
  22. ///////////////////////////////////////
  23. void delay(uchar time){  //延迟函数
  24. uchar i;
  25. for(;time>0;time--){
  26.   for(i=0;i<255;i++);
  27. }
  28. }

  29. //初始化定时器
  30. void Delay_us(unsigned char t)
  31. {
  32.         while(--t);
  33. }         //大约延时t*2+5us         超声波模块用
  34. //////////////////////////////////////

  35. void timer0()interrupt 1
  36. {
  37. TH0 = 0;
  38. TL0 = 0;
  39. }
  40. //中断程序 初始化赋值 重新计数 超声波模块用 计算时间
  41. void main()
  42. {
  43.         unsigned int time,distance;
  44.          
  45.         EA=1;
  46.   ET0=1;
  47.   ET1=1;
  48.   TMOD=0x11;
  49.   TH1=0xff;
  50.   TL1=0x9c;
  51.   servorTime=0;
  52.          
  53.          
  54.          
  55.         Trig=0;
  56.         Echo=0;
  57.         time_init();
  58.         while(1)
  59.         {

  60.                 Trig=1;
  61.                 Delay_us(5);
  62.                 Trig=0;
  63.                 while(Echo==0);
  64.                 TR0=1;
  65.                 while(Echo);
  66.                 TR0=0;
  67.                 time=TH0*256+TL0;
  68.                 distance=(int)(time*0.017);                           //计算路程 单位为cm
  69.                 TH0=0;
  70.                 TL0=0;
  71.                 if(distance<30)                                        //如果距离小于30cm 蜂鸣器响
  72.                 {
  73.                 control=15;   //使舵机向正摆动
  74.     servorTime=0;
  75.     TR1=1;
  76.     delay(200);
  77.                 delay(200);
  78.     TR1=0;
  79.                 }
  80.                 else
  81.                 {
  82.                 control=5;   //使舵机向右摆动
  83.     servorTime=0;
  84.     TR1=1;
  85.     delay(200);
  86.                 delay(200);
  87.     TR1=0;
  88.     delay(200);
  89.                 delay(200);
  90.                 }
  91.         }
  92. }
  93. void T1_int(void) interrupt 3{   //产生舵机所需要的脉冲
  94.   TH1=0xff;
  95.   TL1= 0x9c;
  96.   servorTime++;
  97.   if(servorTime<=control)
  98.    servorControl=1;
  99.   else
  100.    servorControl=0;
  101.    if(servorTime>=200)
  102.    servorTime=0;
  103. }
复制代码

所有资料51hei提供下载:
舵机转向与超声波.zip (29.16 KB, 下载次数: 14)

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

使用道具 举报

沙发
ID:1 发表于 2020-3-12 22:18 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:461901 发表于 2020-4-1 15:40 | 只看该作者
admin 发表于 2020-3-12 22:18
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)

没有编辑按钮啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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