超声波模块学习
来源:互联网 发布:java与c# 编辑:程序博客网 时间:2024/05/16 18:33
超声波模块学习第一阶段
1,了解了HC-SR04超声波模块的工作原理,由单片机提供一个30us左右的高电平,模块的Trig端会自动产生8个40KHZ的矩形脉冲波,Echo端接收到信号后后会产生高电平,用定时器记录所需时间,从而可以计算出距离。
2,如何用信号发生器,电源和示波器检测超声波模块的好坏。通过示波器观察Echo端产生的波的周期,计算出距离来与实际情况比较,来判断超声波模块的好坏。
3,理解了电脑与单片机(全双工通信)之间的串口通信,通过设置波特率与电脑建立联系,通过定时器来设置波特率
2017/12/12
4.超声波模块的功能已经基本实现,能够测距并在LCD上显示,也能够设置报警阈值,当距离过近的时候,蜂鸣器蜂鸣。超声波测距程序的基本理解,超声波检测函数,给定义的trig端口大约60us的高电平,Echo端接收到信号后令TR0=1打开定时器记时当echo端变低电平时就关闭定时器,所用的时间就是超声波所测距离的两倍,写一个计算函数,s=v*t/2,算出距离,将距离作为参数传出,传入到警报函数通过if语句判断,当距离过近,则蜂鸣器蜂鸣。这几天调试出现的主要问题时,当距离逐渐变大时,显示没有问题,但是当距离由远变近时,之前的数据无法清除,导致无法准确显示,通过一步步分析得知,是LCD显示完之后没有即时清除数据。现在能够正常使用,下一步建立单片机与电脑的串口通信。
/****************************************************************/
又在原基础的程序上加了串口通信,实现了能够在串口助手界面上实时显示测量数据。
1.要想使用好串口通信,首先要设置只根据晶振设置好正确的波特率,调好正确的初值。
2.串口通信在使用的时候主要分为两个方面,一个是由电脑向单片机传输数据,这里需要用到串口中断,来接受收数据
这次的超声波测距数据在单片机内部计算得到,则可直接传送到输出缓存区,不需要再设置串口中断了,需要你将算得的距离传给SBUF即可。
代码如下:
#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit trig=P2^3;sbit echo=P2^4;sbit rs=P2^6;sbit rw=P2^5;sbit e=P2^7;sbit beep=P1^5;uchar code table[]={0,0,0,0,7,8,9,0,4,5,6,0,1,2,3,0};uchar code table1[]={0,0x3d-0x30,0x01-0x30,0x2f-0x30,7,8,9,0x2a-0x30,4,5,6,0x2d-0x30,1,2,3,0x2b-0x30};uchar code table2[]={"rorre "};uint s1,s;uint keyvalue,a=0,key_data,t;uint s_data[10];/******ÑÓʱº¯Êý******/void delay(uchar a){uchar i;while(a--){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_(); } }}/*****lcdÅÐ溯Êý*****/void lcd_mang(){rs=0;rw=1;e=1;_nop_();_nop_();_nop_();_nop_();while(P0&0x80);//½á¹ûÊÇ1£¬±íʾæµִÐÐwhile(1)ËÀÑ»·£¬Îª0£¬±íʾ²»Ã¦e=0;}/******д³ÌÐòдÃüÁÊý*********/void write_lcd(uchar com,uchar i){lcd_mang();e=0;rs=i;rw=0;_nop_();_nop_();e=1;_nop_();_nop_();P0=com;_nop_();_nop_();_nop_();_nop_();e=0;}/*****************lcd³õʼ»¯******************/void lcd_init(){write_lcd(0x38,0);delay(1);write_lcd(0x08,0);delay(1);write_lcd(0x01,0);//ÇåÆÁdelay(1);write_lcd(0x0c,0);delay(1);}/************ÏÔʾº¯Êý****************/void xianshi(uint x){if(x==0){write_lcd(0x30,1);}while(x!=0){ write_lcd(0x30+x%10,1); x=x/10;}x=0;}/********´®¿Ú³õʼ»¯**********/void UsartInit(){SCON=0X50;//ÉèÖÃΪ¹¤×÷·½Ê½1TMOD=0X21;//ÉèÖüÆÊýÆ÷¹¤×÷·½Ê½2PCON=0X80;//²¨ÌØÂʼӱ¶TH1=0XF3;//¼ÆÊýÆ÷³õʼֵÉèÖã¬×¢ÒⲨÌØÂÊÊÇ4800µÄTL1=0XF3;//ES=1;//´ò¿ª½ÓÊÕÖжÏ//EA=1;//´ò¿ª×ÜÖжÏTR1=1;//´ò¿ª¼ÆÊýÆ÷}/************/void Init(){TMOD=0X21;EA=1;ET0=1;TH0=0;TL0=0;}/*******´®¿ÚͨÐÅÖжÏ********///void Usart() interrupt 4//{//s=SBUF;//³öÈ¥½ÓÊÕµ½µÄÊý¾Ý//RI = 0;//Çå³ý½ÓÊÕÖжϱê־λ//SBUF=s;//½«½ÓÊÕµ½µÄÊý¾Ý·ÅÈëµ½·¢ËͼĴæÆ÷//while(!TI); //µÈ´ý·¢ËÍÊý¾ÝÍê³É//TI=0; //Çå³ý·¢ËÍÍê³É±ê־λ//}/*******³¬Éù²¨¼ì²â********/void check(){trig=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_();trig=0;}/******¼ÆËã¾àÀë*******/uint count(){float time;while(!echo);TR0=1;while(echo);TR0=0;time=TH0*256+TL0;TH0=0;TL0=0;s=(time*1.7)/100;//µ¥Î»cms_data[t++]=s;if(t==9){t=0;}return s;}/*******°´¼üÉèÖþ¯±¨¾àÀë*******/uint keydown(){uint temp;char a=0;int flag_key=0;P1=0x0f;if(P1!=0x0f){delay(10);if(P1!=0x0f){P1=0x0f;temp=P1;switch(temp){case(0X07):keyvalue=0;break;case(0X0b):keyvalue=1;break;case(0X0d): keyvalue=2;break;case(0X0e):keyvalue=3;break;}P1=0XF0;temp=P1;switch(temp){case(0X70):keyvalue=keyvalue;flag_key=1;break;case(0Xb0):keyvalue=keyvalue+4;flag_key=1;break;case(0Xd0): keyvalue=keyvalue+8;flag_key=1;break;case(0Xe0):keyvalue=keyvalue+12;flag_key=1;break;}while((a<50)&&(P1!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â{delay(10);a++;}}}if(flag_key==1) return keyvalue;else return 16;}/*********/uint jiance(uchar keyvalu){uint i,d;if(keyvalu==0||keyvalu==4||keyvalu==5||keyvalu==6||keyvalu==8||keyvalu==9||keyvalu==10||keyvalu==12||keyvalu==13||keyvalu==14){a=a*10+table[keyvalu];i=table1[keyvalu];xianshi(i);}else if(keyvalu==1||keyvalu==3||keyvalu==7||keyvalu==11||keyvalu==15){ for(d=0;d<16;d++){ write_lcd(table2[d],1); delay(1);}}else if(keyvalu==2){write_lcd(0x01,0);a=0;}return a;}/******************************//**°²È«¾àÀ뾯±¨**/void jinbao(uint ss){key_data=keydown();if(key_data!=16){s1=jiance(key_data);}write_lcd(0x80+0x4f,0);write_lcd(0x04,0);xianshi(s1);if(ss<s1)beep=1;elsebeep=0;}/**********Ö÷º¯Êý************/void main(){Init();lcd_init();UsartInit();while(1){check();count();write_lcd(0x01,0);delay(1);write_lcd(0x80+0x0f,0); write_lcd(0x04,0); xianshi(s);jinbao(s);delay(50);SBUF=s_data[t];//½«½ÓÊÕµ½µÄÊý¾Ý·ÅÈëµ½·¢ËͼĴæÆ÷ while(!TI); //µÈ´ý·¢ËÍÊý¾ÝÍê³É TI=0; //Çå³ý·¢ËÍÍê³É±ê־λ}}12/22
- 超声波模块学习
- 超声波模块
- 超声波模块
- 单片机超声波测距模块学习笔记_发射端学习
- 树莓派 GPIO学习笔记(2)--HC-SR04超声波模块
- 51学习库(5)--HC_SR04超声波模块
- 超声波模块SRF05
- 超声波模块测试
- 树莓派+超声波模块
- 51单片机超声波测距模块
- 【Arduino】超声波模块(HC-SR04)
- arduino 超声波 HC-SR04模块
- keil 配置超声波模块注意事项
- 超声波模块的51程序
- 树莓派蜂鸣器+超声波测距模块
- 蓝桥杯板子 超声波模块使用
- 【蓝桥杯单片机组】超声波模块
- HC-SR04超声波模块传感器
- 循环结构
- WiFi和热点开发
- Mac:xampp 无法启动apache问题
- java 内存分配与回收
- 跨部门的高效沟通与协作
- 超声波模块学习
- 获取RequestMappingHandlerMapping中的URL映射
- make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules中的M选项
- php 怎么实现弱类型
- 从云办公感受到的科学技术为我们带来的便利
- Centos 7.2 安装 Mysql 5.7.13
- javascript中的原型/对象
- hdu 1548 A strange lift
- Ant编译多个依赖工程jar、war包