|
本帖最后由 jingque 于 2023-12-20 14:16 编辑
超声波传感器模块讲解:
硬件电路连接:Trig连接P2^1 Echo连接P2^0 VCC连接5V GND接地
HC-SR04超声波模块可提供2cm~400cm的距离感测功能,测量精度可以达到3mm。模块包括超声波发射器,接收器与控制电路。
基本工作原理:
采用Trig引脚触发,给至少10us的高电平脉冲信号,模块自动发送8个40kHz的方波,自动检测是否有信号返回
有信号返回,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间
可以通过定时器算出。距离=(高电平脉冲时间*340)/2。
如果出现开始时候正常测量,后续数据不发生变化,可以改变迪文屏电流大小 PORTDRV = 0x02;//驱动电流为16mA
UI设计(附在源码文件夹中):
导入背景图,生成32.icl文件,控件添加数据变量。
设置地址变量2000x(0000-0x0FFF是系统变量地址,用户可以使用的变量地址范围是0x1000-0xFFFF。变量图标控件占用1个变量地址。)
保存与生成。
最后利用SD看烧录DWIN_SET文件夹。
部分代码讲解:
- extern u16 val; //外部变量用来存储距离值
- sbit tro=P2^1;
- sbit echo =P2^0;
- //计算函数
- unsigned int chaobo_count();
- //起始信号
- void chaobostart();
- //定时器0初始化
- void time0Init();
- //获取距离
- void Get_Val(void);
- 主函数:
- void main(void)
- {
- time0Init(); //超声波定时器初始化
- sys_init();//系统初始化
- while(1)
- {
- Get_Val(); //获取超声波距离
- if(val) //如果数据有效
- {
- sys_write_vp(START_WIN_TEMP_VP,(u8*)&val,1);//将数据显示在控件
- }
- sys_delay_about_ms(300); //延时300ms
- }
- }
- chaoshengbo.c文件
- //超声波起始信号
- void chaobostart()
- {
- tro=1;
- sys_delay_about_us(20); //高电平触发20us
- tro=0;
- }
- //超声波测距初始化
- unsigned int chaobo_count()
- {
- unsigned int time=0;
- time=TH0*256+TL0; //高八位左移八位相当于*256,求出计数值
- TH0=0;
- TL0=0;
- dcm=(time*1.2)/1000; //340m/s
- if((dcm>=700)||(flag==1)) //超出量程或者定时器溢出,返回0,数据无效
- {
- flag=0; //清除溢出标志位
- return 0;
- }
- return dcm; //返回距离值
- }
- void Get_Val(void)
- {
- chaobostart(); //给Trig引脚 20us的高电平
- while(!echo); //等待echo接收到高电平
- TR0=1; //开启定时器0
- while(echo); //等待echo接收到低电平
- TR0=0; //关闭定时器0
- val=chaobo_count(); //接收距离值
- }
- //定时器0初始化//
- void time0Init()
- {
- PORTDRV = 0x02;//驱动电流为16mA
- P2MDOUT |= 0x02; //P2^1设置为推挽输出
- TMOD=0x01; //启动定时器0,方式1
- TH0=0; //高低八位都为0
- TL0=0;
- ET0=1; //开启定时器0中断
- EA=1; //开启总中断
- }
- void timer0() interrupt 1//定时器0的中断
- {
- flag=1; //溢出标志位,溢出则数据无效
- }
复制代码
效果演示:
超声波显示:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|