文档介绍:姓名:班级:学号:小班学号:同组:电子:实验课题:基于AVR单片机电子琴的制作实验日期:—:一、.....................................................................……………………….……………………………………......................................................................4二、:ATmega16单片机...........................................................................................................…………………………………………………………………..6三、………………………………………………………………………………………………………………………………………………………………………………………………8四、……………………………………………………….……………………………………………….…………………………………………………….………………………………………………………………….12五、实验中的排错、………………………………………………………..………………………………………………………………..…………………………………………………………………….…………………………………………………………………….15六、………………………………………………………………………………………………………………………………………………………………………………………………………….……………………………………………………………………………………………………………………….30一、。使其能够通过键盘控制实现播放预存音乐,弹奏、储存弹奏音乐,变速播放,暂停及继续播放,停止播放功能。。频率即表示每秒钟振动的次数,采用CTC方式时avr单片机通过特定的端口(PD4及PD5)输出一定频率的方波,TCCR1A设为比较匹配时OC1A/OC1B电平取反,TCCR1B的计数上限为OC1A,A=f/2N(1+OCRnA)计算出7个频率音阶所需的OCR1A,则只需将喇叭接在PD4或PD5,通过程序控制端口输出特定频率的方波波形(发声使用正弦波最好,方波效果稍次但影响不大),喇叭就会发出七种不同的声音,依照人听觉分辨7个音阶分为三组,分别为高,中,低音阶频率,经计算可得,当OCR1A=(8000000/musicmem[i]-1)时,{131,147,165,175,196,220,247}存放低音阶频率,{262,294,330,349,392,440,494}存放中音阶频率,{524,588,660,698,784,880,988}则存放高音阶频率,所以需要定义三个数组存放各音阶的频率值。除了音符频率以外还需要音长,所以定义两个数组表示一段音乐,第一个表示频率,第二个表示音长,播放时先访问频率数组,使喇叭发声,之后访问音长数组,确定喇叭发声时间。而有了音符频率数组,只要再得到任意一首歌的简谱,就可以将其转化为两个数组的形式,由音符对应的频率得出频率数组,然后再根据每个音符的音长,将其通过乐曲的节拍和音符的拍数计算出音符持续时间即可得出音长数组。下面我们举例来看《两只老虎》的简谱:图一《两只老虎》简谱图①音符数组为:uintsound[32]={262,294,330,262,262,294,330,262,330,349,392,330,349,392,392,440,392,349,330,262,392,440,392,349,330,262,294,196,262,294,196,262};②音长数组为:uinttime[32]={500,500,500,500,500,500,500,500,500,500,1000,500,500