zoukankan      html  css  js  c++  java
  • [51单片机] HC-SR04超声波测距仪 基础代码

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

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

    >_<:代码:

      1 /***********************************************************************************************************/
      2 //HC-SR04 超声波测距模块 DEMO 程序
      3 //晶振:11。0592
      4 //接线:模块TRIG接 P1.2  ECH0 接P1.1
      5 //串口波特率9600
      6 /***********************************************************************************************************/      
      7 #include   <AT89X51.H>
      8 #include   <intrins.h>
      9 #include   <STDIO.H>
     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("-----
    "); 
     34     }    
     35     printf("S=%f
    ",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);        //100MS
    108     }
    109 }              
  • 相关阅读:
    jQuery初级篇
    DOM初级篇
    CSS基础篇
    javascript 初级篇
    HTML 基础篇
    Oracle文章中常用数据表的描述
    Oracle视图基础
    Oracle序列简单应用
    Oracle关联查询关于left/right join的那点事
    赋值和算术运算符
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3889372.html
Copyright © 2011-2022 走看看