找回密码
 立即注册

QQ登录

只需一步,快速开始

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

US-015超声波模块 单片机程序与资料

[复制链接]
跳转到指定楼层
楼主
数据手册
US-015是US-020模块的升级版本,和US-020兼容,以前US-020的测试程序US-015也适用。
US-015超声波测距模块例程与US-020的测试例程相同。
电路原理图如下:


单片机源程序如下:

  1. #include "US020Test.h"

  2. void Delay1Ms(void);
  3. void Delay5Ms(void);
  4. void Delay400Ms(void);

  5. void UART_ISR(void);
  6. void UARTSnd(unsigned char dat);
  7. void UART_init();
  8. void init(void);

  9. sbit RCK_STMM = P2^7;
  10. sbit DIO_DS          = P2^6;
  11. sbit SCK_SHBit = P2^5;

  12. sbit Trig_Mode = P2^0;
  13. sbit UART_Mode = P2^1;
  14. sbit UART_TEMP  = P2^2;

  15. sbit Trig_Pin = P1^7;
  16. sbit Echo_Pin = P1^6;

  17. void InitIOPort()
  18. {       
  19. //        P0M1 = 0XFF //p0口设为输入。
  20.         P0M1 = 0;//P0口设为双向口,可输入输出
  21.         P0M2 = 0;//P0口设为双向口,可输入输出

  22.         P2M1 &= 0X0F;//P2口的P2.5,P2.6,P2.7设为双向口,可输入输出
  23.         P2M2 &= 0X0F;//P2口的P2.5,P2.6,P2.7设为双向口,可输入输出
  24. }


  25. void DisplayLED(unsigned char LEDid, unsigned char Value, unsigned char Isdot)
  26. {
  27.         unsigned char tempa, tempb;
  28.         unsigned char tempc, tempd;
  29.         const unsigned char NumValue[11] = {0X40, 0X79, 0X24, 0X30, 0X19, 0X12, 0X02, 0X78, 0X00, 0X10, 0X3F};//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -.
  30.        
  31.         tempa = 1;
  32.         tempa <<= (LEDid-1);
  33.         if(Value >= 11)//value should little than 10
  34.                 Value = 0;
  35.         tempb = NumValue[Value];
  36.         if(Isdot == 0)
  37.                 tempb += 0X80;

  38.         //begin output
  39.         tempd = 0X80;
  40.         for(tempc = 0; tempc < 8; tempc++)
  41.         {
  42.                 SCK_SHBit = 0;
  43.                 SCK_SHBit = 0;
  44.                 DIO_DS  = (tempa&tempd);
  45.                 SCK_SHBit = 1;
  46.                 SCK_SHBit = 1;
  47.                 tempd >>= 1;
  48.         }

  49.         tempd = 0X80;
  50.         for(tempc = 0; tempc < 8; tempc++)
  51.         {
  52.                 SCK_SHBit = 0;
  53.                 SCK_SHBit = 0;
  54.                 DIO_DS  = (tempb&tempd);
  55.                 SCK_SHBit = 1;
  56.                 SCK_SHBit = 1;
  57.                 tempd >>= 1;
  58.         }

  59.         RCK_STMM = 0;
  60.         RCK_STMM = 0;
  61.         RCK_STMM = 0;
  62.         RCK_STMM = 0;
  63.         RCK_STMM = 1;
  64.         RCK_STMM = 1;
  65.         RCK_STMM = 1;
  66.         RCK_STMM = 1;
  67.         //Delay1Ms();
  68. }

  69. void DisplayLength(unsigned long number)
  70. {
  71.         unsigned char Thousand, Hundred, Decade, Unit;
  72.         if(number > 9999)
  73.                 number = 0;
  74.         Thousand = number/1000;

  75.         number = number%1000;
  76.         Hundred = number/100;

  77.         number = number%100;
  78.         Decade = number/10;

  79.         Unit = number%10;

  80.         DisplayLED(1, Thousand, 0);
  81.         DisplayLED(2, Hundred, 0);
  82.         DisplayLED(3, Decade, 0);
  83.         DisplayLED(4, Unit, 0);
  84. }


  85. unsigned long MeterByTrig()
  86. {
  87.         unsigned char tempa;
  88.         unsigned char IsOverFlow;
  89.         unsigned long PresentTime, tempb;
  90.         IsOverFlow = 0;

  91.         //Delay1Ms();

  92.         P1M1 &= 0X7F;
  93.         P1M2 &= 0X7F;

  94.         P1M1 |= 0X40;
  95.         P1M2 &= 0XBF;


  96.         //Timer Init
  97.         TMOD = 0X11;
  98.         TAMOD = 0X00;
  99.         TCON = 0X00;
  100.         TH1 = 0;
  101.         TL1 = 0;

  102.         Trig_Pin = 0;
  103.         for(tempa = 0; tempa < 10; tempa++)
  104.         {
  105.                 Trig_Pin = 1;
  106.         }
  107.         Trig_Pin = 0;

  108.         while(1)
  109.         {
  110.                 if(Echo_Pin == 1)
  111.                 {//Start Timer;
  112.                         TCON = 0X40;//start timer
  113.                         break;
  114.                 }
  115.                 if(TCON&0X80)
  116.                 {
  117.                         IsOverFlow = 1;
  118.                         break;//overflow;
  119.                 }
  120.         }

  121.         while(1)
  122.         {
  123.                 if(Echo_Pin == 0)
  124.                 {//Stop Timer;
  125.                         TCON = 0X00;
  126.                         break;
  127.                 }
  128.                 if(TCON&0X80)
  129.                 {
  130.                         IsOverFlow = 1;
  131.                         break;//overflow;
  132.                 }
  133.         }

  134. //        unsigned long PresentTime, tempb;
  135.         PresentTime = TH1;
  136.         PresentTime <<= 0X08;
  137.         PresentTime += TL1;

  138.         tempb = PresentTime/137;
  139.         PresentTime /= 7;//*3

  140.         PresentTime -= tempb;//time, us

  141.         tempb = PresentTime/150;
  142.         PresentTime /= 3;
  143.         PresentTime += tempb;
  144.         //Delay1Ms();
  145.         return PresentTime;
  146. }

  147. void main(void)
  148. {
  149.         unsigned char tempa;
  150.         unsigned long PreLength;

  151.         InitIOPort();

  152.         while(1)
  153.         {
  154.                 PreLength = MeterByTrig();
  155.                 for(tempa = 0; tempa < 200; tempa++)
  156.                 {
  157.                         DisplayLength(PreLength);
  158.                 }
  159.         }
  160. }


  161. //1ms延时
  162. void Delay1Ms(void)
  163. {
  164. unsigned long TempCyc = 90;//36865;//5552;
  165. while(TempCyc--);
  166. }
  167. //5ms延时
  168. void Delay5Ms(void)
  169. {
  170. unsigned long TempCyc = 460;//36865;//5552;
  171. while(TempCyc--);
  172. }

  173. //400ms延时
  174. void Delay400Ms(void)
  175. {
  176. unsigned char TempCycA = 80;//5;
  177. unsigned long TempCycB;
  178. while(TempCycA--)
  179. {
  180.   TempCycB=460;//50000; //7269;
  181.   while(TempCycB--);
  182. };

  183. }
复制代码

所有资料51hei提供下载:
US-015使用说明书及例程.rar (2.14 MB, 下载次数: 15)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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