搜索
bottom↓
回复: 45

一个简单的语音报时钟

[复制链接]

出0入0汤圆

发表于 2013-9-14 11:27:09 | 显示全部楼层 |阅读模式
简单语音报时钟简介
电路:

所有资料、源码:


功能:
        启动后从00:00开始每分钟报时一次
        (没有调节时间功能)
注意:
        音频文件为16K\8位采样,采用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;//播放结束
                                }                               
                        }
                }
        }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2013-10-12 14:32:19 | 显示全部楼层
颜靖峰 发表于 2013-10-11 21:01

同志们,新版的语音报时闹钟做好了,欢迎捧场:
基于M88与SPIFLASH的语音报时闹钟
http://www.amobbs.com/forum.php? ... 6orderby%3Ddateline

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-9-14 11:41:15 | 显示全部楼层
顶个                 

出0入0汤圆

发表于 2013-9-14 13:07:08 | 显示全部楼层
STC89C58能做到吗?

出0入0汤圆

发表于 2013-9-14 13:20:57 | 显示全部楼层
不错啊,研究下

出0入0汤圆

 楼主| 发表于 2013-9-14 13:23:22 | 显示全部楼层
颜靖峰 发表于 2013-9-14 13:07
STC89C58能做到吗?

可以的,只是它貌似没带PWM,但是可以用定时器模拟PWM。

出0入0汤圆

发表于 2013-9-14 13:32:12 | 显示全部楼层
lcw_swust 发表于 2013-9-14 13:23
可以的,只是它貌似没带PWM,但是可以用定时器模拟PWM。

能做到吗?声音使用什么储存

出0入0汤圆

发表于 2013-9-14 13:32:48 | 显示全部楼层
程序要多大呢?????

出0入0汤圆

发表于 2013-9-14 13:33:07 | 显示全部楼层
最好3K一下。。。。

出0入0汤圆

发表于 2013-9-14 13:43:37 | 显示全部楼层
语音文件存哪里?

出0入0汤圆

 楼主| 发表于 2013-9-14 15:43:47 | 显示全部楼层
本帖最后由 lcw_swust 于 2013-9-14 15:45 编辑
颜靖峰 发表于 2013-9-14 13:32
能做到吗?声音使用什么储存


能做到,声音是常量,存到代码段里的,也就是单片机的程序空间内。
看上面的截图,C程序编译后的代码量是13579字节,
3K以下貌似不好做呀,除非使用外接存储器(如M25P80)

出0入0汤圆

 楼主| 发表于 2013-9-14 15:45:09 | 显示全部楼层
powermeter 发表于 2013-9-14 13:43
语音文件存哪里?

存在单片机代码里的
建议你看看附件里的“语音报时原理.doc”

出0入12汤圆

发表于 2013-9-14 15:48:28 | 显示全部楼层
这玩意,声音质量太差了,而且走时精度令人抓狂
上个5毛钱的音乐芯片,随便用个51的IO控制1下,然后上个DS3231之类,完美了

出0入0汤圆

 楼主| 发表于 2013-9-14 16:02:17 | 显示全部楼层
skynet 发表于 2013-9-14 15:48
这玩意,声音质量太差了,而且走时精度令人抓狂
上个5毛钱的音乐芯片,随便用个51的IO控制1下,然后上个DS3231 ...


这个 关于声音质量和走时精度的问题,请问懒洋洋同志照着电路试过了吗?
其实,这个例子也只是仅供娱乐,虽然音质不高,但能听懂意思;走时精度我试了几个小时也没差到1秒。
由于功耗问题,这个不适合电池供电。
若想用电池供电,那最好是用低功耗单片机(如M88),接手表晶振保证走时精度;外接SPIFLASH存储WAV文件,不需要压缩,可以保证音质。


出0入0汤圆

发表于 2013-9-30 13:10:38 | 显示全部楼层
lcw_swust 发表于 2013-9-14 16:02
这个 关于声音质量和走时精度的问题,请问懒洋洋同志照着电路试过了吗?
其实,这个例子也只是仅供娱乐, ...


声音源码源码,我换芯片了

出0入0汤圆

 楼主| 发表于 2013-9-30 13:46:23 | 显示全部楼层
颜靖峰 发表于 2013-9-30 13:10
声音源码源码,我换芯片了

怎么了?现在的是哪种型号呀?

出0入0汤圆

发表于 2013-9-30 14:17:04 | 显示全部楼层
mega16  可以音质可以做的更好      

出0入0汤圆

发表于 2013-9-30 18:30:36 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-10-9 18:13:09 | 显示全部楼层
怎么我的程序和你的程序结合不了

出0入0汤圆

发表于 2013-10-9 20:31:31 | 显示全部楼层
有时间我也做个

出0入0汤圆

 楼主| 发表于 2013-10-9 20:32:38 | 显示全部楼层
颜靖峰 发表于 2013-10-9 18:13
怎么我的程序和你的程序结合不了

你在上一楼发的东西我看不到,是图片吗?
可不可以把你的电路的程序发来看看?
我最近正在做基于SPIFLASH的语音报时钟,还差一点,如果需要,可以先给你参考一下.

出0入0汤圆

发表于 2013-10-11 21:01:12 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-10-12 09:24:46 | 显示全部楼层
颜靖峰 发表于 2013-10-11 21:01

