迪文科技论坛

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

【分享】22级胡博艺 红外感应高空抛物检测

[复制链接]

0

主题

0

回帖

19

积分

新手上路

Rank: 1

积分
19
发表于 5 天前 | 显示全部楼层 |阅读模式
一、作品介绍

      基于迪文屏EKT043E屏幕的C51内核单片机的开发,配合AM312人体感应模块,实现红外感应高空抛物检测。当检测范围有物体存在时,显示警报动画,提示用户注意高空抛物。
            

二、工作原理
      1.系统初始化:
           在系统启动时,调用 sys_cpu_init() 函数初始化核心寄存器,设置中断、时钟等参数,并关闭看门狗定时器,确保系统处于已知状态。通过 sys_timer2_init() 初始化定时器2,设置定时间隔为1毫秒,以便进行精确的时间管理。最后,调用 sys_init() 完成基本配置。
      2.延时函数:
           系统提供了多种延时函数,其中 sys_delay_about_ms() 和 sys_delay_about_us() 使用循环实现大致延时,而 sys_delay_ms() 则利用定时器2实现精确延时,使用全局变量 delay_tick 进行计数。
      3.数据读写:
           sys_read_vp() 和 sys_write_vp() 函数用于从指定地址读取数据到缓冲区或将缓冲区数据写入指定地址。写入方式根据地址的奇偶性决定。
      4.定时器中断:
           sys_timer2_isr() 是定时器2的中断服务程序,每当定时器溢出时调用。它清除中断标志并减少 delay_tick 的值,以实现精确的时间计数。
      5.IO引脚初始化与主循环:
           在 io_init() 函数中,初始化IO引脚,将一些引脚配置为输出(如LED),其他引脚配置为输入(如按键)。在 main() 主循环中,程序每隔1毫秒增加 cnt_1ms 计数器,当计数器达到500时,切换LED的状态,实现LED每500毫秒闪烁。同时,监测按键状态的变化,并将状态写入指定的变量地址(0x1100)。
      6.人体感应模块:
           AM312模块检测到人体存在时,会触发中断,系统响应并显示警报动画,提示用户注意高空抛物。

三、设计思路

       1.硬件部分:输入/输出引脚配置:使用sbit定义关键信号引脚,确保能够通过简单的位操作控制这些外设。通过设置 PORTDRIV 和P1MDOUT、P2MDOUT来配置引脚的电流驱动能力。针对输入和输出引脚进行明确设置,确保输入引脚(如KEY1)能够正确读取按键状态,引脚输出(如LED和SPK)能够有效操作外设。
[color=rgba(6, 8, 31, 0.88)]            

        2.软件部分:
            设计启动界面,点击右下方红色箭头处可进入检测开启界面。
            
            设计检测开启界面,点击中间区域,进入警报界面。
            

            设计警报界面,在中间部位加入“动画图标显示”和“增量调节”,点击右下角“解除警报”处,切换到警报解除界面。
            
           设计警报解除界面,点击中间区域可返回启动界面。

            
演示视频:红外感应高空抛物检测


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 01:08 , Processed in 0.077831 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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