搜索
bottom↓
回复: 60

AVR处女作--基于8515的音乐播放程序

[复制链接]

出0入0汤圆

发表于 2005-3-15 19:34:41 | 显示全部楼层 |阅读模式
纯粹出于学习目的,程序如有不合理的地方,希望各位多多指教。

编译环境:ICC AVR 6.31A

单片机:AT90S8515



PC.0出音乐信号,INT0,INT1分别接下一首、播放/暂停键



开机处于暂停状态,按下播放/暂停键开始放音,自动播放完8首,会再进入暂停状态。

所有的暂停状态都采用掉电模式。



学习目的:练习对8515内部中断(T0溢出、T1比较中断、外部两个中断)的使用、休眠模式的使用等。



点击此处下载armok0141130.rar

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2005-3-16 13:03:25 | 显示全部楼层
好啊!!值得学习!

出0入0汤圆

发表于 2005-3-16 17:21:16 | 显示全部楼层
好东西

不知道有没有M8的代码

手头没AT90S8515

对移植又不懂

呵呵
头像被屏蔽

出0入0汤圆

发表于 2005-3-17 09:46:37 | 显示全部楼层
谢谢。很不错。



有空我做一个这个实验。如果通过,会将它整理成网站上的范例。

出0入0汤圆

 楼主| 发表于 2005-3-18 13:09:44 | 显示全部楼层
呵呵……,昨天刚去买了一个M8,正打算移植,因为原先手头只有8515,这两天我再把它移植一下,这样大家相互学习时方便一点。

出0入0汤圆

发表于 2005-3-18 13:54:01 | 显示全部楼层
期待

出0入0汤圆

发表于 2005-3-18 14:15:48 | 显示全部楼层
接普通的蜂鸣器可以吗?

出0入0汤圆

 楼主| 发表于 2005-3-18 15:57:06 | 显示全部楼层
应该可以吧,但是蜂鸣器的频率响应范围会不会有问题啊,我没试过.





我看了一下 ,要放到M8上,只要修改几个中断入口和寄存器的赋值应该就差不多了.现在正在仔细研究中.

出0入0汤圆

 楼主| 发表于 2005-3-20 20:34:10 | 显示全部楼层
M8的时钟要如何初始化阿???



我把这个程序移植到M8上面后,发现出来的频率不对,节拍也不对。



M8用的是外接8MHz的晶体振荡器,初次使用M8 ,很不熟悉阿,,各位快指教阿

出0入0汤圆

发表于 2005-3-20 20:41:10 | 显示全部楼层
我请问一下怎样把音乐转换成单片机能识别的代码?比如:

/*第一首:莫斯科郊外的夜晚*/

const byte music_dt0[][2]=

{{L6,P8},{M1,P8},{M3,P8},{M1,P8},{M2,P4},{M1,P8},{L7,P8},{M3,P4},{M2,P4},{L6,P2},

{M1,P8},{M3,P8},{M5,P8},{M5,P8},{M6,P4},{M5,P8},{M4,P8},{M3,P2},

{M4,P4},{M5,P4},{M7,P8},{M6,P8},{M3,P4},{M3,P8},

{L7,P4},{L6,P8},{M3,P8},{M2,P8},{M4,P4},{M4,P8},{0,P8},

{M5,P8},{M4,P8},{M3,P4},{M2,P8},{M1,P8},{M3,P4},{M2,P4},{L6,P2},{L6,P8},{0,P8},

{0,P4},};

出0入0汤圆

发表于 2005-3-20 21:44:57 | 显示全部楼层
不是用6M吗?

出0入0汤圆

 楼主| 发表于 2005-3-22 09:59:55 | 显示全部楼层
to HEDN6699:那些东西对应的数据在music.h头文件里有定义,然后通过查表取得对应的频率要装到计数器里面的初值。



我移植的时候改成8M了,不过出来的频率不对

出0入0汤圆

发表于 2005-3-22 12:00:45 | 显示全部楼层
果然是强人。

我问个问题:

在ICC中用C语言怎么实现对AVR 8515实现以下汇编

.EQU        OUTDATE1=$010A        ;        存储ouport1,outport2 数据

LDI        TEMP,$0FF

STS        OUTDATE1,TEMP

出0入0汤圆

 楼主| 发表于 2005-3-22 21:36:17 | 显示全部楼层
上面的程序移植到M8上已经成功了,

以下为移植好调试通过的源代码及*.hex文件

点击此处下载armok0142062.rar



这是调试用的M8试验板

出0入0汤圆

 楼主| 发表于 2005-3-22 21:43:55 | 显示全部楼层
那个程序里面有些地方都改掉了:开机仍处于掉电等待状态,按播放键开始播放,不按按键超过300S左右,在放完后会进入掉电待机状态,这时候按任意键唤醒,唤醒后仍然播放原先进入待机前播放的乐曲。



