找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 817|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

有人可以幫改一下這個(gè)程序嗎?不知道怎么改

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1137966 發(fā)表于 2024-11-28 20:03 來(lái)自手機(jī) | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg52.h>
sbit SPK = P1 ^ 2;    //定義喇叭接口
sbit KEY = P3 ^ 3;    //設(shè)置獨(dú)立按鍵INT1,按下按鍵時(shí)切換歌曲
sbit LED = P1 ^ 7;    //用于切換歌曲的顯示,當(dāng)LED = 1時(shí)播放鈴兒響叮當(dāng),否則播放Spider Dance
int Timer0_H, Timer0_L, Time; //定義定時(shí)器變量和時(shí)間變量

code unsigned char MUSIC1[] = { //歌曲“鈴兒響叮當(dāng)”的樂(lè)譜,每個(gè)音由3個(gè)變量構(gòu)成,前兩個(gè)變量用來(lái)確定音樂(lè)頻率,第三個(gè)變量確定持續(xù)時(shí)間
    3,2,2,3,2,2,  3,2,4,  3,2,2,3,2,2,  3,2,4,
    3,2,2,5,2,2,  1,2,3,2,2,1,  3,2,8,
    4,2,2,4,2,2,  4,2,2,4,2,2,  4,2,2,3,2,2,  3,2,2,3,2,2,
    5,2,2,5,2,2,  4,2,2,2,2,2,  1,2,4,  1,3,4, 0,0,0
};
code unsigned char MUSIC2[] = { //歌曲“Spider Dance”的樂(lè)譜,如果前兩個(gè)變量為(0,0)時(shí)則為空拍
    6,3,4,   3,3,4,   1,3,4,   6,2,4,
        0,0,2,   2,3,2,          2,3,2,   0,0,4,   2,3,2,   1,3,2,   5,2,2,   6,2,2,
        0,0,2,   3,3,2,   2,3,2,   1,3,2,   2,3,2,   3,3,2,   5,2,2,   6,2,2,
        1,3,2,   6,2,2,   5,2,2,   6,3,2,   0,0,2,   5,3,2,   3,3,1,   2,3,1,   1,3,2,
        6,2,4,   4,2,4,   7,2,4,   4,2,4,
        1,3,4,   4,2,4,   2,3,8,
        3,3,4,   2,3,4,   6,3,4,   3,3,4,
        5,3,4,   4,3,4,   3,3,4,   0,0,4,
        6,3,2,         3,4,2,          2,4,2,   3,4,2,   6,3,2,         3,4,2,          2,4,2,   3,4,2,
        3,3,2,         2,4,2,          2,4,2,   2,4,2,        3,3,2,         3,4,2,          7,3,2,   2,4,2,
        6,3,2,         3,4,2,          2,4,2,   3,4,2,   7,3,2,         3,4,2,          2,4,2,   3,4,2,
        1,4,2,         3,4,2,          2,4,2,   3,4,2,        2,4,2,         4,4,2,          3,4,2,   4,4,2,
        4,3,2,         1,4,2,          7,3,2,   1,4,2,        4,3,2,         2,4,2,          1,4,2,   2,4,2,
        4,3,2,         3,4,2,          2,4,2,   3,4,2,        4,3,2,         4,4,2,          3,4,2,   4,4,2, 0,0,0


};

code unsigned char FREQH[]= { //頻率表前八位,第0行頻率為低兩個(gè)8度的音,第1行頻率為低一個(gè)8度的音,第2行為正常音,第3行為高8度的音
                                //(抱歉,樂(lè)理基礎(chǔ)沒(méi)學(xué)好,音的標(biāo)準(zhǔn)說(shuō)法忘了咋說(shuō)了,懂意思就好)
                                // 比如說(shuō)正常音la,持續(xù)時(shí)間為2,那就是(6,2,2)
    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
};

code unsigned char  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
};

