历史上的今天
今天是:2024年08月31日(星期六)
2021年08月31日 | 51单片机-模拟倒车雷达报警
2021-08-31 来源:eefocus
1.题目要求
我们在第九章第3讲的例程基础上,实现用超声波模块模拟倒车雷达报警的功能,当障碍物距离超声波模块小于等于10cm左右我们就用蜂鸣器鸣叫产生报警,大于10cm就不报警。代码上添加的程序量比较少,我们只是把定时时间改为200微秒好使蜂鸣器鸣叫的比较尖锐。
2.main.c测试代码
#include #include #include #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; }
上一篇:51单片机-温度传感器与串口
下一篇:51单片机-再次熟悉串口
史海拾趣
|
前段时间买了2440开发板也没怎么搞,惭愧:$ 最近没啥其它事情就好好啃啃吧,哎……没什么基础啊,先欣赏下别人的东西吧 【mini2440开发板实现国际象棋人机对弈 】 我在机子上跑了一下,好像不太能跟电脑对弈啊,不知道哪个地方还有问题 ...… 查看全部问答> |
|
VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包? VC如何发彩信,已经实现ATDT*99***1#这一步了,下一步应该是什么,内容打包?如果打包? ATE AT+CMGF=0 AT+CIMI AT+CIMI获得IMSI IMSI 国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别 ...… 查看全部问答> |
|
/*进行SAA7121H的初始化*/ GPIO_RSET(GPVAL,0x0); addrI2C = 0xB8 >>1; /*选择第0路的I2C的地址*/ /*将第0路的视频输入口的数据口设为高阻状态, 使能SCLK,将第27脚设为输入*/ _IIC_write(hSeeddm642i2 ...… 查看全部问答> |
|
问题是这样的:我用flash烧写了一个控制电机的程序,不能运行,就把代码改了一下,再进行烧程序的时候就烧不进去啦,我也没有动“lock”和密码(在flash烧写的时候一直很小心的),怎么会锁住呢?很是不解。请EEWORLD老师和各位高手解答一下,谢谢 ...… 查看全部问答> |
|
各位高手,小弟近日在学习关于修改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管收音机而兴奋的几天几夜没睡 ...… 查看全部问答> |




