搜索
bottom↓
回复: 51

上传一个简单的"祝你生日快乐"歌曲,写的不好,不要见笑

[复制链接]

出0入0汤圆

发表于 2005-12-8 21:03:16 | 显示全部楼层 |阅读模式
我用的是内部的1M的RC震荡



#include <avr/interrupt.h>

#include <avr/signal.h>

#include <avr/eeprom.h>

#include <avr/pgmspace.h>

#include <avr/wdt.h>

#include <avr/iom8.h>//和单片机类型相对应的头文件,选择Atmega8做实验;

#include <avr/sleep.h>

#include <avr/delay.h>

#include <inttypes.h>

unsigned int SINGM[15]={64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217};

unsigned char SINGG[24]={0X82,0X01,0X81,0X94,0X84,0XB4,0XA4,0X04,

                                                   0X82,0X01,0X81,0XF4,0XD4,0XB4,0XA4,0X94,

                                                   0XE2,0X01,0XE1,0XD4,0XB4,0XC4,0XB4,0X04};

volatile uint8_t TI,TI2,TI3,S1,S2,S3;

void AvrInit (void)

{

        TCCR1B = _BV(CS00);              /* Set TIMER0 prescaler

//        TCNT1 = SINGM[TI];                              /* Set TIMER0 3.6kHz/45=80Hz (12.5ms) 0xd3=0x100-0x2d  (0x2d=45)       */

//        timer_enable_int(_BV(TOIE1));   /* Enable  TIMER0 overflow

}

SIGNAL(SIG_OVERFLOW1)     /* signal handler for Time1 interrupt */

{

//        timer_enable_int(0<<TOIE1);

        PORTC ^= 0x08;

        TCNT1 = SINGM[TI];     /* Set TIMER0     */

       

}

void deley178ms(void)

{

        unsigned int i;

        for(i=0;i<300;i++)

        {

                _delay_loop_2(80);

        }

}



int main(void)

{

        unsigned char j;

        OSCCAL = 0xAF;

        cli();  

        DDRC   = 0x0F;

        PORTC  = 0xff;

        AvrInit ();

        sei();

        S3 = SINGG[S2];

        S3 = S3&0X0F;                 //取低4位,将时间存到S3

        TI= SINGG[S2];      

        TI=TI>>4;                 //取到音符

        if(TI==0)      timer_enable_int(0<<TOIE1);

        else   

        {

                TI=TI-1;

                TCNT1 = SINGM[TI];

                timer_enable_int(_BV(TOIE1));

        }

        while(1)

        {

                for(j=0;S3>=j;j++)

                {

                        deley178ms();

                }

                S2++;

                timer_enable_int(0<<TOIE1);

                if(S2>23) S2=0;

                S3 = SINGG[S2];

                S3 = S3&0X0F;         //取低4位,将时间存到S3

                TI= SINGG[S2];      

                TI=TI>>4;                 //取到音符

                if(TI==0)      timer_enable_int(0<<TOIE1);

                else   

                {

                        TI=TI-1;

                        TCNT1 = SINGM[TI];

                        timer_enable_int(_BV(TOIE1));

                }

                asm("nop");

               

        }

}

-----此内容被lcqqcl于2005-12-08,21:06:47编辑过



-----此内容被lcqqcl于2005-12-09,15:10:20编辑过


-----此内容被lcqqcl于2005-12-09,15:33:53编辑过

出0入0汤圆

发表于 2005-12-8 21:38:52 | 显示全部楼层
十分的感谢你!让我的蜂鸣器和扬声器都发声了。

今天才明白,原来蜂鸣器和扬声器是可以直接接在adc口的。

搞了那么多天,研究了半天计算三极管的放大电流,原来只要直接接上去这么简单。

真是:众里寻她千百度,蓦然回首,那人却在灯火阑珊处。

出0入4汤圆

发表于 2005-12-8 22:55:10 | 显示全部楼层
??不明白楼上“原来蜂鸣器和扬声器是可以直接接在adc口的。”??



adc口干什么用的?



我觉得应该是用CTC模式,驱动蜂鸣器工作在不同的频率,我 记得dou好像是40khz,



unsigned int SINGM[15]={64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217};

unsigned char SINGG[24]={0X82,0X01,0X81,0X94,0X84,0XB4,0XA4,0X04,

                     0X82,0X01,0X81,0XF4,0XD4,0XB4,0XA4,0X94,

                     0XE2,0X01,0XE1,0XD4,0XB4,0XC4,0XB4,0X04};

没仔细看程序,这两张表存储的是OCAR的值,是吗?但是我却没有发现有OCAR的寄存器

出0入0汤圆

发表于 2005-12-9 09:45:46 | 显示全部楼层
楼主把电路图简单说一下,buzzer,led都接到什么地方

出0入0汤圆

发表于 2005-12-9 10:28:47 | 显示全部楼层
配合上面例子的接线图

出0入0汤圆

发表于 2005-12-10 00:06:28 | 显示全部楼层
顶一下!!!

出0入0汤圆

发表于 2006-2-26 22:20:52 | 显示全部楼层
用PROTEUS仿真怎么不行呢?

出0入0汤圆

