蜂鸣器(触摸提示音)
驱动用 PWM1 通道 2(PWM1->PCNR2 / PCMR2 / PDR_2 / PDDR_2 / CH2EN),
与背光(PWM1 内 Timer1)互不影响。鸣叫时长固定 50 ms,由 PIT1 的 10 ms 时基计数。
一、开关
User/module_select.h
| 宏 | 当前值 | 说明 |
|---|---|---|
LT_TOUCH_BUZZER |
1 | 0 = 关闭,三个函数体编译为空 |
Buzzer_type |
0 | 0 = 直流电平驱动,1 = PWM 方波驱动 |
二、API(User/bsp.c)
| 函数 | 作用 |
|---|---|
touch_buzzer_init() |
配置引脚与 PWM。 |
touch_buzzer() |
置 buzzer_start=1 并发声 |
touch_buzzer_close() |
停止发声 |
Buzzer_type=1 时的波形参数(touch_buzzer_init() 内):
| 寄存器 | 值 | 作用 |
|---|---|---|
U32_PCSR.CSR2 |
2 | 8 分频,168/8 = 21 MHz |
U32_PPR.CP1 |
0 | 不再分频 |
PCNR2 |
9999 | 周期,21MHz/(9999+1) |
PCMR2 |
5000 | 占空比 50% |
U32_PPCR.PDDR_2 |
1 | 引脚输出 |
Buzzer_type=0 走 PIN_PWM_Default() 后当 GPIO 用:PDR_2=1 响、PDR_2=0 停。
三、状态变量与 50ms 关断
| 变量 | 定义 | 说明 |
|---|---|---|
buzzer |
bsp.c |
软件总开关,为 1 才允许响 |
buzzer_start |
bsp.c |
正在鸣叫标志 |
buzzer_10ms_count |
bsp.c |
10 ms 计数(递增,不是递减) |
// Function/pit.c
if (buzzer_start) {
buzzer_10ms_count++;
if (buzzer_10ms_count >= 5) { // 5 × 10ms = 50ms
touch_buzzer_close();
buzzer_start = 0;
buzzer_10ms_count = 0;
}
}四、初始化与调用
// User/main.c
LT758_PWM1_Init(1, 0, 9, 800, gDutyBuf[var[0x7001 * 2 + 1]]); // 背光
#if LT_TOUCH_BUZZER
if (buzzer == 1) touch_buzzer_init();
#endif控件里统一写 if (buzzer) touch_buzzer();,约 21 处:Widget/button.c、varButton.c、sliderBar.c、slideMenu.c、popupBox.c、multiVarButton.c、keyBoard.c、circularTouch.c,以及 Function/gbk.c、rtp.c。
五、用法
buzzer = 1; // 默认 0,必须手动置 1
touch_buzzer_init(); // 放在 LT758_PWM1_Init 之后
...
if (buzzer) touch_buzzer(); // 50ms 后由 PIT1 中断自动关闭六、改参数
| 需求 | 位置 |
|---|---|
| 时长(当前 50 ms) | pit.c 里 buzzer_10ms_count >= 5,改成 N 即 N×10 ms |
音调(仅 Buzzer_type=1) |
bsp.c 的 PCNR2(越小频率越高) |
| 响度 | bsp.c 的 PCMR2 占空比,或改硬件限流电阻 |
作者:罗珍雪 创建时间:2026-10-20 10:25
最后编辑:罗珍雪 更新时间:2026-11-02 20:02
最后编辑:罗珍雪 更新时间:2026-11-02 20:02