迪文科技论坛

 找回密码
 立即注册
搜索
查看: 246|回复: 0

【分享】迪文屏二次开发之超声波传感器

[复制链接]

3

主题

3

回帖

44

积分

新手上路

Rank: 1

积分
44
发表于 2023-12-20 13:09:29 | 显示全部楼层 |阅读模式
本帖最后由 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文件夹。


部分代码讲解:
  1. extern u16 val;   //外部变量用来存储距离值
  2. sbit tro=P2^1;
  3. sbit echo =P2^0;
  4. //计算函数
  5. unsigned int chaobo_count();
  6. //起始信号
  7. void chaobostart();
  8. //定时器0初始化  
  9. void time0Init();
  10. //获取距离
  11. void Get_Val(void);


  12. 主函数:

  13. void main(void)
  14. {   
  15.         time0Init(); //超声波定时器初始化
  16.         sys_init();//系统初始化        
  17.         while(1)
  18.         {
  19.                 Get_Val(); //获取超声波距离
  20.                 if(val)   //如果数据有效
  21.                 {
  22.                         sys_write_vp(START_WIN_TEMP_VP,(u8*)&val,1);//将数据显示在控件
  23.                 }
  24.                 sys_delay_about_ms(300);    //延时300ms
  25.         }
  26. }


  27. chaoshengbo.c文件
  28. //超声波起始信号

  29. void chaobostart()
  30. {
  31.          tro=1;
  32.          sys_delay_about_us(20);  //高电平触发20us
  33.          tro=0;
  34. }

  35. //超声波测距初始化
  36. unsigned int chaobo_count()
  37. {
  38.   unsigned int time=0;
  39.   time=TH0*256+TL0;  //高八位左移八位相当于*256,求出计数值
  40.   TH0=0;
  41.   TL0=0;
  42.   dcm=(time*1.2)/1000;   //340m/s
  43.   if((dcm>=700)||(flag==1))         //超出量程或者定时器溢出,返回0,数据无效
  44.   {
  45.                 flag=0;     //清除溢出标志位
  46.                 return 0;
  47.   }
  48.         return dcm;   //返回距离值
  49. }

  50. void Get_Val(void)
  51. {
  52.                 chaobostart();   //给Trig引脚 20us的高电平
  53.                 while(!echo);    //等待echo接收到高电平
  54.                 TR0=1;            //开启定时器0
  55.                 while(echo);                         //等待echo接收到低电平
  56.                 TR0=0;                                                //关闭定时器0
  57.                 val=chaobo_count();         //接收距离值
  58. }

  59. //定时器0初始化//
  60. void time0Init()                 
  61. {
  62.         PORTDRV = 0x02;//驱动电流为16mA
  63.         P2MDOUT |= 0x02; //P2^1设置为推挽输出
  64.         TMOD=0x01;  //启动定时器0,方式1
  65.         TH0=0;     //高低八位都为0
  66.         TL0=0;
  67.         ET0=1;   //开启定时器0中断
  68.         EA=1;                 //开启总中断
  69. }

  70. void timer0() interrupt 1//定时器0的中断
  71. {
  72.                 flag=1;  //溢出标志位,溢出则数据无效
  73. }
复制代码






效果演示:
超声波显示:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-23 01:57 , Processed in 0.070443 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表