微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 HCSR04超声波测距仪 基础代码

51单片机 HCSR04超声波测距仪 基础代码

时间:11-20 来源:互联网 点击:
>_<:超声波测距仪模块:

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

>_<:代码:

1 /***********************************************************************************************************/2 //HC-SR04 超声波测距模块 DEMO 程序3 //晶振:11。05924 //接线:模块TRIG接 P1.2  ECH0 接P1.15 //串口波特率96006 /***********************************************************************************************************/      7 #include   8 #include   9 #include   10 11 #define uchar unsigned  char12 #define uint  unsigned   int  13 #define  RX  P1_114 #define  TX  P1_215 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;     //算出来是CM30     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 }              

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top