手机拍的,效果不是很好啊。呵呵……



to ejunAI 追梦人:那个汇编的嵌入我也没试过,我也是刚开始学习AVR。不过网站里好像有 例程

出0入0汤圆

发表于 2005-3-22 22:54:50 | 显示全部楼层
哈哈

可以了

好玩的

出0入0汤圆

发表于 2005-3-23 08:38:37 | 显示全部楼层
输出的音频信号直接接的扬声器?

出0入0汤圆

发表于 2005-3-23 09:16:13 | 显示全部楼层
加个三极管

出0入0汤圆

发表于 2005-3-23 15:59:35 | 显示全部楼层
不错不错,有时间我也玩玩,呵呵,要是能有液晶屏幕就更爽了!呵呵

出0入0汤圆

 楼主| 发表于 2005-3-23 19:10:14 | 显示全部楼层
可以的阿,可以再参考一下网站的3310例程,再加点东西应该就可以出来,

不过接下来我要做毕业设计了,这个事就得大家做了,不过做出来的话不要忘了共享出来交流一下。

出0入0汤圆

 楼主| 发表于 2005-4-4 22:41:19 | 显示全部楼层
没人讨论交流哦,掉了,

顶一下

出0入0汤圆

发表于 2005-4-5 08:32:35 | 显示全部楼层
有时间我去整整玩,做好了给大家共享一下

出0入0汤圆

发表于 2005-4-24 13:39:54 | 显示全部楼层
有谁调试通过了?

觉得很好玩啊,我用iccavr7.0调试,怎么调试不能通过啊?

C:\iccv7avr\bin\imakew -f 用8515 做的音乐演奏程序.mak

C:\iccv7avr\bin\imakew.exe: Can't open 用8515

Done: there are error(s). Exit code: 1

是不是要改动一些地方,我已经把music和music_data文件拷贝到include文档里面了,是什么原因啊

出0入0汤圆

发表于 2005-4-25 16:45:01 | 显示全部楼层
好东东,值得学习!

出0入0汤圆

发表于 2005-4-25 17:23:57 | 显示全部楼层
很胜利啊

出0入0汤圆

 楼主| 发表于 2005-4-26 22:15:10 | 显示全部楼层
to nuaazjg :

  你说“ 我已经把music和music_data文件拷贝到include文档里面了”是什么意思啊,,我一下没弄懂,能否把那些错误提示之类的说的再清楚一点阿。我也是AVR初学者,所以也不是很懂。



最近忙于毕设,很少上网阿,有机会我也用icc7.0试试看。

出0入0汤圆

发表于 2005-8-30 16:10:13 | 显示全部楼层
谢谢,我把hex放进m8去就行了,谢谢!

出0入0汤圆

发表于 2005-11-3 16:57:29 | 显示全部楼层
我移植到M16,并且用LCD3310显示歌名。主程序仍然是3310LCD_main.c。



点击此处下载armok0184027.rar

出0入0汤圆

发表于 2005-11-3 19:22:40 | 显示全部楼层
好东西!顶!!!

出0入0汤圆

发表于 2005-11-4 12:54:20 | 显示全部楼层
回【22楼】 nuaazjg :



有谁调试通过了?

觉得很好玩啊,我用iccavr7.0调试,怎么调试不能通过啊?

C:\iccv7avr\bin\imakew -f 用8515 做的音乐演奏程序.mak

C:\iccv7avr\bin\imakew.exe: Can't open 用8515

Done: there are error(s). Exit code: 1

是不是要改动一些地方,我已经把music和music_data文件拷贝到include文档里面了,是什么原因啊  

================================================================================   

你的文件名中间有空格,建议你不要用中文做文件名。

出0入0汤圆

发表于 2005-11-6 09:16:01 | 显示全部楼层
有空用PROTUES防真下先,听下效果如何??

出0入0汤圆

发表于 2005-12-7 17:08:32 | 显示全部楼层
三极管如何接啊,用的什么三极管9013?

能不能传个原理图上来,谢谢高手了

出0入0汤圆

发表于 2005-12-11 13:43:07 | 显示全部楼层
用PROTUES仿真不行,我用ICCAVR6.3编译也不行,直接用HEX文件可以,应该是程序还需要改动吧!

出0入0汤圆

发表于 2005-12-12 15:07:03 | 显示全部楼层
用PROTUES仿真不行

出0入0汤圆

发表于 2005-12-28 17:17:17 | 显示全部楼层
大侠真不错,感觉我去年做课程51播放音乐的东西太粗糙了。

出0入0汤圆

发表于 2006-4-12 08:52:34 | 显示全部楼层
太好了,我正为8515的音乐程序发愁呢!!!真是好东西啊。

不知道有没有8515的串口程序及硬件电路图呢?????

