15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-19 18:05 | 显示全部楼层
(四)输入切换
kz06.PNG

输入切换的功能地址是0010,芯片内2组4选1开关是同步的。
切换控制数据是D12~D10,在IC初始化时,需将D12~D10全部置0,此时4路输入全部处于断开状态。
输入切换指令中,D15~D13数据位无效,可以全部置0或置1。


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-19 18:07 | 显示全部楼层
(五)高音调节
kz07.PNG
高音调节的功能地址是0011,有效数据位是D15~D11。
其中,D15控制高音是衰减Cut还是增强Boost,当D15=0时,高音进行衰减,D15=1时高音增强。
D14~D11设置高音衰减/增强值,范围为0~10dB。
IC加电后,高音音调模组需进行初始化。初始化时,D15~D11全部置0。



15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-19 18:08 | 显示全部楼层
(六)低音调节
kz08.PNG

低音调节的功能地址是0100,有效数据位是D15~D11,D10~D8数据位无效。
与高音调节一样,低音调节也分为衰减调节和增强调节,IC上电后低音调节模组也需要进行初始化。


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-19 18:11 | 显示全部楼层
(七)直通切换
kz09.PNG

kz10.PNG

直通切换TSW与高音调节复用一个功能地址0011,在数据控制位方面,直通切换仅使用了D10。
当D10=0时,TSW断开,音频处于直通状态;当D10=1时,TSW闭合,音频切换为音调状态。
前面已经说过,由于与高音调节复用了一个功能地址,为防止切换直通开关时误操作高音调节值,可以提前定义一个变量,记录高音音调数值,操作TSW时,将高音值照抄过去。除此之外,还有一个解决方法也可以考虑,即使用unsigned int变量记录整个16位指令,在操作TSW时,仅改变D10的值。
kz11.PNG

根据厂家PDF手册提示,在切换TSW时,先设为静音状态。实际应用中,我发现TSW切换时,如音乐正在播放,喇叭会发出较为明显的冲击声。所以,建议TSW切换时,要么暂停音乐,要么设为静音。


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-19 18:12 | 显示全部楼层
(八)初始化
IC上电初始化后才能够正常工作,根据PDF手册,初始化有5个步骤:声道1模组初始化(操作数据D15~D8全部置1)、声道2模组初始化(全部置1)、输入选择模组初始化(全部置0)、高音音调和TSW模组初始化(全部置0)、低音音调模组初始化(全部置0)。
kz12.PNG
同时还有3项提示:
1、本产品在电源开启时默认处于静音设置,请在解除各设置的静音后使用。
2、如果在电源开启前向输入信号端子输入任何音频信号,可能会导致初始状态异常。
3、在上述使用条件下,通过在关机前设置静音可防止发生异常情况。
实际应用中,IC上电后如果不进行初始化操作,不一定会发生异常情况,但为了稳妥起见,还是建议按照要求进行初始化。



54

主题

13

好友

2029

积分

罗宾汉 当前在线

Rank: 7Rank: 7Rank: 7

UID
1388
帖子
2048
精华
0
经验
2029 点
金钱
1757 ¥
注册时间
2004-9-3
发表于 2026-10-20 16:48 | 显示全部楼层
期待更新,我们这一辈diy最难就是软控电路。

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-20 17:42 | 显示全部楼层
fysy 发表于 2026-10-20 16:48
期待更新,我们这一辈diy最难就是软控电路。

多谢关注,希望对您有所帮助

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-20 17:43 | 显示全部楼层

更新了部分内容,目录如下。
目录2.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:15 | 显示全部楼层
七、操作代码
以下操作代码均在Keil uVision5环境下编写和编译。
(一)准备工作
1、硬件连接
MCU:STC32G8K64-LQFP32
IC:NJW1194V
其中,MCU P1.4接IC DATA脚,P1.5接CLOCK,P1.6接LATCH
MCU工作频率:6MHz
2、定义数据类型和常量
daima01.PNG

3、定义引脚别名
daima05.PNG


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:18 | 显示全部楼层
4、定义延时函数
这里定义了3个延时函数:延时毫秒、延时1微秒、延时2微秒。
daima02.PNG

