找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单收单发超声波模块资料 含k60 LPC54606 RT1021 XS128 单片机程序

[复制链接]
跳转到指定楼层
楼主
单发单手超声波模块资料,附带51,arduino等使用例程,非常好用,想要研究的可以学习下


单片机源程序如下:
  1. /********************************************
  2. 软件版本:KEIL
  3. 目标核心:STC89C52RC
  4. ============================================
  5. 有来有去接线定义:
  6. ------------------------------------
  7.     超声波模块管脚      单片机管脚
  8.         TXD                                    P3.0
  9.     RXD                 不与单片机连接

  10.     USB转TTL引脚        单片机管脚
  11.     RXD                 P3.1
  12.     TXD                 不与单片机连接
  13.    
  14.    
  15.     连接好之后,使用串口助手观察输出的信息,即可获取距离信息
  16. ============================================

  17. *********************************************/  

  18. #include "stc89c52rc.h"





  19. sfr T2CON         =   0xc8;
  20. sbit TF2          =   T2CON^7;
  21. sbit EXF2         =   T2CON^6;
  22. sbit RCLK         =   T2CON^5;
  23. sbit TCLK         =   T2CON^4;
  24. sbit EXEN2        =   T2CON^3;
  25. sbit TR2          =   T2CON^2;
  26. sbit C_T2         =   T2CON^1;
  27. sbit CP_RL2       =   T2CON^0;



  28. sfr RCAP2L        =   0xCA;
  29. sfr RCAP2H        =   0xCB;
  30. sfr TL2           =   0xCC;
  31. sfr TH2           =   0xCD;




  32. void UartInit(void)                //115200bps@11.0592MHz
  33. {
  34.         SCON=0x50; //串口工作方式1,8位UART,波特率可变  
  35.     TH2=0xFF;           
  36.     TL2=0xFD;    //波特率:115200 晶振=11.0592MHz
  37.     RCAP2H=0xFF;   
  38.     RCAP2L=0xFD; //16位自动再装入值

  39.     TCLK=1;   
  40.     RCLK=1;   
  41.     C_T2=0;   
  42.     EXEN2=0; //波特率发生器工作方式
  43.     TR2=1 ; //定时器2开始
  44.    
  45.     EA = 1;
  46.     ES  = 1;                //串口中断打开
  47. }



  48. unsigned char   dat[3];
  49. unsigned char   num;
  50. int             distance = 0;

  51. unsigned char   flag = 0;
  52. unsigned char   flag_send = 0;
  53. void uart(void) interrupt 4
  54. {
  55.     unsigned char temp_data = 0;
  56.     if(RI)
  57.     {
  58.         RI = 0;
  59.         dat[num] = SBUF;
  60.         
  61.         if(dat[0] != 0xa5)num = 0;        //检查头帧是否正确,不正确就重新接收
  62.         else num++;
  63.         if(num==3)                                        //接收完成,开始处理数据
  64.         {
  65.             num = 0;
  66.             distance = dat[1]<<8 | dat[2];
  67.             flag = 1;
  68.         }
  69.     }
  70.         else if(TI)
  71.         {
  72.                 flag_send = 0;
  73.                 TI = 0;
  74.         }
  75. }

  76. void put_char(unsigned char byte)
  77. {
  78.     SBUF = byte;
  79.     flag_send = 1;
  80.     while(flag_send);
  81. }

  82. void put_str(unsigned char * str)
  83. {
  84.     while('\0' != *str) //持续发送直到遇到字符串结束符
  85.     {
  86.         put_char(*str); //发送字符
  87.         str++;          //指针加一,准备发送下一个字符
  88.     }
  89. }

  90. void delay(int t)
  91. {
  92.     while(t--);
  93. }


  94. void main(void)
  95. {
  96.     unsigned char message[] = "distance =      mm\n";
  97.    
  98.    
  99.     UartInit();

  100.     while(1)
  101.     {
  102.         
  103.         if(flag)
  104.         {
  105.             message[11] = distance/1000 + '0';
  106.             message[12] = distance/100%10 + '0';
  107.             message[13] = distance%100/10 + '0';
  108.             message[14] = distance%10 + '0';
  109.             
  110.             put_str(message);   //发送距离信息
  111.             delay(999);         //延时,
  112.         }
  113.     }
  114. }
复制代码

所有资料51hei提供下载:
单发单收模块资料.7z (4.82 MB, 下载次数: 46)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:836780 发表于 2020-11-19 15:29 | 只看该作者
想让我在串口读出的是16进制
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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