找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机蜂鸣器小程序

[复制链接]
跳转到指定楼层
楼主
ID:380546 发表于 2018-7-29 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前学习的时候做的
用的3个 字符的方式拆分的歌曲
请多指教
#include <reg52.h>   
#define uchar unsigned char
sbit      beep=P3^6;          //定义蜂鸣器输出端口
uchar timer0h,timer0l,time;

                         //世上只有妈妈好  数据表
code uchar sszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,
                      6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,
                      6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,
                      5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,
                      2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0
                                      };
                         // 音阶频率表 高八位
code uchar FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
                    0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
                    0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
                    0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;
                         // 音阶频率表 低八位
code uchar FREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
                    0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
                    0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
                    0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
void delay(uchar t)                  // 延时函数
{
        uchar t1;
        unsigned long t2;
        for(t1=0;t1<t;t1++)
        {
                for(t2=0;t2<8000;t2++);
        }
        TR0=0;
}
void song()                                 //  音乐处理函数
{
        TH0=timer0h;
        TL0=timer0l;
        TR0=1;
        delay(time);                       
}
/******************************************************************
                                          主函数                                      
******************************************************************/
void main(void)
{
        uchar k,i;
        TMOD=1;                         //置CT0定时工作方式1
        EA=1;
        ET0=1;                                //IE=0x82 //CPU开中断,CT0开中断
        while(1)
        {
                i=0;  
                while(i<100)                                  //音乐数组长度 ,唱完从头再来  
                {              
                        k=sszymmh[i]+7*sszymmh[i+1]-1;
                        timer0h=FREQH[k];
                        timer0l=FREQL[k];
                        time=sszymmh[i+2];
                        i=i+3;
                        song();
                }
        }
}
void t0int() interrupt 1                //定时器中断函数
{
        TR0=0;
        beep=!beep;
        TH0=timer0h;
        TL0=timer0l;
        TR0=1;
}

世上只有妈妈好.zip

10.86 KB, 下载次数: 5, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:377872 发表于 2018-7-29 21:35 | 只看该作者
厉害,学到了
回复

使用道具 举报

板凳
ID:261485 发表于 2018-7-29 23:26 | 只看该作者
谢谢楼主咯
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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