历史上的今天
返回首页

历史上的今天

今天是:2024年08月31日(星期六)

2021年08月31日 | 51单片机-模拟倒车雷达报警

2021-08-31 来源:eefocus

1.题目要求


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


2.main.c测试代码


#include  

#include //详见第六章第8讲

#include     //详见第八章第11讲

#include

 

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; 

}


推荐阅读

史海拾趣

CLAIREX公司的发展小趣事

Clairex Technologies成立于1993年,当时的市场上,航空电子部件的供应存在着严重的质量问题。老David Catter和一位商业伙伴发现了这一商机,他们提议改进并供应财富500强公司通用航空航空电子部门所需的零件。然而,创业的道路并非一帆风顺。他们面临着资金短缺、技术难题以及市场竞争激烈等多重挑战。但凭借对技术的深入理解和不懈的努力,Clairex团队成功设计出了一款性能卓越的光电导体,并在得克萨斯州普莱诺开始了生产。这一创新产品很快便赢得了市场的认可,为Clairex的发展奠定了坚实的基础。

BERGQUIST公司的发展小趣事

为了进一步提升竞争力,BERGQUIST公司开始寻求产业链整合和战略合作。公司与上游原材料供应商建立了长期稳定的合作关系,确保原材料的质量和供应稳定性。同时,公司还与下游电子设备制造商开展深度合作,共同研发定制化的热管理解决方案。这些举措不仅降低了公司的运营成本,还提高了产品的市场竞争力。

Alps Alpine Co Ltd公司的发展小趣事

随着电子设备的不断发展和性能提升,热管理问题变得日益突出。BERGQUIST公司凭借其在热管理领域的深厚积累,成功研发出了一系列具有革命性的热管理产品。这些产品不仅有效解决了电子设备散热问题,还大大提高了设备的稳定性和可靠性。其中,BERGQUIST的柔性石墨散热片凭借其优异的导热性能和良好的适应性,在市场上获得了广泛认可。

Akustica(Bosch)公司的发展小趣事

随着产品技术的不断成熟和市场的逐步认可,BERGQUIST公司开始积极拓展市场。公司不仅在国内市场取得了显著成绩,还积极开拓国际市场,与众多知名电子企业建立了长期合作关系。通过不断提升产品质量和服务水平,BERGQUIST成功树立起了自己的品牌形象,成为热管理领域的佼佼者。

DMC Tools公司的发展小趣事

DMC Tools公司深知质量是企业的生命线。因此,公司建立了严格的质量管控体系,从原材料采购到生产加工、再到产品检验,每一个环节都严格把关。这种对质量的执着追求使得DMC Tools公司的产品赢得了客户的广泛信任。许多知名电子企业都选择DMC Tools公司作为他们的长期合作伙伴,这也为公司的发展奠定了坚实的基础。

Electric Imp Inc.公司的发展小趣事

为了进一步提升品牌影响力和市场份额,Electric Imp Inc.公司开始实施国际化战略。公司先后在北美、欧洲、亚洲等地设立了研发中心和分支机构,以便更好地了解当地市场需求和技术趋势。同时,公司还积极参加国际展览、研讨会等活动,与全球同行交流经验、分享技术。这些努力使得公司的国际化水平不断提高。

问答坊 | AI 解惑

简易数控直流电源

简易数控直流电源  94年的题, 谁会做啊, 我想了解以下他的原理几过程. 我的邮箱,cf2928@163.com 要不谁告诉我那有我去下也行,谢了.…

查看全部问答>

【分享】mini2440开发板实现国际象棋人机对弈

前段时间买了2440开发板也没怎么搞,惭愧:$ 最近没啥其它事情就好好啃啃吧,哎……没什么基础啊,先欣赏下别人的东西吧 【mini2440开发板实现国际象棋人机对弈 】 我在机子上跑了一下,好像不太能跟电脑对弈啊,不知道哪个地方还有问题 ...…

查看全部问答>

传输线和反射的经典文章

传输线和反射的经典文章…

查看全部问答>

U盘多盘符的问题

我在一个嵌入式系统中,主机在GET MAX LUN我已经返回01,但是主机并未显示2个盘符.仅仅出现了一个盘符 还需要做哪方面的工作…

查看全部问答>

VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包?

VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包? ATE AT+CMGF=0 AT+CIMI   AT+CIMI获得IMSI  IMSI 国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别 ...…

查看全部问答>

DM642 编码器初始化

 /*进行SAA7121H的初始化*/ GPIO_RSET(GPVAL,0x0); addrI2C = 0xB8 >>1; /*选择第0路的I2C的地址*/ /*将第0路的视频输入口的数据口设为高阻状态,   使能SCLK,将第27脚设为输入*/ _IIC_write(hSeeddm642i2 ...…

查看全部问答>

2812 flash不能烧写

问题是这样的:我用flash烧写了一个控制电机的程序,不能运行,就把代码改了一下,再进行烧程序的时候就烧不进去啦,我也没有动“lock”和密码(在flash烧写的时候一直很小心的),怎么会锁住呢?很是不解。请EEWORLD老师和各位高手解答一下,谢谢 ...…

查看全部问答>

C题智能小车群

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 109197413  …

查看全部问答>

恳请各位高手指点迷津,替小弟检查一下错误

各位高手,小弟近日在学习关于修改BSP的内容,有一种想法,设置多个引导行,然后在系统启动时按照需要选择相应的引导顺序,然后将config.h中的引导行 #define DEFAULT_BOOT_LINE \\ \"fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=ta ...…

查看全部问答>

.一个初中生是如何成为嵌入式工程师的

我是一个只有初中毕业没有读过多少书的人从小就爱好无线电记得很小的时候当通讯兵的父亲带回来几本电子方面的书籍从此就迷上了无线电那种痴迷程度决不亚于现在的小孩迷恋游戏机至今仍然清楚的记得曾经因为装成功一台6管收音机而兴奋的几天几夜没睡 ...…

查看全部问答>