出0入4汤圆

发表于 2006-5-1 12:01:28 | 显示全部楼层
Proteus可以仿真,可以听出是哪一首歌,只是音乐听上去断断续续,哈哈哈,很好玩。

出0入0汤圆

发表于 2006-6-28 18:33:55 | 显示全部楼层
to:chen



m16晶振是7.3728怎么改?

现在输出的频率好像太慢了

出0入0汤圆

发表于 2006-6-29 08:37:48 | 显示全部楼层
没有反应呀.自己找原因了

原来是我的有关时钟源的熔丝设置有问题

出0入0汤圆

发表于 2006-8-26 15:13:11 | 显示全部楼层
好东西...

出0入0汤圆

发表于 2006-8-26 17:19:26 | 显示全部楼层
不错

就是好呀

出0入0汤圆

发表于 2006-8-27 10:05:26 | 显示全部楼层
只能播放midi类型音乐,不能播放语音,我以前想做成玩具产品,但试过音乐效果不好听,客户不接受。

出0入0汤圆

发表于 2006-11-16 17:34:09 | 显示全部楼层
我修改了楼主的程序,在M16试验板上play music,效果很一般,听久了头疼!

点击此处下载armok01135444.rar

出0入0汤圆

发表于 2007-9-8 10:21:31 | 显示全部楼层
直接测试,不知道那个节拍频率应该怎么算
int main(void)
{
init_device();
nop_time=0;
play_num=0;
play_flag=0;
sei();//开中断
int k=1;
int YingYue;
int JiePai;

while(1)
  {
       
        TCCR0=0x05;TCCR1B=0x09;
       
        k=0;
        do
        {
       
        YingYue = music_dt3[k][0];  
        JiePai = music_dt3[k][1];
       
        OCR1A=tone_frq[YingYue];;//取得音符对应的频率值
        TCCR1B=0x09;
        TCNT1=0x00;
       
        tone_dl=0;
        k++;
  
        while( tone_dl < JiePai/2 ); //8m好像要除以2才能达到正常的速度
       
        }while( JiePai != 0);
       
       
       
       
  
        /* 以下是源程序,暂时注释掉
  start:
   get_music_num();
   play_tmp=play_num;
   play_flag = 1;
   if(play_flag==0x01)
     {TCCR0=0x05;TCCR1B=0x09;}
   jiepai=(*p)[1];//取得第一个节拍
   while(jiepai!=0)//若为零,表示结束
   {
        if(play_tmp!=play_num)//播放与用户指定乐曲不同
           {TCCR0=0x00;
            TCCR1B=0x00;
                goto start;}        //结束当前播放的曲子
    sound();
        }
   TCCR0=0x00;TCCR1B=0x00;
   if(play_num<7)play_num++;
   else play_num=0;
   PORTC=0xFE;
   if(nop_time>16666)//大于300s无键盘操作进入待机状态
      {MCUCR|=0xA0;
           PORTC=0xFE;
           j=0x00;//进入待机标志
           SLEEP();
           play_num=play_tmp;//任意键唤醒后继续播放进入待机时播的歌曲
           MCUCR=0x00;//防止意外进入休眠
           } */
   }
  
}

出0入0汤圆

发表于 2007-9-10 08:37:08 | 显示全部楼层
下载下来再说

出0入0汤圆

发表于 2008-8-9 16:24:21 | 显示全部楼层
我移植到ATMEGA2561V上(IAR编译),不知为何只能发出一个音符声音.请教各位大侠看看哪儿出错了!!在此谢谢.
点击此处下载 ourdev_373113.rar(文件大小:4K) (原文件名:m2561.rar)

出0入0汤圆

发表于 2009-4-10 15:22:25 | 显示全部楼层
看看,好好学习下。

出0入0汤圆

发表于 2009-4-15 17:27:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-21 13:32:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-21 13:38:56 | 显示全部楼层
学习学习!

出0入0汤圆

发表于 2010-3-21 01:28:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-22 10:39:11 | 显示全部楼层
收藏了

出0入0汤圆

发表于 2010-3-22 12:38:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-7 12:10:16 | 显示全部楼层

出0入0汤圆

发表于 2010-9-11 21:01:47 | 显示全部楼层
\(^o^)/~

出0入0汤圆

发表于 2011-2-24 01:11:17 | 显示全部楼层
回复【44楼】ba_wang_mao
-----------------------------------------------------------------------

我想要一个代码用的是TI,就像uchar music[max_note]={5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8};的, 就嫌这个太短了

出0入0汤圆

发表于 2011-2-24 10:53:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-28 19:25:37 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2011-4-6 00:55:50 | 显示全部楼层
正在学习顶一下

出0入0汤圆

发表于 2011-4-6 02:29:18 | 显示全部楼层
支持

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-27 23:25

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

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