51学习库(5)--HC_SR04超声波模块
来源:互联网 发布:淘宝靠谱美国代购店铺 编辑:程序博客网 时间:2024/04/27 14:37
学过51单片机的回过头来都会觉得51还是比较简单的,在此我将贴出在我的学习过程中,把对各种外设所进行的操作,封装成函数库的形式,以供新手学习。
注:使用的单片机是stc12c5a60s2,该系列单片机属于加强51,在运行速度上是普通51的8-12倍,有关时序的操作需要加以注意。
注2:使用示例:
void main(){ unsigned char i; init_SR04(); //初始化超声波 lcd_init(); //初始化液晶12864 while(1) { distance=sonic(); //调用函数获取距离 sprintf(juli, "%dmm", (int)distance); //数据处理为lcd要显示的内容 lcd_pos(0, 0); i = 0; lcd_wcmd(0x01); //清屏 while('\0' != juli[i]) lcd_wdat(juli[i++]); delayms(500); //0.5秒测一次,也可用定时器 }}
申明:本系列全部例程通过单片机开发板,实验亲测有效!
/* hc-sr04 */sbit RX=P3^6; //echo 接收端sbit TX=P3^5; //trig 发送端void init_SR04(void){ RX=1; //置1,作为输入端查询,(51单片机特性,可查阅相关资料 //若输入电平为1则1&1=1,若输入0则0&1=0, //如果RX=0:则无论引脚输入是1还是0,与原先置为0的RX脚& //则得到的总是0,也就无法检测后面输入RX的电平) TX=0;}void send() //发送端TRI发送20us高电平{ TX = 0; Delay20us(); TX=1; Delay20us(); TX=0;}void Clr_timer() //定时器清零{ TH0=0; TL0=0; TF0=0;}unsigned int sonic() //超声波测距{ unsigned int ceju1,time; Clr_timer(); Delay20us(); send(); while(!RX); //等待接收端变为高电平 TR0=1; //启动计数 while(RX); //等待接收端变为低电平 TR0=0; //停止计数 if(TF0) ceju1=9999; else { time=TH0*256+TL0; //得到距离所用时间 ceju1=time*0.172+0.5; //放大10倍,取一位小数,此处已转化为cm单位, //无需再转换,只是放大了10倍,四舍五入取位小数而已 //计算公式distance=time*344/2/1000000=time*0.0172 单位为cm,若为英尺好像是有个58什么来着来着,忘记了,自己百度吧 } if(ceju1>5000) //大于5米,超出测距范围,置为无效数据 ceju1=9999; return ceju1;}void Delay20us() //@12.000MHz{ unsigned char i; i = 57; while (--i);}
0 0
- 51学习库(5)--HC_SR04超声波模块
- 超声波模块学习
- 51单片机超声波测距模块
- 超声波模块的51程序
- 超声波模块
- 超声波模块
- 51单片机之超声波模块的使用
- CT107D蓝桥杯超声波模块(6)
- 单片机超声波测距模块学习笔记_发射端学习
- 树莓派 GPIO学习笔记(2)--HC-SR04超声波模块
- 51单片机驱动HC-SR04超声波测距模块(LED1602显示结果)
- 超声波模块SRF05
- 超声波模块测试
- 树莓派+超声波模块
- 基于51单片机超声波测距的学习
- Arudino学习(一)读取超声波数值
- HC-SR04 超声波测距模块 51串口读取代码
- HC-SR04 超声波测距模块 51串口读取代码
- Hadoop基础教程-第3章 HDFS:分布式文件系统(3.1 HDFS概述)
- 微信小程序之用户数据解密
- 17年黑龙江ACM省赛总结
- JavaScript核心基础语法
- pvanet训练网络时的一些小技巧
- 51学习库(5)--HC_SR04超声波模块
- 数据结构之二分查找
- 带地形惩罚和碰撞半径的A*寻路算法
- mplayer中设置执行变量控制idct执行行数
- 浅谈慕课网React入门课程笔记(三)
- OpenJudge 1.11-09膨胀的木棍——题解
- bzoj1783 [Usaco2010 Jan]Taking Turns
- poj1426
- python 读写 excel