////////////////////////////////////////////////////////////////////////////////

//

//     PIC16F877 + HY-SRF05 + LCD03 example

//     Written October 2008 , using HITECH PIC16 compiler

// 

// Note - assumes a 20MHz crystal, which is 5MHz timer clock

// A 1:4 prescaler is used to give a 1.25MHz timer count (0.8uS per tick)

//

//     This code is Freeware - Use it for any purpose you like.

//

///////////////////////////////////////////////////////////////////////////////









#include <pic.h>

#include <stdio.h>

 

__CONFIG(0x3b32);





#define trig RB0

#define echo RB1





void clrscn(void); // prototypes

void cursor(char pos);

void print(char *p);

void setup(void);

unsigned int get_srf04(void);





char s[21]; // buffer used to hold text to print





void main(void)

{

unsigned int range;





setup();
// sets up the PIC16F877 I2C port

clrscn();
// clears the LCD03 disply

cursor(2);
// sets cursor to 1st row of LCD03

sprintf(s,"SRF04 Ranger Test");
// text, printed into our buffer

print(s);
// send it to the LCD03





while(1) {
// loop forever

range = get_srf04();
// get range from srf04 (round trip flight time in 0.8uS units)

cursor(24);
// sets cursor to 2nd row of LCD03

sprintf(s,"Range = %dcm  ", range/72);
// convert to cm

print(s);
// send it to the LCD03

cursor(44);
// sets cursor to 3rd row of LCD03

sprintf(s,"Range = %dinch  ", range/185);
// convert to inches

print(s);
// send it to the LCD03





TMR1H = 0;
// 52mS delay - this is so that the SRF04 ranging is not too rapid

TMR1L = 0;
// and the previous pulse has faded away before we start the next one

T1CON = 0x21;
// 1:4 prescale and running

TMR1IF = 0;

while(!TMR1IF);
// wait for delay time

TMR1ON = 0;
// stop timer

}

}





unsigned int get_srf04(void)

{

TMR1H = 0xff;
// prepare timer for 10uS pulse

TMR1L = -14;

T1CON = 0x21;
// 1:4 prescale and running

TMR1IF = 0;


trig = 1;
// start trigger pulse

while(!TMR1IF);
// wait 10uS

trig = 0;
// end trigger pulse

TMR1ON = 0;
// stop timer



TMR1H = 0;
// prepare timer to measure echo pulse

TMR1L = 0;

T1CON = 0x20;
// 1:4 prescale but not running yet

TMR1IF = 0;

while(!echo && !TMR1IF);
// wait for echo pulse to start (go high)

TMR1ON = 1;
// start timer to measure pulse

while(echo && !TMR1IF);
// wait for echo pulse to stop (go low)

TMR1ON = 0;
// stop timer

return (TMR1H<<8)+TMR1L;
// TMR1H:TMR1L contains flight time of the pulse in 0.8uS units

}





void clrscn(void)

{

SEN = 1;
// send start bit

while(SEN);
// and wait for it to clear





SSPIF = 0;

SSPBUF = 0xc6;
// LCD02 I2C address

while(!SSPIF);
// wait for interrupt

SSPIF = 0;
// then clear it.





SSPBUF = 0;
// address of register to write to 

while(!SSPIF);
// 

SSPIF = 0;
//





SSPBUF = 12;
// clear screen 

while(!SSPIF);
// 

SSPIF = 0;
//





SSPBUF = 4;
// cursor off 

while(!SSPIF);
// 

SSPIF = 0;
//

 

PEN = 1;
// send stop bit

while(PEN);
//

}







void cursor(char pos)

{

SEN = 1;
// send start bit

while(SEN);
// and wait for it to clear





SSPIF = 0;

SSPBUF = 0xc6;
// LCD02 I2C address

while(!SSPIF);
// wait for interrupt

SSPIF = 0;
// then clear it.





SSPBUF = 0;
// address of register to write to 

while(!SSPIF);
// 

SSPIF = 0;
//





SSPBUF = 2;
// set cursor 

while(!SSPIF);
// 

SSPIF = 0;
//

SSPBUF = pos;
//  

while(!SSPIF);
// 

SSPIF = 0;
//

 

PEN = 1;
// send stop bit

while(PEN);
//

}







void print(char *p)

{

SEN = 1;
// send start bit

while(SEN);
// and wait for it to clear





SSPIF = 0;

SSPBUF = 0xc6;
// LCD02 I2C address

while(!SSPIF);
// wait for interrupt

SSPIF = 0;
// then clear it.





SSPBUF = 0;
// address of register to write to 

while(!SSPIF);
// 

SSPIF = 0;
//





while(*p) {

SSPBUF = *p++;
// write the data 

while(!SSPIF);
// 

SSPIF = 0;
// 

}





PEN = 1;
// send stop bit

while(PEN);
//

}









