登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 51单片机演奏《打上花火》

[复制链接]
发表于 2021-1-16 19:05:47 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 编写代码,演奏《打上花火》,不过乐谱过长,导致内存溢出,第三段演奏会出问题,要是每段单独放的话,就没问题,不幸的是注释复制过来的时候乱码了^_^
开始时间: 2021-01-16
结束时间:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^5;
uchar bR0H,bR0L,beat;

code uchar music[]={
2,3,2,     3,3,2,      5,3,2,    1,3,2,   
2,3,2,     3,3,2,      5,3,2,    1,3,2,
2,3,2,     3,3,2,      5,3,2,    6,3,2,
2,3,2,     3,3,2,      6,2,2,    1,3,2,
2,3,2,     3,3,2,      5,3,2,    1,3,2,
2,3,2,     3,3,2,      5,3,2,    1,3,2,
2,3,2,     3,3,2,      5,3,2,    6,3,2,
2,3,2,     3,3,2,      6,2,2,    1,3,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,2,      5,1,2,    1,2,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,2,      5,2,2,    1,2,2,
2,2,2,     3,2,3,
       
3,2,2,  5,2,2,  6,2,4,        1,3,2,        2,3,3,        1,3,3,         5,2,2,        4,2,2,        3,2,2,        5,2,2,        7,2,2,        1,3,4,
1,3,2,        7,2,2,        6,2,4,        1,3,3,        7,2,2,        5,2,2,        5,2,5,       
3,2,2,  5,2,2,  6,2,4,        1,3,2,        2,3,3,  1,3,2,         5,2,2,        4,2,2,        3,2,2,        5,2,2,        7,2,2,        1,3,5,
1,3,2,        7,2,2,        6,2,4,        1,3,3,        7,2,2,        5,2,2,        5,2,2,        6,2,5,
6,2,2,        7,2,2,        1,3,4,        7,2,2,        6,2,2,        7,2,2,        1,3,4,
7,2,2,        6,2,2,        7,2,2,        1,3,2,        7,2,2,        5,2,2,        6,2,2,        5,2,2,        1,2,2,        1,2,2,        6,2,2,        5,2,2,        1,2,2,        2,2,2,        2,2,2,        3,2,6,
6,2,2,        7,2,2,        1,3,3,        7,2,2,        6,2,2,        7,2,2,        1,3,3,
7,2,2,        6,2,2,        7,2,2,        1,3,2,        2,3,2,        3,3,2,        4,3,3,        1,3,2,        1,3,2,        2,3,2,        3,3,2,        2,3,2,        1,3,2,        1,3,5,*/

3,3,2,  5,3,1,  3,3,1,  2,3,2,  1,3,2,  6,2,2,  1,3,1,  2,3,4,
3,3,2,  5,3,1,  3,3,1,  2,3,2,  1,3,2,  5,2,2,  1,3,1,  1,3,4,
3,3,2,  5,3,1,  3,3,1,  2,3,4,
3,3,2,  5,3,1,  5,3,2,  6,3,2,  5,3,2,  4,3,1,  3,3,5,
3,3,2,  5,3,1,  3,3,1,  2,3,2,  1,3,2,  6,2,2,  1,3,1,  2,3,4,
3,3,2,  5,3,1,  3,3,1,  2,3,2,  1,3,2,  5,2,2,  1,3,1,  1,3,4,
1,3,1,  7,2,1,  6,2,1,  7,2,2,  6,2,2,  6,2,2,  2,3,2,  7,2,2,  6,2,2,  7,2,2,  7,2,2,  1,3,6
};

code uchar FREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,

0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF} ;
//ò&#244;·&#251;&#198;μ&#194;ê±í£&#172;&#203;&#196;&#184;&#246;8&#182;è7&#189;×£&#172;&#184;&#223;8&#206;&#187;
code uchar FREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,

0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};
//ò&#244;·&#251;&#198;μ&#194;ê±í£&#172;&#203;&#196;&#184;&#246;8&#182;è7&#189;×£&#172;μí8&#206;&#187;

