基于迪文T5L屏8051内核项目开发_内置蜂鸣器报警

前言:

硬件设备:迪文DMG32240C028_03WTC屏

开发方式:DGUS界面开发+基于迪文T5L屏8051内核嵌入式C开发

开发说明:迪文 T5L 是双核架构智能屏:内置GUI 核(DGUS II) 负责界面渲染、触摸处理;独立 8051 内核(OS CPU) 运行用户 C 代码,双核通过变量指针(VP) 交互,开发模式为 “DGUS 组态界面 + 8051 C 逻辑”,开发高效、界面美观、逻辑可控。

T5L屏双核架构介绍:

GUI 核(DGUS II):独立 CPU,硬件 2D 加速、JPEG 解码、显存驱动,不占 8051 资源,负责显示、触摸、控件刷新。
OS 核(8051):1T 高速 8051,最高300MHz。64KB Code Flash、32KB RAM。独立运行用户 C 程序,与 DGUS 并行、互不干扰。

正文:

迪文T5L屏内置蜂鸣器报警程序

1. 程序概述

迪文T5L屏内置的按键音蜂鸣器,可以单独控制,我们把按键音功能禁用,改为一个报警用的蜂鸣器。该程序基于迪文屏8051内核开发,依托T5LLib库实现屏内置蜂鸣器多模式的精准控制,采用100ms周期的任务调度机制,支持蜂鸣器关闭、单次鸣响、快速间歇鸣响、慢速间歇鸣响四种核心工作模式,适用于迪文T5L屏声光提示场景,整体逻辑简洁,可直接集成到各类迪文屏相关嵌入式项目中。工程文章末尾提供下载链接。

2. 头文件(buzzer.h)

2.1 枚举类型定义

定义枚举类型BuzzerMode_t,明确蜂鸣器的4种工作模式:

枚举值

功能说明

实际频率/周期

BUZZER_OFF

蜂鸣器关闭模式(程序默认模式)

-

BUZZER_SINGLE

单次鸣响模式,触发后持续鸣响1秒,仅执行1次

-

BUZZER_FAST

快速间歇鸣响模式(频率为2Hz)

周期500ms(鸣响250ms,停止250ms,循环执行)

BUZZER_SLOW

慢速间歇鸣响模式(频率为1Hz)

周期1000ms(鸣响500ms,停止500ms,循环执行)

2.2 函数接口声明

对外核心函数,供迪文屏8051内核上层程序调用,无需关注底层实现细节,接口简洁易懂,适配嵌入式报警场景,具体声明如下:

// 蜂鸣器初始化函数:完成硬件使能关闭、模式和计数器重置
void buzzer_init(void);

// 蜂鸣器模式设置函数:切换蜂鸣器工作模式,避免重复操作
void buzzer_set_mode(BuzzerMode_t mode);

// 100ms周期任务函数:需由系统定时器调度,实现不同模式的时序控制
void buzzer_task_100ms(void);

3. 源文件(buzzer.c)

3.1 静态全局变量

定义两个静态全局变量,适配迪文屏8051内核资源特点,用于存储当前工作状态和时序计数,仅在源文件内部可见,避免对外暴露造成误操作:

static BuzzerMode_t buzzer_mode = BUZZER_OFF; // 存储当前蜂鸣器工作模式,默认关闭
static u16 buzzer_cnt = 0;                  // 100ms单位的计数器,用于时序控制

3.2 核心函数实现

3.2.1 初始化函数 buzzer_init

void buzzer_init(void)
{
    t5l_keyBuzzer_enable(0); // 禁止按键音,防止干扰报警声音
    buzzer_mode = BUZZER_OFF; // 重置工作模式为关闭状态
    buzzer_cnt = 0;          // 重置计数器,确保时序准确
}

功能说明:初始化阶段关闭按键音,重置工作模式和计数器,为后续模式切换和时序控制奠定基础,确保迪文屏设备启动后蜂鸣器处于稳定的关闭状态。

3.2.2 模式设置函数 buzzer_set_mode功能说明:实现蜂鸣器工作模式的切换,增加模式判断逻辑,避免重复设置相同模式造成的资源浪费;切换模式时重置计数器,确保每种模式的时序从初始状态开始计算,提升控制精度。

void buzzer_set_mode(BuzzerMode_t mode)
{
    if(buzzer_mode == mode) return; // 若目标模式与当前模式一致,直接返回,避免无效操作
    buzzer_mode = mode;             // 更新当前工作模式
    buzzer_cnt = 0;                 // 切换模式时重置计数器,避免时序混乱
}

3.2.3 周期任务函数 buzzer_task_100ms

该函数为程序核心逻辑,需由系统定时器按100ms周期调度执行,根据当前工作模式,通过计数器控制蜂鸣器的鸣响和停止时序,具体逻辑如下:

void buzzer_task_100ms(void)
{
    if(buzzer_mode == BUZZER_OFF)
    {
        buzzer_cnt = 0;
        return;
    }

    buzzer_cnt++;  // 每100ms +1

    // ======================
    // 提示音:响1秒(只响一次)
    // ======================
    if(buzzer_mode == BUZZER_SINGLE)
    {
        if(buzzer_cnt == 1)
        {
            t5l_buzzer_on(1000);  // 响1000ms = 1秒
        }
        
        // 响完自动关闭,避免重复触发
        if(buzzer_cnt >= 10)  // 预留一点时间防止重复
        {
            buzzer_set_mode(BUZZER_OFF);
        }
    }
    // ======================
    // 快速报警 2Hz
    // 周期:500ms
    // 响250ms → 停250ms
    // ======================
    else if(buzzer_mode == BUZZER_FAST)
    {
        // 周期开始时响 2000ms
        if(buzzer_cnt == 1)
        {
            t5l_buzzer_on(250);
        }

        // 500ms = 5个100ms → 重置周期
        if(buzzer_cnt >= 5)
        {
            buzzer_cnt = 0;
        }
    }

    // ======================
    // 慢速报警 1Hz
    // 周期:1000ms
    // 响500ms → 停500ms
    // ======================
    else if(buzzer_mode == BUZZER_SLOW)
    {
        // 周期开始时响 1000ms
        if(buzzer_cnt == 1)
        {
            t5l_buzzer_on(500);
        }

        // 1000ms = 10个100ms → 重置周期
        if(buzzer_cnt >= 10)
        {
            buzzer_cnt = 0;
        }
    }
}

4、迪文T5L屏8051内核开发_内置蜂鸣器报警例子:

 5、下载链接:完整工程,包括DGUS界面工程“t5l_dgus”及Keil的C代码工程“t5l_code”。

迪文T5L屏8051内核开发-内置蜂鸣器报警

迪文T5L屏8051内核开发-开发环境软件及文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值