4.模拟倒车雷达报警

发布日期:2020-12-26 09:09:48 来源:网络转载

1.题目要求

我们在第九章第3讲的例程基础上,实现用超声波模块模拟倒车雷达报警的功能,当障碍物距离超声波模块小于等于10cm左右我们就用蜂鸣器鸣叫产生报警,大于10cm就不报警。代码上添加的程序量比较少,我们只是把定时时间改为200微秒好使蜂鸣器鸣叫的比较尖锐。


2.main.c测试代码

#include <reg52.h> 
#include <function.h> //详见第六章第8讲
#include <timer.h>    //详见第八章第11讲
#include <intrins.h>

sbit TRIG = P2^0; 
sbit ECHO = P2^1; 
u8 FLAG=0,BEEP_FLAG=0;
void delay_20us() 
{
    _nop_();_nop_();_nop_();_nop_();_nop_(); 
    _nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();
}
  
void main()
{  
    u16 time_data,CM_data;
    TRIG = 0; 
    ECHO = 0;
  
    LED_Init();        //初始化LED硬件模块
    EA = 1;            //闭合总中断开关
    TIM1_Init(100,34); //定时100us,这是为了使蜂鸣器鸣叫的比较尖锐,34是微调使定时精度更高,每次微调都由中断函数里的内容而决定
  
    TMOD &= 0xF0;
    TMOD |= 0x01; 
    ET0  = 1;
    while(1)
    {   
        TH0  = 0; 
        TL0  = 0; 
        FLAG = 0;      //上次如果是超出测量范围,FLAG被置1,这次再测就要清0
   
        //启动发射声波
        TRIG = 1;    
        delay_20us();
        TRIG = 0;
   
        while(!ECHO);  //声波开始发射,ECHO引脚拉高退出这个循环
        TR0 = 1;       //打开定时器进行计数 
        while(ECHO);   //收到声波返回来的信号引脚就拉低,退出这个循环,如果定时器溢出,就会进入中断函数执行“FLAG=1;”也就是距离太远,一直没有收到反射回来的信号
        TR0 = 0;       //关闭定时器结束计数
   
        time_data =TH0;
        time_data=(time_data<<8)|TL0;                //把两个八位的寄存器里的值组成一个16位变量的值,也就是定时器计数值
        CM_data = time_data/54;                      //得到厘米的表达式
   
        if(FLAG==1){ShowNumber(999); delay_ms(20);}  //超出测量范围显示999,延时为的是不让数码管频繁在两个数的偏差之间变化太频繁   
        else {ShowNumber(CM_data); delay_ms(20);}
   
        if(CM_data<=10)BEEP_FLAG=1;                  //测距小于等于10CM蜂鸣器鸣叫
        else BEEP_FLAG=0;
    }
}
 
void TIM1_IRQHandler() interrupt 3
{
    static u8 i=0;
    TH1 = T1RH;                //重新加载重载值
    TL1 = T1RL;
  
    i++;
    if(i>=5){i=0; SEG_Scan();} //间隔1ms刷新数码管
  
    if(BEEP_FLAG==1)BEEP=!BEEP;
}
  
void TIM0_IRQHandler()  interrupt 1   
{
    FLAG=1; 
}
关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。