一个简单的语音报时钟

2020-01-25 15:12发布

简单语音报时钟简介
电路:
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;//播放结束
                                }                               
                        }
                }
        }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
45条回答
lcw_swust
1楼-- · 2020-01-30 02:00
本帖最后由 lcw_swust 于 2013-10-16 08:57 编辑
hiugo288 发表于 2013-10-15 23:52

1.jpg (11.51 KB, 下载次数: 0)

下载附件

2013-10-16 08:55 上传

lpdpzc
2楼-- · 2020-01-30 04:34
哪天试下,呵呵.......
一匹狼
3楼-- · 2020-01-30 05:35
 精彩回答 2  元偷偷看……
lcw_swust
4楼-- · 2020-01-30 11:15
一匹狼 发表于 2013-12-28 17:49
我课程设计做的LCD1602显示的实时时钟,只有时钟+闹钟+按键调整功能,学习下楼主的语音报时,很强大啊~
我 ...

附件发给你了,我这里解压正常。
上面帖子里有图:RAM:59字节,ROM:13579字节。
估计AT89C51装不下,因为音频数据是放在ROM里的,建议你看看我的另一个语音报时钟,将语音数据放入SPIFLASH,程序量在8K内。
一匹狼
5楼-- · 2020-01-30 14:53
lcw_swust 发表于 2013-12-28 20:55
附件发给你了,我这里解压正常。
上面帖子里有图:RAM:59字节,ROM:13579字节。
估计AT89C51装不下,因 ...

嗯,好的。
考虑先AT89C55仿真,20KB ROM、256B RAM应该差不多,等这段考试周忙完开始做
谢谢~
颜靖峰
6楼-- · 2020-01-30 16:24
单片机的音质能达到16位吗啡

一周热门 更多>