简单语音报时钟简介
电路:
1.jpg (13.39 KB, 下载次数: 22)
下载附件
2013-9-14 11:19 上传
功能:
启动后从00:00开始每分钟报时一次
(没有调节时间功能)
注意:
音频文件为16K8位采样,采用1位增量调制方式压缩,增量为5
改变DLT可调节音量
通过PWM输出,P1.3接喇叭再接1000uF电容到GND即可
晶振为12MHz
简单增量调制算法简介
压缩:
For i = Pstart To Pend
If FileBin(i) > vol Then
b1 = 1
vol = vol + dlt
Else
b1 = 0
vol = vol - dlt
End If
d = ((d * 2) And &HFF) Or b1 '得数据
If vol > 255 Then vol = 255
If vol < 0 Then vol = 0
bn = bn + 1
If bn >= 8 Then '达到8位,记录数据
bn = 0
'SFlash = SFlash & "0x" & Num2Str(d, 2) & ","
Mid(SFlash, Flen + 1, 5) = "0x" & Num2Str(d, 2) & "," '数字转为C语言16进制
......
解压:
if(wav_sw)
{
CCAP0H=(v0+vol)/2;//PWM赋值(上次与本次的平均值)
v0=vol;//记录上次的值
if(wd&BIT(7))//增量调制解码
vol+=dlt;
else
vol-=dlt;
if(vol<0)vol=0;
if(vol>255)vol=255;
wd<<=1;
bn++;
if(bn>=8)//一个字节完成
{
bn=0;
dn++;
wd=wavn[wav_ld[wav_ldp]][dn];//取WAV文件的下一字节
if(dn>=wavsize[wav_ld[wav_ldp]])//一个WAV文件完了
{
dn=0;
wav_ldp++;
if(wav_ld[wav_ldp]==0)//播放队列完了
{
wav_ldp=0;
wav_sw=0;//播放结束
}
}
}
}
接个16位的DAC即可。
一周热门 更多>