/***********************************************************************************************************

ò&#244;·&#251;&#198;μ&#194;ê&#188;&#198;&#203;&#227;£o T = 65536 - 1/Fr/2/MC

T£o òa&#203;&#227;μ&#195;μ&#196;&#182;¨ê±&#198;÷3&#245;&#214;μ

Fr: &#184;÷ò&#244;&#189;×&#182;&#212;ó|μ&#196;&#198;μ&#194;ê

MC£oò&#187;&#184;&#246;&#187;ú&#198;÷&#214;ü&#198;ú&#203;ùDèμ&#196;ê±&#188;&#228; £&#172;11.0592MHzμ&#196;&#190;§&#213;&#241;&#182;&#212;ó|μ&#196;&#187;ú&#198;÷&#214;ü&#198;ú&#206;a1.085|ìs£&#172;&#212;&#188;&#206;a1

ày£oμíò&#244;Do&#182;&#212;ó|μ&#196;&#198;μ&#194;ê&#206;a262Hz,&#212;òT = 65536 - 1/2/1.085/262*(10^6)=63777,&#182;&#212;ó|ê&#174;áù&#189;&#248;&#214;&#198;êy&#206;aF9-21£&#172;·&#214;&#182;&#206;D′&#189;&#248;TH0oíTL0

************************************************************************************************************/
void delay(uchar t)
{
        uchar t1;
       
        unsigned long t2;
       
        for(t1=0;t1<t;t1++)
       
        {
                for(t2=0;t2<3200;t2++);
        }

        TR0=0;
}
//&#189;ú&#197;&#196;oˉêy£&#172;1t&#206;a1/4&#197;&#196;

void delay(uchar t);

void play()
{
        TH0=bR0H;
       
        TL0=bR0L;
       
        TR0=1;
       
        delay(beat);
}
//2¥·&#197;oˉêy

void play();

void main()
{
        uchar J,K;//JK&#194;&#239;£&#172;dddd
        TMOD=1;
        EA=1;
        ET0=1;
        EX0=1;
        //&#182;¨ê±&#198;÷&#197;&#228;&#214;&#195;
while(J<=450)//&#199;ú&#198;×êy×éêy£&#172;&#209;Y×àíê×&#212;&#182;ˉ&#214;&#216;&#184;′£&#172;&#190;Y&#199;ú&#198;×&#182;&#248;&#182;¨
        {
                J=0;  //è&#161;êy×éμúò&#187;&#206;&#187;
                while(1)
                {              
                        K=music[J]+music[J+1]*7-1;//&#190;-&#212;&#203;&#203;&#227;ê&#228;3&#246;k&#206;aò&#244;·&#251;oíò&#244;&#184;&#223;&#214;μ£&#172;ò2&#190;íê&#199;&#182;¨&#206;&#187;freqμ&#196;7*4&#190;&#216;&#213;óà&#239;μú&#188;&#184;&#184;&#246;μ&#196;Dòo&#197;
                       
                        bR0H=FREQH[K];
                       
                        bR0L=FREQL[K];
                       
                        beat=music[J+2];//&#189;ú&#197;&#196;êy&#206;aêy×éμúèy&#206;&#187;
                       
                        J=J+3; //í&#172;j=0

                        play();                       
                }       
        }
}

void t0int() interrupt 1
{
        TR0=0;
       
        beep=~beep;
       
        TH0=bR0H;
       
        TL0=bR0L;
       
        TR0=1;
}
//&#182;¨ê±&#198;÷&#214;D&#182;&#207;oˉêy



好懒~~不想说~~~
发表于 2021-1-17 18:07:04 | 显示全部楼层
上传代码的时候可以选择“代码”格式
1.jpg
好懒~~不想说~~~
发表于 2021-1-17 18:14:35 | 显示全部楼层
STC12C5A60S2 SRAM空间1280字节  内存溢出的可能性不大  你描述的这个问题需要考虑你定义变量的数据类型是否合适  如定义的变量“beat"是uchar类型占一个字节 最大255  实际这首歌节拍数是否已经大于255个节拍
好懒~~不想说~~~
 楼主| 发表于 2021-1-17 20:27:07 | 显示全部楼层
危言危行 发表于 2021-1-17 18:14
STC12C5A60S2 SRAM空间1280字节  内存溢出的可能性不大  你描述的这个问题需要考虑你定义变量的数据类型是 ...

不是,这个用的是STC89C52RC的芯片。还是谢谢指教啦
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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