超声波模块SRF05
发布日期:2021-06-30 12:00:10
浏览次数:2
分类:技术文章
本文共 4106 字,大约阅读时间需要 13 分钟。
纯干货:
超声波代码:
//// 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#include __CONFIG(0x3b32); #define trig RB0#define echo RB1void clrscn(void); // prototypesvoid cursor(char pos);void print(char *p);void setup(void);unsigned int get_srf04(void);char s[21]; // buffer used to hold text to printvoid 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 }
转载地址:https://jackzhang.blog.csdn.net/article/details/38115375 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 05时40分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
maven 多层次pom 新引入包,编译成功,还是没有将包引入到本地
2019-04-30
leetCode2 两数相加
2019-04-30
【工具使用】使用pip与conda安装、更新与卸载Pytorch和torchvision
2019-04-30
【工具使用】Google免费云环境Colaboratory使用
2019-04-30
【深度学习笔记】卷积层,全连接层,池化层的相关输出参数计算
2019-04-30
【NLP学习笔记】文本分类概述
2019-04-30
【深度学习笔记】文本分类
2019-04-30
【转载】炼丹实验室:深度学习网络调参技巧
2019-04-30
【论文阅读笔记】文本分类论文汇总
2019-04-30
【NLP学习笔记】One-hot encoding:独热编码
2019-04-30
【工具使用】CSDN编辑器markdown字体、颜色与字号的设置
2019-04-30
【深度学习笔记】卷积核weights参数shape说明
2019-04-30
【深度学习笔记】Tensorflow中dense(全连接层)各项参数
2019-04-30
【Python学习笔记】切片x[::2] 理解
2019-04-30
【Python学习笔记】lambda表达式
2019-04-30