精华内容
下载资源
问答
  • 基于51单片机电子琴设计
    千次阅读
    2021-12-09 18:32:15

    1. 设计要求

    设计一个电子琴。利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。

    2.Proteus仿真

    在这里插入图片描述

    程序

    #include "reg52.h"
    
    #define uchar unsigned char
    #define uint unsigned int 
    	
    sbit Int0 = P3^2;
    sbit SPK = P3^3;
    
    unsigned char code freq[][2]={
    0xD8,0xF7,//00440HZ 1
    0xBD,0xF8,//00494HZ 2
    0x87,0xF9,//00554HZ 3
    0xE4,0xF9,//00587HZ 4
    0x90,0xFA,//00659HZ 5
    0x29,0xFB,//00740HZ 6
    0xB1,0xFB,//00831HZ 7
    0xEF,0xFB,//00880HZ `1
    };
    
    uchar High,Low; //定时器预装值的高8位和低8位
    uchar num;
    
    uint delay_flag;
    
    void delay(uint i)
    {
    	while(i--);
    }
    
    
    void delay10ms(void)   
    {
        unsigned char a,b,c;
        for(c=5;c>0;c--)
            for(b=4;b>0;b--)
                for(a=248;a>0;a--);
    }
    
    void Timer0_Init()
    {
    	TMOD |= 0x11;
    	EA=1; //总中断打开
    	ET0=1; //定时器中断打开
    	TR0=0; //定时器开关关闭
    
        TH1 = 0x0D8;	//定时器1,用作延时。
        TL1 = 0x0F0;
        EA = 1;
        ET1 = 1;
        TR1 = 0;
    }
    
    
    void Int0Init()	//外部中断0
    {
    	//设置INT0
    	IT0=1;//跳变沿出发方式(下降沿)
    	EX0=1;//打开INT0的中断允许。	
    	EA=1;//打开总中断	
    }
    
    void into_Int0()
    {
    	Int0 = 1;
    	delay10ms();
    	Int0 = 0;
    }
    void KeyDown()
    {
    	char a=0;
    	P1=0xff;
    	if(P1!=0xff)//读取按键是否按下
    	{
    		delay(1000);//延时10ms进行消抖
    		if(P1!=0xff)//再次检测键盘是否按下
    		{	
    			//测试列
    			P1=0xff;
    			switch(P1)
    			{
    				case 0xfe:num= 1;break;
    				case 0xfd:num= 2;break;
    				case 0xfb:num= 3;break;
    				case 0xf7:num= 4;break;
    				case 0xef:num= 5;break;
    				case 0xdf:num= 6;break;
    				case 0xbf:num= 7;break;
    				case 0x7f:num= 8;break;
    			}
    			while((a<50)&&(P1!=0xff))	 //检测按键松手检测
    			{
    				delay(1000);
    				a++;
    			}
    			into_Int0();
    		}
    	}
    }
    
    
    void main()
    {
    
    	Timer0_Init();
    	Int0Init();	
    	SPK=0; //在未按键时,蜂鸣器置低
    	while (1)
    	{
    		KeyDown();
    	}
    }
    void Int()	interrupt 0		//外部中断0的中断函数
    {
    	High=freq[num-1][1];
    	Low =freq[num-1][0];
    	TH1 = 0x0D8;
        TL1 = 0x0F0;
        delay_flag = 0;
    	TR0 = 1;
    	TR1 = 1;
    }
    
    void Timer0_isr(void) interrupt 1
    {
    	TH0=High;
    	TL0=Low;
    	SPK=!SPK;
    }
    
    void Timer1Interrupt(void) interrupt 3
    {
        TH1 = 0x0D8;
        TL1 = 0x0F0;
        delay_flag++;
    	if(delay_flag==100)
    	{
    		delay_flag = 0;
    		TR1 = 0;
    		TR0 = 0;
    	}
    }
    
    

    仿真、51工程文件

    文件下载

    更多相关内容
  • C51单片机电子琴

    2018-04-14 11:24:51
    C51单片机开发的电子琴, 电子钟,矩阵键盘,秒表代码
  • 51单片机电子琴

    2017-09-07 10:18:10
    基于51单片机 ,用C语言编程, 矩阵键盘 ,演奏曲子,即实现电子琴功能。并且可以通过LED阵显示音阶
  • 此设计利用了STC芯片的按键控制和计时器溢出中断控制频率的原理,实现了按下各按键输出不同频率的方波信号的目的。此电路板可用一根AUX线连接音响设备来达到输出的效果。按着SW键可升一个八度,旋钮可调节输出音量。
  • 51单片机 电子琴

    2015-09-21 22:26:52
    使用51单片机驱动蜂鸣器或喇叭奏乐内有多首简单的乐曲以及各个音阶。
  • 该设计采用AT89C51(AT89C51数据手册)单片机作为主控制芯片,外接灯光闪烁功能和8音调键。
  • 8音键电子琴介绍: 该设计采用AT89C52(AT89C52数据手册)单片机作为主控制芯片,外接灯光闪烁功能和8音调键。共有8个音节和4个功能按键。可播放内置乐曲,可弹奏录音,采用24C02(24C02数据手册)芯片作为EEPROM存储...
  • 可以通过7个按键发出不同频率的声音,实现电子琴的效果,能进行正常弹奏,对于联系单片机发声有很大的帮助。
  • 已通过编程调试,能正确实现各项功能 #define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz #define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz #define l_mi 311 //将“l_mi”宏定义为低音“3”...
  • 51单片机做的自制电子琴,比较简单,代码全部都有,有部分实物图。有8个音,还有9首歌曲,可以切换自动播放歌曲,也可以手动弹
  • 51单片机电子琴.zip

    2021-11-05 20:05:51
    包括keil和protues,导入hex就可用
  • 这是一个基于51电子琴proteus仿真展示及源码。里面源码有中文介绍;乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。
  • 包含源程序、原理图、仿真、元器件清单等。
  • 51单片机电子琴程序

    2014-03-17 00:22:53
    该文档为用51单片机及蜂鸣器来模拟电子琴的程序。
  • 51单片机电子琴设计

    2022-03-19 17:29:57
    51单片机实战简易电子琴

    前言:单片机入门实践操作,本系统是以51系列单片机AT89C51为主控制器,附有独立阵键盘、LED显示管、扬声器组成。系统完成显示输入信息、播放相应音符等基本功能。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值

    1. 设计目标:设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等八个音符。
      使用元件:AT89C51、LM386,喇叭,按键等

    2. 设计思路:程序设计的思路按以下顺序进行:
      1. 分析与确定程序总体设计目标
      2. 将总体目标划分为若干模块
      3. 定义每个模块的具体任务,明确它与其他模块间的通信方式
      4. 编写源程序,进行调试

    3. 设计原理
      对于单片机定时器来说,每给它装特定的初值就会相应的产生多长时间的中断,进而利用高低电平 在其输出端送到扬声器上即可产生正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值如下:
      在这里插入图片描述
      在这里插入图片描述
      由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。(实物焊接出来的频率稍微偏差,以实际为准调节)
      在这里插入图片描述

    4. 系统硬件图
      在这里插入图片描述
      总结:
      本次设计中单片机晶振为11.0592MHZ,那么定时器的计数周期为11.0592/12MHZ,假如选择工作方式1,那T值便为T= 216–5﹡105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值即可。
      (如果错误,欢迎批评指正,请大佬轻喷)

    仿真图和代码在我的资源中下载即可,内附完整的报告和代码

    展开全文
  • 。本系统设计是以51系列单片机AT89S52为主芯片,附有矩阵键盘、LED显示管、扬声器组成,系统完成显示输入信息、播放相应音符等基本功能。 附件为C代码。
  • 包含源程序、原理图、仿真等文件
  • 主要功能:电子琴共有七个按键,当按不同的按键时 会发出七种不同的声音
  • 51单片机电子琴课设

    2018-06-29 16:11:03
    51单片机电子琴,目的:用矩阵键盘输入1-8的音符,然后最后两个按钮按下的时候播放音乐,共有两个音乐,一闪一闪亮晶晶和两只老虎。
  • 本课题就是以AT89C51单片机为核心控制元件设计的一个简易的电子琴,这只是单片机应用的一个点,由点及面,希望能更好的了解和应用单片机技术。选用这个课题的目的在于通过日常生活中的细微之处着手,将所学的理论...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 747
精华内容 298
关键字:

51单片机电子琴