目录

  • 一、前言
  • 二、硬件准备
  • 二、软件准备
  • 三、硬件接线图
  • 四、例程源码
  • 五、烧录说明
    • 5.1 烧录接线示意图
    • 5.2 烧录动态图
  • 六、结果输出

一、前言

此片文章主要介绍如果通过51系列开发板来读取TOF250(TTL接口)数据的教程
提示:以下的案例仅供参考学习使用


二、硬件准备

  • TOF250 :测距传感器

  • 51系列开发板:STC12C5A60S2 主频12M
    提示:51系列开发板种类较多,此处不专门举例

详细资料可以参考:STC 官网

  • 电脑 :Windows 7/10/11

  • TTL转USB:本次测试使用CH340芯片转接板

  • 杜邦线:各类(若干)

  • TOF250尾线:购买时自带有一根尾线


二、软件准备

  • KEIL IDE:参考官网下载安装教程

三、硬件接线图

提示:实际在测试过程中不建议接上图黄色的线
说明:

  • STC12C5A60S2共有两个串口,不过此次测试仅使用一个串口,方便理解
  • USB打印结果需要用到串口1的TX
  • 读取TOF250需要用到串口1的RX

四、例程源码

/**************************************************************
**技术论坛:https://blog.csdn.net/HCJ_Application/article/details/124058266
**修改日期:2022/4/24
**技术说明:基于STC12C5A60S2单片机,主频12M
**版本:V1.0
**作者:深圳市弘成基科技有限公司
**************************************************************/#include <STC12C5A60S2.h>
#include <stdio.h>unsigned char data RxCounter;            //UART接收数的累加
unsigned char data RxBuffer[10],RxDat[10]; //UART缓存区、数据区
unsigned char data UartReadEnd = 0;    //检测是否接收结束
unsigned char j = 0;                   //检测每次接收到的长度,方便字符串转整数的时候进行处理unsigned int  Tof250_dist = 0;         //读取到TOF250的具体数值void Uart1_SendChar(unsigned char Udat) ;
unsigned int StringToDEC(unsigned char data *rdata,unsigned char len);/**************************************************************
**TOF250串口通信协议:
**波特率 : 9600
**数据位 : 8
**校验   : 无
**停止位 : 1
****************************************************************/
void UartInit(void)     //9600bps@12.000MHz
{PCON |= 0x80;     //使能波特率倍速位SMODSCON = 0x50;     //8位数据,可变波特率AUXR |= 0x40;      //定时器时钟1T模式AUXR &= 0xFE;       //串口1选择定时器1为波特率发生器TMOD &= 0x0F;        //设置定时器模式TMOD |= 0x20;     //设置定时器模式TL1 = 0xB2;       //设置定时初始值TH1 = 0xB2;       //设置定时重载值ET1 = 0;      //禁止定时器%d中断TR1 = 1;        //定时器1开始计时ES = 1;     //打开串口接收中断EA = 1;           //打开所有中断
}
char putchar(char c)
{Uart1_SendChar(c);return c;
}void Uart1_SendChar(unsigned char Udat)
{SBUF=Udat; //将要发送的数据放入串口数据缓冲区while(!TI); //等待发送完成TI=0;      //清零TI发送完成标记
}void main()
{UartInit();while(1) {if(UartReadEnd == 1) {                      //如果接收结束了就开始数据处理输出UartReadEnd = 0;Tof250_dist = StringToDEC(&RxDat,j);    //将接收到的字符串数组转换成整型输出//printf("-----String%s\n",RxDat);      //调试:直接打印出字符串数组,方便检测接收是否正确printf("%u cm\n",Tof250_dist);          //串口1直接打印输出}}
}//串口中断处理函数
/**************************************************************
**TOF250串口输出格式:
**Ascii 输出
**单位为cm(默认)
**后跟转义字符\n
**例如:测距为 121cm,则输出字符串 121
****************************************************************/
void uart_Interrupt() interrupt 4
{unsigned char UartData;      //单字节串口数据if(RI){UartData = SBUF;if(UartData != '\n') {   //判断结束,如果结束了就不在接收RxBuffer[RxCounter++] = UartData;} else {for(j = 0; j < RxCounter; j++) {RxDat[j] = RxBuffer[j];}RxCounter = 0;        //及时接收累加清0UartReadEnd = 1;      //接收完成的标志}RI = 0;}
}//字符串数组转换成数字
unsigned int StringToDEC(unsigned char data *rdata,unsigned char len)
{unsigned char data i;unsigned int wdata = 0;unsigned char temp[4];for(i=0; i<len-1; i++){if((*(rdata+i) >= '0') && (*(rdata+i) <= '9')) temp[i] =  *(rdata+i) - '0';  //字符串转换成数字}switch(i) {case 1:wdata = temp[i-1];break;case 2:wdata = temp[i-2]*10 + temp[i-1];break;case 3:wdata = temp[i-3]*100 + temp[i-2]*10 + temp[i-1];break;case 4:wdata = temp[i-4]*1000 + temp[i-3]*100 + temp[i-2]*10 + temp[i-1];break;default:break;}return wdata;
}

五、烧录说明

5.1 烧录接线示意图

5.2 烧录动态图

提示:烧录过程中请先断开TF250与STC12C5A60S2的TX\RX接线,否则无法正常烧录


六、结果输出

通过SSCOM串口软件打印结果(其他串口工具也可以)

提示:注意选择对应的波特率,此次测试使用波特率为9600

【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用相关推荐

  1. 【STC12C5A60S2】TOF250(IIC)基于51系列开发板的运用

    目录 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通过51系列开发板来读取 ...

  2. 【STM32F103ZE】TOF250(TTL)基于STM32系列开发板的运用

    目录 @[TOC](目录) 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通 ...

  3. 如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结)

    转载: 来源:www.armjishu.com 作者:jesse 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM32的理由!!!!)>http://ww ...

  4. 基于stm32物联网开发板(1)

    基于stm32物联网开发板(1)   本开发板采用了STM32F103RET6作为核心CPU,72MHZ工作频率,512KB flash,64KB Sram.本开发平台外设模块有ESP8266 WIF ...

  5. 构建一个适合stm32mp157系列开发板的嵌入式Linux系统

    在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...

  6. 基于ShineBlink物联网开发板和机智云平台开发的“针对短期内宠物无人照顾的智能宠物屋”系统

    正式介绍作品前先说明一下,我是湖南文理学院计算机与电气工程学院的一名大三学生,我叫陈海涛.作品全部内容均为个人创意.个人设计并手工制作,后期会考虑写论文投期刊,So!!严禁抄袭!抄袭必究! 该作品是用 ...

  7. RK系列开发板音频驱动适配指南(一)

    背景: 多媒体系统目前在Linux操作系统,windows操作系统已经非常成熟,并且应用场景广泛,但是,基于OpenAtom OpenHarmony(以下简称"OpenHarmony&quo ...

  8. 【网络收录】基于51单片机开发音乐播放器

    [网络收录]基于51单片机开发音乐播放器 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Thu, 22 May 2014 18:14:00 +0800 特别声明:本资料来源 ...

  9. SSI技术的前端动态实现(AJAX+SSI,适用于任何系统,包括搭载嵌入式RTOS的STM32系列开发板)

    SSI技术的前端动态实现(AJAX+SSI,适用于任何系统,包括搭载嵌入式RTOS的STM32系列开发板) 前言 RTOS简述及开发困难所在 开发环境 详细的解决方案 SSI初加载 基础的动态操作 伪 ...

最新文章

  1. 综述|基于深度学习方式的场景分类算法
  2. 递归删除目录下.svn文件
  3. 赢在CSDN——如何在CSDN赚到一桶金
  4. ACM主要赛考察内容
  5. leecode-数组-27Remove Element-java
  6. lwip+freeRTOS 无法ping通的解决方案
  7. 解压并安装protobuf库_golang-leaf服务器-protobuf的安装
  8. 关于ssh的一篇很好的文章
  9. Android-Parcelable理解与使用(对象序列化)
  10. 百度爱番番实时 CDP 建设实践
  11. Atitit.软件中见算法 程序设计五大种类算法
  12. java 代码走查_Java代码走查具体考察点
  13. QT中QFile读写txt乱码问题|Windows10
  14. ubuntu 保存命令行操作记录
  15. webApp开发-等额本息试算
  16. 随机密码生成(Python编程)
  17. php转mp3的工厂,魔影工厂怎么转成mp3 魔影工厂转换mp3教程
  18. 数据库【MySQL数据库介绍】
  19. 2019一级消防工程师视频课件下载【全三科】
  20. Matlab绘制三维曲线(plot3)和三维图形(mesh surf)

热门文章

  1. Android Studio打包APK安装失败:应用是非正式版本,当前设备不支持安装
  2. 【Book 133】Illuminate-Harness the Positive Power of negative Thinking
  3. C语言一秒钟看懂for循环和while循环的用法?
  4. 11套宝藏特效视频素材大约263GB 免费分享
  5. POST,PUT和PATCH的区别
  6. Spring-Lifecycle分析
  7. 快速批量修改word文档内容
  8. 商务智能-系统概述-商务智能作用
  9. 独享路由守卫beforeEnter
  10. java阿里云短信服务SDK使用方法