void DelayUs2x(unsigned char t)  //延遲函數(shù)
{
    while (--t)
    {

    }
}
void DelayMs(unsigned char t) //延遲時(shí)間函數(shù),略微修改,時(shí)間不準(zhǔn)
{
    while (--t)
    {
        DelayUs2x(245);
    }
}
void delay(unsigned char t)  //延遲時(shí)間函數(shù)
{
    unsigned char i;
    for (i = 0; i < t; i++)
        DelayMs(125);
    TR0 = 0;
}

void Init_Timer0(void) //定時(shí)器初始化函數(shù)
{
    TMOD |= 0x01; //模式1,16位定時(shí)器/計(jì)數(shù)器
    EA = 1; //總中斷打開(kāi)
    ET0 = 1; //定時(shí)器中斷打開(kāi)
}
void TIM0_ISR() interrupt 1  //定時(shí)器中斷函數(shù),用于讀取音符頻率值,產(chǎn)生對(duì)應(yīng)的音符
{
    TR0 = 0; //定時(shí)器暫停
    SPK = !SPK; //喇叭反轉(zhuǎn)
    TH0 = Timer0_H; //重置定時(shí)
    TL0 = Timer0_L;
    TR0 = 1; //定時(shí)器開(kāi)始
}

void Song()
{
    if (Timer0_H == -1 && Timer0_L == -1) //空拍判斷,喇叭不發(fā)聲
    {
        delay(Time);
    }
    else
    {
        TH0 = Timer0_H;  //重置定時(shí)
        TL0 = Timer0_L;
        TR0 = 1;  
        delay(Time);
    }
}

void main(void)
{
    unsigned char k, i;
    Init_Timer0();
    KEY = 1;
    LED = 1;
    while (1)
    {
        i = 0;
        if (LED) //播放“鈴兒響叮當(dāng)”
        {
            while (i < 76) //這個(gè)數(shù)字是MUSIC數(shù)組里的變量數(shù)
            {
                k = MUSIC1[i] + 7 * MUSIC1[i + 1] - 1;//頻率位置,用兩個(gè)變量進(jìn)行判斷
                Timer0_H = FREQH[k];// 獲取頻率高八位
                Timer0_L = FREQL[k];// 獲取頻率低八位
                Time = MUSIC1[i + 2];// 獲取持續(xù)時(shí)間
                i += 3;
                Song();
                if (!KEY) //判斷獨(dú)立按鍵按下
                {
                    while (!KEY) //判斷按鍵釋放
                    { }
                    LED = !LED; //切歌
                    break;
                }
            }
        }
        else
        {
            while (i < 280) //播放“Spider Dance”
            {
                k = MUSIC2[i] + 7 * MUSIC2[i + 1] - 1;
                Timer0_H = FREQH[k];
                Timer0_L = FREQL[k];
                Time = MUSIC2[i + 2];
                i += 3;
                Song();
                if (!KEY)
                {
                    while (!KEY)
                    { }
                    LED = !LED;
                    break;
                }
            }
        }
    }
}


錯(cuò)誤: Build target 'Target 1'
compiling aaaaa.c...
AAAAA.C(33): error C141: syntax error near ';'
AAAAA.C(34): error C141: syntax error near ';'
Target not created
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:878061 發(fā)表于 2024-11-29 08:11 | 只看該作者
我?guī)湍阍囘^(guò)了,程序編譯沒(méi)有問(wèn)題,編譯直接通過(guò)

1.png (142 KB, 下載次數(shù): 0)

1.png
回復(fù)

使用道具 舉報(bào)

板凳
ID:136485 發(fā)表于 2024-11-29 08:43 | 只看該作者
我編譯是可以通過(guò)啊,你要改成什么樣都不說(shuō)明,別人怎么幫你改
回復(fù)

使用道具 舉報(bào)

地板
ID:584814 發(fā)表于 2024-11-29 14:41 | 只看該作者
編譯正常通過(guò),蛔蟲(chóng)知道答案
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表