博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[51单片机] HC-SR04超声波测距仪 基础代码
阅读量:5231 次
发布时间:2019-06-14

本文共 2797 字,大约阅读时间需要 9 分钟。

 

>_<:超声波测距仪模块:

>_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子:

>_<:代码:

1 /***********************************************************************************************************/  2 //HC-SR04 超声波测距模块 DEMO 程序  3 //晶振:11。0592  4 //接线:模块TRIG接 P1.2  ECH0 接P1.1  5 //串口波特率9600  6 /***********************************************************************************************************/        7 #include   
8 #include
9 #include
10 11 #define uchar unsigned char 12 #define uint unsigned int 13 #define RX P1_1 14 #define TX P1_2 15 16 17 unsigned int time=0; 18 unsigned int timer=0; 19 float S=0; 20 bit flag =0; 21 22 23 /********************************************************/ 24 void Conut(void) 25 { 26 time=TH0*256+TL0; 27 TH0=0; 28 TL0=0; 29 S=(time*1.87)/100; //算出来是CM 30 if(flag==1) //超出测量 31 { 32 flag=0; 33 printf("-----\n"); 34 } 35 printf("S=%f\n",S); 36 } 37 /********************************************************/ 38 void delayms(unsigned int ms) 39 { 40 unsigned char i=100,j; 41 for(;ms;ms--) 42 { 43 while(--i) 44 { 45 j=10; 46 while(--j); 47 } 48 } 49 } 50 /********************************************************/ 51 void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 52 { 53 flag=1; //中断溢出标志 54 } 55 /********************************************************/ 56 void StartModule() //T1中断用来扫描数码管和计800MS启动模块 57 { 58 TX=1; //800MS 启动一次模块 59 _nop_(); 60 _nop_(); 61 _nop_(); 62 _nop_(); 63 _nop_(); 64 _nop_(); 65 _nop_(); 66 _nop_(); 67 _nop_(); 68 _nop_(); 69 _nop_(); 70 _nop_(); 71 _nop_(); 72 _nop_(); 73 _nop_(); 74 _nop_(); 75 _nop_(); 76 _nop_(); 77 _nop_(); 78 _nop_(); 79 _nop_(); 80 TX=0; 81 } 82 /********************************************************/ 83 void main(void) 84 { 85 TMOD=0x21; //设T0为方式1,GATE=1; 86 SCON=0x50; 87 TH1=0xFD; 88 TL1=0xFD; 89 TH0=0; 90 TL0=0; 91 TR0=1; 92 ET0=1; //允许T0中断 93 TR1=1; //开启定时器 94 TI=1; 95 96 EA=1; //开启总中断 97 98 99 while(1)100 {101 StartModule();102 while(!RX); //当RX为零时等待103 TR0=1; //开启计数104 while(RX); //当RX为1计数并等待105 TR0=0; //关闭计数106 Conut(); //计算107 delayms(10); //100MS108 }109 }

 

转载于:https://www.cnblogs.com/zjutlitao/p/3889372.html

你可能感兴趣的文章
【android】安卓的权限提示及版本相关
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
PHP 导出 Excell
查看>>
Java基础教程——网络基础知识
查看>>
自己到底要的是什么
查看>>
this 指向
查看>>
Kruskal基础最小生成树
查看>>
BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
[WebMatrix] 如何将SQL Compact 4.0 移转至SQL Server 2008 Express
查看>>
Java内部类详解
查看>>
python-基础
查看>>
17 案例
查看>>
【BZOJ 1221】 [HNOI2001] 软件开发
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
SQL字符型转日期型
查看>>
Java程序设计教程(第2版)阅读总结
查看>>
图论-次短路求法
查看>>