void setup(void)

{

unsigned long x;





TRISB = 0xfe;
// RB0 (trig) is output

PORTB = 0xfe;
// and starts low





TRISC = 0xff;

PORTC = 0xff;





SSPSTAT = 0x80;

SSPCON = 0x38;

SSPCON2 = 0x00;

SSPADD = 50;
// SCL = 91khz with 20Mhz Osc





for(x=0; x<300000L; x++);
// wait for LCD03 to initialise

}

超声波模块SRF05的更多相关文章

  1. 关于HC04超声波模块测距的思考(51版)

    之前写过一篇HC04的使用文章,当时是使用stm32来实现的,原文链接. 后来又多次使用51来驱动这个模块,有时候有测距需要,使用了几次,总是感觉我上次那个程序不是很好, 所以这次对它进行了改进.虽然 ...

  2. 树莓派控制HC-SR04超声波模块测距(新手向+C语言向)

    因为作业要求使用c语言代码,这里先附上一段摘自网上的代码 感谢KalaerSun的c语言代码,摘自https://blog.csdn.net/qq_25247589/article/details/6 ...

  3. [TPYBoard - Micropython之会python就能做硬件 8] 学习使用超声波模块制作避障小车

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

  4. stm32驱动超声波模块

    下面是关于stm32驱动超声波模块的一段代码,有需要的朋友可以复制参考,希望对大家能够有所帮助和启发. #define HCSR04_PORT GPIOB #define HCSR04_CLK RCC ...

  5. 超声波模块HC-SR04简介以及编程

    HC-SR04 一.主要参数1:使用电压:DC-5V2:静态电流:小于2mA3:电平输出:高5V4:电平输出:底0V5:感应角度:不大于15度6:探测距离:2cm-450cm7:高精度 可达0.2cm ...

  6. 【Arduino】超声波模块(HC-SR04)

    还好,这个模块有现成的库能够用: https://github.com/bosgood/arduino-playground/tree/master/lib/HCSR04Ultrasonic 下面仅仅 ...

  7. [自娱自乐] 2、超声波测距模块DIY笔记(二)

    前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...

  8. 基于STM32F103ZET6 HC_SR04超声波测距模块

    这是最后的实验现象,改变不同的角度即可测得距离 板子 PZ6806L 超声波模块 HC_SR04 HC_SR04模块讲解 通过该超声波模块说明书,可明白供电需VCC 5V  还需GND  ECHO(回 ...

  9. loto示波器实践——超声波测距模块

    我们这里用到的超声波测距模块,一般是用于arduino智能小车自动避障的.经常见到的应用是使用单片机或者stm32和这种模块结合进行开发的. 我们使用LOTO示波器可以更直观和快速的看到超声波测量距离 ...

随机推荐

  1. ArrayList集合--C#

    static void Main(string[] args) { //实例化出一个集合对象 ArrayList list = new ArrayList(); /*添加*/ //--添加单个元素 l ...

  2. SUSAN检测算子

    USAN区域(核同值区):和核像素的灰度相同会相信的模板像素的区域. 利用这个区域的尺寸.重心.二阶矩等可以帮助检测图像的边缘和角点.利用USAN的面积作为特征可以起到增强边缘和角点的效果. 该方法不 ...

  3. Oracle时间戳

    查询某一具体时间某张表的数据,可以用时间戳进行查询. 例如: SELECT * FROM sac14 AS OF TIMESTAMP to_date('201508310930','yyyymmddh ...

  4. Python 第七篇:socket编程

    一:socket基础: 1.1:Socket基础: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模 ...

  5. java--线程的睡眠sleep()

    package MyTest; public class Demo1 extends Thread { public void run() { loop(); } public void loop() ...

  6. 演练2-2:Guestbook示例应用程序

    为使Guestbook应用程序有用,我们需要为用户提供一些提交数据的方式,将这些数据存储起来,以便稍后进行查看.为了达到这一目标,我们打算对应用程序添加一个数据库,将其作为该留言簿的后台存储库. 1. ...

  7. hdu1172猜数字

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1172 题目 猜数字 Time Limit: 20000/10000 MS (Java/Others) ...

  8. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  9. GAE+bottle+jinja2+beaker快速开发demo - Python,GAE - language - ITeye论坛

    GAE+bottle+jinja2+beaker快速开发demo - Python,GAE - language - ITeye论坛     :GAE+bottle+jinja2+beaker快速开发 ...

  10. PHP高级编程SPL

    这几天,我在学习PHP语言中的SPL. 这个东西应该属于PHP中的高级内容,看上去非常复杂,可是非常实用,所以我做了长篇笔记.不然记不住,以后要用的时候,还是要从头学起. 因为这是供自己參考的笔记,不 ...