找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 797|回复: 3
打印 上一主题 下一主题
收起左侧

有人可以帮改一下这个程序吗?不知道怎么改

[复制链接]
跳转到指定楼层
楼主
ID:1137966 发表于 2024-11-28 20:03 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
sbit SPK = P1 ^ 2;    //定义喇叭接口
sbit KEY = P3 ^ 3;    //设置独立按键INT1,按下按键时切换歌曲
sbit LED = P1 ^ 7;    //用于切换歌曲的显示,当LED = 1时播放铃儿响叮当,否则播放Spider Dance
int Timer0_H, Timer0_L, Time; //定义定时器变量和时间变量

code unsigned char MUSIC1[] = { //歌曲“铃儿响叮当”的乐谱,每个音由3个变量构成,前两个变量用来确定音乐频率,第三个变量确定持续时间
    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”的乐谱,如果前两个变量为(0,0)时则为空拍
    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行频率为低两个8度的音,第1行频率为低一个8度的音,第2行为正常音,第3行为高8度的音
                                //(抱歉,乐理基础没学好,音的标准说法忘了咋说了,懂意思就好)
                                // 比如说正常音la,持续时间为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)  //延迟函数
{
    while (--t)
    {

    }
}
void DelayMs(unsigned char t) //延迟时间函数,略微修改,时间不准
{
    while (--t)
    {
        DelayUs2x(245);
    }
}
void delay(unsigned char t)  //延迟时间函数
{
    unsigned char i;
    for (i = 0; i < t; i++)
        DelayMs(125);
    TR0 = 0;
}

void Init_Timer0(void) //定时器初始化函数
{
    TMOD |= 0x01; //模式1,16位定时器/计数器
    EA = 1; //总中断打开
    ET0 = 1; //定时器中断打开
}
void TIM0_ISR() interrupt 1  //定时器中断函数,用于读取音符频率值,产生对应的音符
{
    TR0 = 0; //定时器暂停
    SPK = !SPK; //喇叭反转
    TH0 = Timer0_H; //重置定时
    TL0 = Timer0_L;
    TR0 = 1; //定时器开始
}

void Song()
{
    if (Timer0_H == -1 && Timer0_L == -1) //空拍判断,喇叭不发声
    {
        delay(Time);
    }
    else
    {
        TH0 = Timer0_H;  //重置定时
        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) //播放“铃儿响叮当”
        {
            while (i < 76) //这个数字是MUSIC数组里的变量数
            {
                k = MUSIC1[i] + 7 * MUSIC1[i + 1] - 1;//频率位置,用两个变量进行判断
                Timer0_H = FREQH[k];// 获取频率高八位
                Timer0_L = FREQL[k];// 获取频率低八位
                Time = MUSIC1[i + 2];// 获取持续时间
                i += 3;
                Song();
                if (!KEY) //判断独立按键按下
                {
                    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;
                }
            }
        }
    }
}


错误: 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 踩
回复

使用道具 举报

沙发
ID:878061 发表于 2024-11-29 08:11 | 只看该作者
我帮你试过了,程序编译没有问题,编译直接通过

1.png (142 KB, 下载次数: 0)

1.png
回复

使用道具 举报

板凳
ID:136485 发表于 2024-11-29 08:43 | 只看该作者
我编译是可以通过啊,你要改成什么样都不说明,别人怎么帮你改
回复

使用道具 举报

地板
ID:584814 发表于 2024-11-29 14:41 | 只看该作者
编译正常通过,蛔虫知道答案
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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