daima04.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:19 | 显示全部楼层
5、初始化单片机
前3行是对STC32G系列MCU进行设置的,如选用其他MCU,可以不要。后6行是对STC32G系列MCU IO口模式进行设置的,除P0.1~P0.3外,其他IO口均设置为弱上拉的准双向口模式。
daima03.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:22 | 显示全部楼层
(二)写16位数据
IC操作需要通过对IC写16位数据来实现,下图为写数据时序。
1、写数据前,需将LATCH和CLOCK置1。
2、LATCH拉低,开始写数据。写数据的顺序是从高位D15向低位D0。
3、根据要写入的数据内容,将D15置1或置0。
4、CLOCK拉低,将D15的值写入IC的缓存中。
5、CLOCK拉高。
6、重复第3~5步,依次将D14~D0的值写入IC缓存。
7、LATCH拉高,IC执行缓存中的数据指令。
daima06.PNG

在时序图中,t1为时钟宽度,t2、t3分别为时钟高低电平脉冲宽度,t4为锁存上升沿保持时间,t5为数据设置时间,t6为数据保持时间,t7为时钟设置时间,t8为锁存高脉冲宽度。t1~t8最小时隙有具体要求,其中t5~t8最小时隙为1.6us,如果最小时隙<1.6us,则数据可能写入异常。
daima07.PNG

STC32G工作在6MHz频率下,由于STC32G是1T单片机,则STC32G执行1步机器指令所需的时间为:1s/6000000=0.167us,小于1.6us的时序间隙,所以需要在每个时钟脉冲变换前增加2us的延时。如果使用12T的单片机,工作在5MHz频率下,则每个机器指令执行周期≈2us,可不用再增加延时。
具体的代码如下。
daima08.PNG



15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:25 | 显示全部楼层
(三)写2个8位数据
将16位数据拆分成dat、add两段,在实际使用中更加方便。
daima09.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:26 | 显示全部楼层
(四)初始化IC
IC供电电路加电后,由于电解电容充电,要经过一小段时间(大约为几十ms),才进入稳定状态。供电稳定后,需要对IC进行初始化操作,代码如下。
daima10.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:28 | 显示全部楼层
(五)音量控制

daima12.PNG

daima11.PNG


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:31 | 显示全部楼层
(六)音量+、音量-
daima13.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:33 | 显示全部楼层
(七)静音、音量淡出、音量淡入
daima14.PNG

其中,音量淡出变为最小后,再进入静音状态。
适合场景:
1、关机前操作,可有效避免关机时可能出现的电流冲击声。
2、音乐播放过程中,按下静音按键后,声音逐渐变小,使音量变化有种丝滑感。
同理,音量淡入功能适合开机后、静音取消后的场景。


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:35 | 显示全部楼层
(八)音频直通切换
daima15.PNG

daima16.PNG

前面已经提过,由于高音调节和TSW开关控制复用一个功能地址0x30,切换TSW开关前,需先记录高音音调值,发出指令时再将高音音调值照抄过去,保持高音音调状态不变。


15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 08:36 | 显示全部楼层
(九)高、低音调节
daima17.PNG

15

主题

1

好友

895

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
3264
帖子
745
精华
1
经验
895 点
金钱
788 ¥
注册时间
2005-3-5
 楼主| 发表于 2026-10-21 09:22 | 显示全部楼层
(十)补充说明
在代码执行中,还有几个变量需要提前定义。
daima18.PNG

c_vol为音量值,在代码中作为全程变量,需要时随时调用。
关机时,将c_vol的值保存在MCU的EEPROM中;下次开机时,从EEPROM中读取出来,实现关机音量保存功能。
c_vol_kjzd为开机最大音量值,这个值设置一个开机后音量最大的上线,防止开机后音量过大,造成听感不适。
下表为开机最大音量的作用。
bg03.PNG

c_vol_kjzd可在代码中写成一个固定的数值,也可以根据个人听音习惯,设定为一个可调整的数值,并保存在EEPROM中,需要时随时读取。
c_treble、c_bass是高音音调值和低音音调值,为全程变量,并在关机时保存。
b_tone是TSW音频直通开关值,数据类型为bit,只有0/1两种状态,占1位数据。同样为全程变量,关机保存。



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

本版积分规则

Archiver|手机版| HIFIDIY论坛 ( 鄂ICP备2025138941号-3 ICP证:鄂B2-20130019 公安局网监备:420100007348 邮箱:1343292467@qq.com )

GMT+8, 2026-11-8 23:27 , Processed in 0.092771 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部