【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【源码】用8051MCU做的简易电子琴

共6条 1/1 1 跳转至

【源码】用8051MCU做的简易电子琴

工程师
2020-02-28 18:31:27    评分

相信大家对音乐还是有点感兴趣吧!

奉上一个用8051 单片机做的简易电子琴,源码如下:


#include <reg51.h>


sbit K1=P1^4;

sbit K2=P1^5;

sbit K3=P1^6;

sbit K4=P1^7;

sbit K5=P3^2;

sbit K6=P3^3;

sbit K7=P3^4;

sbit Bee=P3^7;                        //蜂鸣器所在

//定义七个基本音节

unsigned int Music_7[]={262,294,330,349,392,440,494};

//定义高音的七个音节,因为按键不够暂时不用,可以在Proteus仿真中使用

//unsigned int Music_7_H[]={523,587,659,698,784,880,988};

unsigned char th,tl;

void InitTimer0(void)

{

    TMOD = 0x01;

    TH0 = 0x0F8;

    TL0 = 0x18;

    EA  = 1;

    ET0 = 1;

                Bee  =1;        //关闭蜂鸣器,因为这蜂鸣器跟喇叭不同,只要上电就他娘的响

                TR0 = 0;        //关闭定时器,防止一开机就嗷嗷的响

}


        void set_music(unsigned char i)

        {

                th=(65536-(1000000/Music_7[i]))/256;

                tl=(65536-(1000000/Music_7[i]))%256;

                TH0=th;

                TL0=tl;                

        }


void delay1s(void)   //误差 0us

{

    unsigned char b,c;

    for(c=180;c>0;c--)

        for(b=250;b>0;b--)

           ;


}

        

void main(void)

{

  InitTimer0();


        while(1)

        {

                if(K1==0)

                        {

                        set_music(0);

                while(K1==0);

                                {

                                        TR0=1;                        //启动定时器开始演奏音乐

                                        delay1s();        //每次触发大概1秒,后续可修改为松手停止响。这里可以换成松手检测就可以了

                                        TR0=0;                        //关闭定时器,停止音律响

                                        Bee=1;                        //关闭蜂鸣器,防止一直嗷嗷响,如果用的是喇叭就可以忽略这个。

                                }

                        }


                if(K2==0)

                        {

                        set_music(1);

                while(K2==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }        


                if(K3==0)

                        {

                        set_music(2);

                while(K3==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }


                if(K4==0)

                        {

                        set_music(3);

                while(K4==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }


                if(K5==0)

                        {

                        set_music(4);

                while(K5==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }


                if(K6==0)

                        {

                        set_music(5);

                while(K6==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }


                if(K7==0)

                        {

                        set_music(6);

                while(K7==0);

                                {

                                        TR0=1;

                                        delay1s();

                                        TR0=0;

                                                Bee=1;

                                }

                        }

                        

        }

}


void Timer0Interrupt(void) interrupt 1

{

    TH0 = th;

    TL0 = tl;

    Bee = ~Bee;


}





关键词: 电子琴     源码     开源     8051     MCU    

助工
2020-02-28 18:44:43    评分
2楼

给力,学习学习。


助工
2020-02-28 20:30:47    评分
3楼

代码很简洁


工程师
2020-02-28 20:33:41    评分
4楼

楼主的动手能力很强哦


助工
2020-02-28 21:22:57    评分
5楼

音质如何?


助工
2020-02-28 21:26:44    评分
6楼

有对应原理图不? 有就更好了!


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]