这个压缩文件有不可预料的末端,能否重传一下?
(新版的语音报时钟已经完成,资料整理中,敬请期待)

出0入0汤圆

发表于 2013-10-12 09:37:11 | 显示全部楼层
PWM合成语音就做过,调音量的,还真不会做

出0入0汤圆

发表于 2013-10-12 15:14:27 | 显示全部楼层
来个视频看看撒

出0入0汤圆

 楼主| 发表于 2013-10-12 15:43:06 | 显示全部楼层
hyghyg1234 发表于 2013-10-12 15:14
来个视频看看撒

http://www.amobbs.com/forum.php? ... B%E6%AE%B5%E5%BC%8F
这个贴子的附件里有视频

出0入0汤圆

发表于 2013-10-13 09:26:52 | 显示全部楼层
羡慕嫉妒恨。。。

出0入0汤圆

发表于 2013-10-13 09:29:19 | 显示全部楼层
这两个行不

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-10-13 12:03:24 | 显示全部楼层
颜靖峰 发表于 2013-10-13 09:29
这两个行不

这两个文件我下载下来看了,你的意思是"整理"里的工程编译通过
STC12C5A60S2里的工程编译通不过,是吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-10-13 19:13:14 | 显示全部楼层
lcw_swust 发表于 2013-10-13 12:03
这两个文件我下载下来看了,你的意思是"整理"里的工程编译通过
STC12C5A60S2里的工程编译通不过,是吗?

你的UN4有没有STC

出0入0汤圆

发表于 2013-10-13 19:15:13 | 显示全部楼层
我用的是MTK4,80

出0入0汤圆

 楼主| 发表于 2013-10-13 19:50:16 | 显示全部楼层
颜靖峰 发表于 2013-10-13 19:15
我用的是MTK4,80

这个没关系,我这稍微修改了程序之后可以编译通过.
你可以说说具体的问题吗?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-10-13 20:06:59 | 显示全部楼层
qq多少??????

出0入0汤圆

发表于 2013-10-13 20:07:44 | 显示全部楼层
lcw_swust 发表于 2013-10-13 19:50
这个没关系,我这稍微修改了程序之后可以编译通过.
你可以说说具体的问题吗?

QQ多少???

出0入0汤圆

发表于 2013-10-13 20:11:43 | 显示全部楼层
我402067010

出0入0汤圆

 楼主| 发表于 2013-10-13 20:51:36 | 显示全部楼层
颜靖峰 发表于 2013-10-13 20:11
我402067010

449630071           

出0入0汤圆

发表于 2013-10-15 23:52:22 | 显示全部楼层
我按照你的线路做了一个,有声音了,但非常小声,请问这是程序问题吗,应该怎么改?谢谢

出0入0汤圆

 楼主| 发表于 2013-10-16 08:56:01 | 显示全部楼层
本帖最后由 lcw_swust 于 2013-10-16 08:57 编辑
hiugo288 发表于 2013-10-15 23:52
我按照你的线路做了一个,有声音了,但非常小声,请问这是程序问题吗,应该怎么改?谢谢 ...


这应该是IO口的驱动能力问题,建议加个推挽:
(“SPK”接到“PWM”)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-10-16 12:18:12 | 显示全部楼层
哪天试下,呵呵.......

出0入0汤圆

发表于 2013-12-28 17:49:18 | 显示全部楼层
我课程设计做的LCD1602显示的实时时钟,只有时钟+闹钟+按键调整功能,学习下楼主的语音报时,很强大啊~
我当时用汇编编写的,不知道扩展这个功能还需要占用多少ROM?
我使用的AT89C51
另外楼主你的压缩包下载完后解压提示有不可预见的末端,可否更新下,或加下qq:1053 6649 55发我?谢谢~

出0入0汤圆

 楼主| 发表于 2013-12-28 20:55:18 | 显示全部楼层
一匹狼 发表于 2013-12-28 17:49
我课程设计做的LCD1602显示的实时时钟,只有时钟+闹钟+按键调整功能,学习下楼主的语音报时,很强大啊~
我 ...

附件发给你了,我这里解压正常。
上面帖子里有图:RAM:59字节,ROM:13579字节。
估计AT89C51装不下,因为音频数据是放在ROM里的,建议你看看我的另一个语音报时钟,将语音数据放入SPIFLASH,程序量在8K内。

出0入0汤圆

发表于 2013-12-28 23:10:00 | 显示全部楼层
lcw_swust 发表于 2013-12-28 20:55
附件发给你了,我这里解压正常。
上面帖子里有图:RAM:59字节,ROM:13579字节。
估计AT89C51装不下,因 ...

嗯,好的。
考虑先AT89C55仿真,20KB ROM、256B RAM应该差不多,等这段考试周忙完开始做
谢谢~

出0入0汤圆

发表于 2014-2-17 00:57:30 来自手机 | 显示全部楼层
单片机的音质能达到16位吗啡

出0入0汤圆

发表于 2014-2-17 01:49:42 | 显示全部楼层
颜靖峰 发表于 2014-2-17 00:57
单片机的音质能达到16位吗啡

接个16位的DAC即可。

出0入0汤圆

发表于 2014-2-17 08:25:19 | 显示全部楼层
收藏一下,以后备用,楼主厉害。

出0入0汤圆

发表于 2014-2-20 18:51:38 来自手机 | 显示全部楼层
用在测试机上!语音报警。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 02:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表