找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机超声波测距资料

[复制链接]
跳转到指定楼层
楼主
ID:145423 发表于 2016-10-31 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己动手下载吧:
超声波测距 main.rar (1.11 KB, 下载次数: 22)

  1. /*
  2. 超声波测距
  3. 8-29 HC-SR04模块用有-2cm的误差,
  4.                                         但是US-015模块是正确的

  5. 编程思路
  6.         测距动作
  7.                 开20us的Trig
  8.                 等待Echo上升
  9.                 一旦上升开定时器
  10.                 Echo下降时关定时器
  11.                 输出定时器的值
  12.         主程序
  13.                 循环测距动作
  14.                 间隔1s
  15.         定时器中断
  16.                 复位

  17. 准确性
  18.         与计算公式有关
  19.         与被测物体的表面积大小有关
  20.         与角度有关
  21. */
  22. #include <stdio.h>
  23. #include <intrins.h>
  24. #include <math.h>
  25. #include <STC12C5A60S2.H>

  26. sbit hcsr04_trig = P2^0;//发
  27. sbit hcsr04_echo = P3^2;//收 INT0
  28. sbit hcsr04_test = P2^1;//测试

  29. unsigned char data hcsr04_tl        = 0;
  30. unsigned char data hcsr04_th        = 0;
  31. unsigned int        data hcsr04_s        = 0;

  32. void Delay20us()                //@11.0592MHz
  33. {
  34.         unsigned char i;

  35.         _nop_();
  36.         i = 52;
  37.         while (--i);
  38. }

  39. void Delay1000ms()                //@11.0592MHz
  40. {
  41.         unsigned char i, j, k;

  42.         i = 43;
  43.         j = 6;
  44.         k = 203;
  45.         do
  46.         {
  47.                 do
  48.                 {
  49.                         while (--k);
  50.                 } while (--j);
  51.         } while (--i);
  52. }

  53. void UART_init()
  54. {
  55.         PCON        = 0x00;
  56.         SCON        = 0x50;//0101 0000
  57.         TMOD        |= 0x20 ;
  58.         TH1                = 0xFD;//9600bps
  59.         TL1                = 0xFD;
  60.         ET1                = 0;
  61.         ES                = 0;//1时开串口中断
  62.         TR1                = 1;

  63.         TI                 = 1;
  64.         puts("HC-SR04 \t--------");
  65.         Delay20us();        
  66.         puts("UART_init \t-");
  67.         Delay20us();        
  68. }

  69. void t0_init()
  70. {
  71.         TMOD         |= 0x01;//T0工作方式1------16位
  72.         TH0         = 0x00;
  73.         TL0         = 0x00;        
  74.         ET0         = 1;//T0中断
  75.         EA                 = 1;        
  76.         
  77.         puts("t0_init \t-");
  78.         Delay20us();        
  79. }

  80. void t0ser() interrupt 1
  81. {
  82.         TH0 = 0;
  83.         TL0 = 0;
  84. }

  85. /*
  86. HC-SR04 模块工作原理
  87. 1.Trig触发测距 >=10us 高电平
  88. 2.模块自动发送8个40kHz方波
  89.         自动检测是否有信号返回
  90. 3.当有信号返回时,
  91. */
  92. void hcsr04()
  93. {        
  94.         TR0 = 0;
  95.         TH0        = 0;
  96.         TL0 = 0;
  97.         
  98.         hcsr04_trig = 1;
  99.         Delay20us();
  100.         hcsr04_trig = 0;
  101.         Delay20us();
  102.         while(!hcsr04_echo);        
  103.         TR0 = 1;
  104.         while(hcsr04_echo);
  105.         TR0 = 0;
  106.         
  107.         // hcsr04_s = (TH0*256+TL0)/58;        
  108.         hcsr04_s =(TH0*256+TL0+59)*0.0172;
  109. }

  110. void main(void)
  111. {        
  112.         UART_init();        
  113.         t0_init();        

  114.         while(1)
  115.         {        
  116.                 hcsr04();
  117.                 printf("MAIN \thcsr04_s = %d\n",
  118.                         hcsr04_s);        
  119.                 Delay1000ms();                                
  120.         }        
  121. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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