发表于 2006-2-26 22:28:49 | 显示全部楼层
不好意思,makefile写错了。现在可以了,Buzzer效果没有Speaker好。谢谢!

点击此处下载armok01104266.rar

出0入0汤圆

 楼主| 发表于 2006-2-27 08:53:22 | 显示全部楼层
想学习上传图片,怎么也学不会


-----此内容被lcqqcl于2006-02-27,08:54:41编辑过

出0入0汤圆

发表于 2006-2-27 12:41:32 | 显示全部楼层
频率和声调的对应关系是谁提供?蜂鸣器厂家吗?

还是自己一点一点试验出来的?

出0入0汤圆

发表于 2006-2-27 13:31:34 | 显示全部楼层
论坛上例子中应该有频率表的

出0入0汤圆

发表于 2006-3-25 10:01:27 | 显示全部楼层
楼主用的是 ICC AVR 还是 GCC AVR ?

出0入0汤圆

发表于 2006-3-27 08:46:15 | 显示全部楼层
GCC

出0入0汤圆

发表于 2006-3-27 09:20:45 | 显示全部楼层
楼主能不能把原理跟我们讲讲啊...

还有就是有些函数比如timer_enable_int(0<<TOIE1);早头文件里好象找不到的啊...

菜鸟路过,特请大虾指点一二...

出0入0汤圆

发表于 2006-4-12 11:13:28 | 显示全部楼层
好!

出0入0汤圆

发表于 2006-9-13 16:24:36 | 显示全部楼层
...

出0入0汤圆

发表于 2006-9-13 17:56:27 | 显示全部楼层
哈哈,正好用得上

出0入0汤圆

发表于 2006-10-23 10:13:36 | 显示全部楼层
好东东!

出0入0汤圆

发表于 2006-11-21 14:11:53 | 显示全部楼层
我刚开始学习AVR,用的是ICC,怎么改呢

出0入0汤圆

发表于 2006-11-23 09:01:12 | 显示全部楼层
回去改改在ICC上试下

出0入0汤圆

 楼主| 发表于 2007-3-26 11:07:18 | 显示全部楼层
我用的是WINAVR

找一个音乐的频率表就可以了

其实很简单

蜂鸣器用的就是开发板上面的

出0入0汤圆

发表于 2007-5-22 17:57:29 | 显示全部楼层
呵呵,刚好试一下

出0入0汤圆

发表于 2007-5-22 19:25:38 | 显示全部楼层
好东西,收藏了

出0入0汤圆

发表于 2007-5-22 20:00:28 | 显示全部楼层
多谢分享。

正差一个歌曲实例,尝试移植到SMALL RTOS。

出0入0汤圆

发表于 2007-5-22 20:50:17 | 显示全部楼层
这样写出来的只能是算是音调,我曾一个下午将八首当时流行的歌曲用汇编写出来,放出来与人唱歌相差甚远

出0入10汤圆

发表于 2007-5-22 21:09:58 | 显示全部楼层
曾经用51玩过proteus中的类似范例,至今不明白其中的道理。

楼主能否把频率和音调的关系说一下,好让我们方便入门。。。

出0入0汤圆

发表于 2007-5-28 15:10:49 | 显示全部楼层
我改用Amega32后,除了makefile文件中的MCU改为32的,还有什么要改的?怎么我编译时总有错误?

哪位大虾指点一二?

出0入0汤圆

发表于 2007-5-30 15:57:19 | 显示全部楼层
好东西!收下了.辛苦了,楼主,

出0入0汤圆

发表于 2007-10-21 10:12:25 | 显示全部楼层
我用的是2006.4.21版本,但怎么找也找不到“timer_enable_int”这个函数
是不是我的版本不对啊

出0入0汤圆

发表于 2008-3-22 21:13:08 | 显示全部楼层
顶一下啊

出0入0汤圆

发表于 2008-3-22 21:31:27 | 显示全部楼层
这样的程序不适合用在实际的系统中.如一个时钟系统,动态扫描LED显示时间,整点放音乐,试试看,音乐肯定变味了.

出0入0汤圆

发表于 2008-3-23 17:09:20 | 显示全部楼层
哈哈,学习。

出0入0汤圆

发表于 2008-4-25 13:04:08 | 显示全部楼层
下次上机课我调试一 下!

出0入0汤圆

发表于 2008-8-16 16:32:26 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2008-8-16 16:32:26 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2008-8-16 16:32:27 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2008-8-16 16:32:27 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2008-8-16 16:32:27 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2009-4-11 14:32:09 | 显示全部楼层
我也想让我的机子响起来、唱起来哈

出0入0汤圆

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

出0入0汤圆

发表于 2009-7-28 14:50:37 | 显示全部楼层
好玩

出0入0汤圆

发表于 2009-8-13 12:54:18 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-8-13 13:45:23 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2009-8-18 20:08:32 | 显示全部楼层
学习中!

出0入0汤圆

发表于 2009-8-23 21:20:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-11 16:31:09 | 显示全部楼层
学习一下...

出0入0汤圆

发表于 2009-12-12 14:53:17 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2009-12-12 18:07:25 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-9-11 21:57:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-1 21:18:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-6 21:31:45 | 显示全部楼层
mark
头像被屏蔽

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-6 15:45

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

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