单片机实现电子琴并可播放歌曲
51单片机电子琴程序

#include<reg51.h>#include<absacc.h>#include<stdio.h>#include<math.h>#define uchar unsigned char#define uint unsigned intuchar STH0; //定时器计数初值uchar STL0;bit FY=0; //放乐曲时FY=1,电子琴弹奏时FY=0uchar Song_Index=0,Tone_Index=0; //放音乐的参数uchar k,key;sbit SPK=P3^7;sbit LED1=P1^0;sbit LED2=P1^1;uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6f,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79 ,0x71};uchar code Song[][50]={{1,2,3,5,7,8,4,3,4,3,4,5,4,6,3,4,5},{5,5,3,5,4,2,4,5,7,4,2,10,10,10,2,1,2,1,2,10,10},{5,5,10,9,8,5,5,5,5,10,9,8,6,6,6,11,12,9,6,8-1},{13,14,13,12,12,10,12,13,14,15,14,14},{6,6,11,10,9,12,12,12,12,13,12,11,9,8,10,10,10,-1},{9,13,13,13,13,8,13,13,13,13,14,15,14,13,13,14,12,13},};uchar code Len[][50]={{1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,2,1,2,2,1,2,2},{1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,1,-1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},{1,1,2,0,1,1,2,0,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,2,0,1,2,1,2,1,2,1,2,1,2},{2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},}; //音符与计数值对应表uint code tab[]={0,63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,65217,65252,65283};void delay1(uint ms) //播放歌曲时实现节拍的延时函数{uchar t;while(ms--) for(t=0;t<120;t++);}//键消抖延时函数void delay(void){uchar i;for(i=300;i>0;i--);}//键扫描函数uchar getkey(void){uchar scancode,tmpcode;if((P0&0xf0)==0xf0)return(0);scancode=0xfe;while((scancode&0x10)!=0){P0=scancode; //输入行扫描码if((P0&0xf0)!=0xf0) //本行有键按下{tmpcode=(P0&0xf0)|0x0f;return((~scancode)+~(tmpcode));}else scancode=(scancode<<1)|0x01;}}//外部中断0void EX0_INT() interrupt 0{FY=0;LED1=1;LED2=0;}//外部中断1,这里是播放按键void EX1_INT() interrupt 2{FY=1;LED1=0;LED2=1;}//定时器0中断服务子程序void time0_int(void) interrupt 1 using 0{TH0=STH0;TL0=STL0;SPK=!SPK;P2=DSY_CODE[k];void main(void){LED1=1;LED2=0;P2=0x3f;IE=0x87;TMOD=0x01;IT0=1;IT1=1;while(1){P0=0xf0;if((P0&0xf0)!=0xf0){delay();if((P0=0xf0)!=0xf0){key=getkey();switch(key){case 0x11:k=0;break;case 0x21:k=1;break;case 0x41:k=2;break;case 0x81:k=3;break;case 0x12:k=4;break;case 0x22:k=5;break;case 0x42:k=6;break;case 0x82:k=7;break;case 0x14:k=8;break;case 0x24:k=9;break;case 0x44:k=10;break;case 0x84:k=11;break;case 0x18:k=12;break;case 0x28:k=13;break;case 0x48:k=14;break;case 0x88:k=15;break;default:break;}if(FY==0){STH0=tab[k]/256;STL0=tab[k]%256;TR0=1;while((P0&0xf0)!=0xf0);TR0=0;}else{while(FY==1){if(Song[k][Tone_Index]==-1)Tone_Index=0;STH0=(tab[Song[k][Tone_Index]])/256;STL0=(tab[Song[k][Tone_Index]])%256;P2=DSY_CODE[Song[k][Tone_Index]];TR0=1;delay1(300*Len[k][Tone_Index]);Tone_Index++;TR0=0;}}}}}}关于“世上只有妈妈好”的单片机音乐演奏程序2009-11-22 21:45单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。
基于单片机的带音乐播放的电子琴设计

课题名称、主要内容和基本要求:进度安排:指导教师签名:评阅教师签名:毕业设计(论文)成绩:答辩委员会主任签名:摘要电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有10个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
众所周知,由于一首音乐是由许多不同的音阶组合而成的,而每个音阶则对应着不同的频率,因此我们可以利用不同的频率来进行音阶的组合,即可产生美妙的音乐了。
对于单片机来说,产生不同的频率非常方便,只要算出某一音频的周期,然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后,就将输出脉冲的I/O反相,然后重复计时,此半周期再对I/O反相,即可在I/O脚上得到此频率的脉冲。
因此我们可以利用单片机的定时器,使其工作在计数器模式MODE1下,改变计数值TH0及TL0来产生不同频率的信号。
从而产生不同的音符[1]。
关键词:音阶,频率,单片机AbstractElectronic organ is a modern electronic music technology and the product is a ne w type of keyboard instruments. It played an important role in modern music. SCM ha s powerful control functions and flexible programming characteristics. It has converge d with modern people's lives, become an irreplaceable part. The main content is AT89 S51 control of the core components, design of a electronic organ. SCM as a host to th e core, with the keyboard, speaker and other core modules. In the main control modul e has 16 keys and a speaker. The system is steady, its simple hardware circuits, softwa re functions, reliability of control system and high cost performance is its advantages. It also has certain practical and reference value.Well-known, the music is made up by many different scales, and each scale corresponds to different frequency, so we can use different frequency to make combination of scales, and then produce wonderful music.As for single-chip microcomputer, it is very convenient to produce different frequency, we just calculate an audio cycle, then this cycle divided by 2, namely half cycle time, using timer to time the half cycle time.Whenever timing, it will output pulse I/O reverse phase, and repeat the timing, the half cycle again to the I/O reversed-phase, then can get this frequency pulse from the I/O feet. So we can use microcontroller timer to make it work in the counter mode and generate different frequency signal. Thus produce different notes. Keywords: scales,frequency, single-chip microcomputer目录第一章绪论 (1)1.1电子琴的特点及研究意义 (1)1.2系统介绍 (1)第二章方案论证 (2)2.1单片机选择 (2)2.2键盘选择 (2)2.3功放电路选择 (3)第三章系统设计 (4)3.1单片机的介绍 (4)3.1.1单片机AT89S52基本知识 (4)3.1.2单片机AT89S52产品特点 (4)3.1.3单片机AT89S52的使用 (5)3.1.4单片机AT89S52的特性 (6)3.1.5AT89S52引脚功能与封装 (7)3.2LED数码管 (9)3.2.1LED数码管主要技术参数 (9)3.2.2LED数码管的引脚说明 (10)3.2.3数码管编码说明 (11)3.3LM386 (12)3.3.1LM386简介 (12)3.3.2LM386特性 (12)3.3.3LM386应用特点 (12)3.3.4LM386引脚图 (12)3.3.5LM386注意事项 (12)第四章硬件设计 (13)4.1总体电路设计 (13)4.2单片机最小系统电路 (14)4.3LM386功放电路 (14)4.4数码管显示电路 (15)4.5按键电路 (16)4.6按键指示灯电路 (17)4.7音乐产生方法 (17)第五章软件设计 (19)5.1程序流程图 (19)5.2S1-S8按键识别程序 (20)5.3S9键识别电路程序 (21)5.4音乐产生程序 (22)第六章调试过程 (26)6.1数码管显示乱码 (26)6.3按键处理问题 (26)结论 (26)参考文献 (27)谢辞 (28)附录 (29)附录一程序源代码 (29)附录二电路图 (41)第一章绪论1.1电子琴特点及研究意义本论文设计的为电子琴,电子琴又称作电子键盘,属于电子乐器(区别于电声乐器),发音音量可以自由调节。
单片机课设---带存储播放功能的简易电子琴

1.2设计任务1.3设计系统的框架二. 软件整体方案流程图三. 硬件单元电路设计3.1复位电路3.2晶振电路3.3数码管显示电路3.4键盘电路3.5扬声器电路四. 总体模块的软件设计五. 具体模块的设计流程六. 功能及展示七.设计总结附录源程序代码参考文献实物连接图1.1设计目的本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。
通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
1.2设计任务〔包括课程设计计算说明书、图纸、实物样品等要求〕利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。
其他扩展功能学生可自己添加,功能不限定与此。
(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
(2)完成电路板的组装(3)完成硬件电路的测试、以及软件的编程(4)最终完成具体的课设任务。
1.3设计系统的框架二.软件整体方案流程图三、硬件单元电路设计3.1复位电路常见的复位电路有三种形式:上电自动复位方式、按键电平复位方式和按键脉冲复位方式,本设计中采用了按键电平复位的方式,通过使RST端经电阻与VCC电源接通实现复位,电路图如图2所示。
C1图2 单片机复位电路3.2晶振电路本设计中单片机的振荡电路采用了内部时钟方式,在XTAL1和XTAL2之间跨接晶体振荡器和微调电容,组成并联谐振电路,构成稳定的自激振荡器,如图图3所示,晶体振荡器的振荡频率决定单片机的时钟频率。
此设计中振荡频率12MHz.图3 单片机晶振电路3.3数码管显示电路 1. LED 结构LED 数码管显示器,由8只发光二极管组成。
基于51单片机的简单电子琴代码

基于51单片机的简单电子琴代码#include <AT89X52.h>sbit P10=P1^0;//高音阶,红灯sbit P11=P1^1;//中音阶,黄灯sbit P12=P1^2;//低音阶,绿灯sbit P13=P1^3;//蜂鸣器控制端口sbit P31=P3^0;//低音阶按键行sbit P32=P3^1;//中音阶按键行sbit P33=P3^2;//高音阶按键行sbit P35=P3^4;//播放音乐按键unsigned int i,j,k=0,l=0;unsigned char count1=0xff,count0=0x50;/*********************************数码管码表(P0)***********************************/unsigned char Tab[]={0XBF,0X06,0X5B,0X4F,0X66,//数码管0~40X6D,0X7D,0X07,0X7F,0X6F,//数码管5~90X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//数码管A~F/************************************音阶控制**************************************/music_data_high[]={0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,//数组0~6 低音0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,//数组7~13 中音0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff};//数组14~20 高音music_data_low[]= {0xf3,0xb8,0x15,0xb9,0x4a,0xcf,0x0c,//数组0~6 低音0x44,0xac,0x09,0x34,0x82,0xc8,0x05,//数组7~13 中音0x4c,0x6d,0x94,0xad,0xd2,0xf3,0x02};//数组14~20 高音/******************************************************函数名:delayms*参数:n 延时毫秒数*功能:延时N毫秒*****************************************************/void delayms(unsigned char n){unsigned char a,b;for(a=100;a>0;a--)for(b=10*n;b>0;b--);}/******************************************************函数名:key_check*参数:无*功能:扫描按键并运行对应功能*****************************************************/void key_check(void){P2=0xff;P3=0xfe;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=1;P12=0;switch(P2){case0xfe:EA=1;count1=0xf8;count0=0xf3;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xf9;count0=0xb8;P0=Tab[2];delayms(50);br eak;case0xfb:EA=1;count1=0xfa;count0=0x15;P0=Tab[3];delayms(50);bre ak;case0xf7:EA=1;count1=0xfa;count0=0xb9;P0=Tab[4];delayms(50);bre ak;case0xef:EA=1;count1=0xfb;count0=0x4a;P0=Tab[5];delayms(50);bre ak;case0xdf:EA=1;count1=0xfb;count0=0xcf;P0=Tab[6];delayms(50);bre ak;case0xbf:EA=1;count1=0xfc;count0=0x0c;P0=Tab[7];delayms(50);bre ak;defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfd;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=0;P12=1;switch(P2){case0xfe:EA=1;count1=0xfc;count0=0x79;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xfc;count0=0xbc;P0=Tab[2];delayms(50);bre ak;case0xfb:EA=1;count1=0xfd;count0=0x09;P0=Tab[3];delayms(50);br eak;case0xf7:EA=1;count1=0xfd;count0=0x44;P0=Tab[4];delayms(50);bre ak;case 0xef:EA=1;count1=0xfd;count0=0xa2;P0=Tab[5];delayms(50);break;case0xdf:EA=1;count1=0xfd;count0=0xd8;P0=Tab[6];delayms(50);br eak;case0xbf:EA=1;count1=0xfe;count0=0x05;P0=Tab[7];delayms(50);br eak;// defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfb;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=0;P11=1;P12=1;switch(P2){case0xfe:EA=1;count1=0xfe;count0=0x4c;P0=Tab[1];delayms(50);bre ak;case0xfd:EA=1;count1=0xfe;count0=0x6d;P0=Tab[2];delayms(50);br eak;case0xfb:EA=1;count1=0xfe;count0=0x9f;P0=Tab[3];delayms(50);bre ak;case0xf7:EA=1;count1=0xfe;count0=0xad;P0=Tab[4];delayms(50);bre ak;case0xef:EA=1;count1=0xfe;count0=0xd2;P0=Tab[5];delayms(50);bre ak;case0xdf:EA=1;count1=0xfe;count0=0xf3;P0=Tab[6];delayms(50);bre ak;case0xbf:EA=1;count1=0xff;count0=0x02;P0=Tab[7];delayms(50);bre ak;// defaule:break;}}}if(P2==0xff) {EA=0;P13=1;}/******************************************************函数名:play_music*参数:无*功能:播放音乐*****************************************************/ void play_music(void){count1=music_data_high[0];count0=music_data_low[0]; EA=1;delayms(50);EA=0;delayms(5);}/******************************************************函数名:TIM0_init*参数:无*功能:定时器0初始化*****************************************************/ void TIM0_init(void){TMOD=0x01;TH0=count1;TL0=count0;EA=1;ET0=1;TR0=1;}void timer0(void) interrupt 1 using 0{TH0=count1;TL0=count0;P13=!P13;/***************************************************** *函数名:main*参数:无*功能:开跑程序*****************************************************/ void main(void){ P35=1;TIM0_init();//play_music();//while(1){ if(P35==0) {delayms(20);P35=1;play_music();} key_check();}}。
51单片机设计电子琴报告含代码

电子琴设计报告一、实验目的1.更深刻的了解、学习8051单片机的发声原理,利用定时器可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2.其次,定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平,由于定时参数不同,所以发出不同频率的脉冲。
3.进一步熟悉定时器的编程方法和定时初值的计算,进一步熟悉键盘扫描电路的工作原理和编程方法,了解单片机芯片的接口技术。
二、实验要求1.能够通过键盘演奏音符。
2.能够保存演奏的音乐,并实现回放。
3.有音调调整功能(如:C调,G调)。
4.自由发挥其他功能。
5.要求有单片机硬件系统框图,电路原理图,软件流程图。
三、实验基本原理简易电子琴有主控、蜂鸣器、键盘输入、电源四部分组成。
主控部分以AT89S52 为核心,用C 语言编程,充分运用AT89S52 的8k字节闪烁可编程可擦除只读存储器及其丰富的I/O 口,实现了对键盘数据的采集,和对蜂鸣器声音的控制;键盘输入部分采用4×4的键盘键盘输入,可以实现多个音调;供电部分可对整个电路进行供电。
经测试,整机基本实现预计功能,可以实现键盘演奏音符、调整音调、保存并回放的功能。
四、实验设计分析根据实验所要求实现的功能设计实现该项实验设计的软件电路及硬件电路。
五、实验要求实现A.电路设计1. 整体设计计划利用AT89S52 单片机的功能结合C 语言编程,实现电子琴播放音符等的简单功能,然后结合AT89S52 单片机的控制功能,利用蜂鸣器将输入表达出来,结合程序编制过程中,对各个I/O 的利用设置了键盘的扫描读入,结合电子琴需要多键位的现实,加入了4×4 键盘输入,达到了预期的效果。
2.分块设计1.控制模块AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
基于单片机的电子琴和音乐播放器设计

输入模块: 4*4 键盘
PIC32MX7 95F512L
芯片
输出模块: 喇叭
输出模块: 走马灯
5.1.2 硬件概述
本电路是由 PIC32MX795F512L 单片机为控制核心,具有键盘输入、液晶显示屏输出和 三极管驱动的喇叭构成的简易电子琴电路。
1.单片机
PIC32MX795F512L 型号单片机具有 USB、CAN 和以太网的高性能 32 位闪存,其所 拥有的主要资源有:
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以 2,即为半 周期的时间。利用定时器计时半周期时间,每当计时终止后就将相应的端口反相,然后重复 计时再反相。就可在各对应的引脚上得到此频率的脉冲。
我们小组利用 PIC32MX795F512L 的 80M 主频,运用 delay 函数,改变 delay 的时间以产 生不同频率的方法产生不同音阶。由于主频较高,没有一个音符的频率可以参考,于是我们 小组是利用自己的乐理知识将每个音校正。
4
RG1 RD3
RE0 RG14
RE1 RD4 RE3 RE2
3.输出模块(显示屏)
采用型号为 RT1602C 的液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图 形,显示多样,清晰可见, 与传统的阴极射线管相比,液晶显示屏具有占用空间小、低功耗、 低辐射、无闪烁、降低视觉疲劳等优点。字符型液晶屏是一种用 5*7 点阵图形来显示字符的 液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等,最常用 的为 2 行 16 个字。
型号为 RT1602C 的液晶显示屏就是 2 行 16 个字。它有 16 个管脚,分别有电源地、电 源正、偏压信号、读写控制、使能控制、I/O 接口、背光控制等功能。它的读写操作、屏幕 和光标的操作都是通过指令编程来实现的。
基于单片机的带存储播放功能的简易电子琴

中断源和中断标志
89C52单片机有5个中断请求源,分别为:
LOGO
1、2个外部输入中断源INT0(P3.2)和INT1(P3.3); 个外部输入中断源INT0(P3.2)和INT1(P3.3); INT0(P3.2) 2、2个片内定时器T0和Tl的溢出中断源TF0(TCON.5)和TF1(TCON.7); 个片内定时器T0和Tl的溢出中断源TF0(TCON.5)和TF1(TCON.7); T0 的溢出中断源TF0(TCON.5) 3、l个片内串行口发送或接收中断源TI(SCON.1)或RI(SCON.0)。 个片内串行口发送或接收中断源TI(SCON.1)或RI(SCON.0)。 TI(SCON.1)
目 录
摘 要 操作说明 一、系统框原理图 二、硬件系统的介绍 三、音乐产生的原理 四、数据存储的原理 五、单片机工作流程图 六、小结
LOGO
一、系统原理框图
蜂鸣器 4x4矩阵键盘 数码管 AT89C52 AT24C08 写入指示灯 独立键盘
LOGO
二、硬件系统的介绍
LOGO
本设计的硬件系统主要包括三大部分, 本设计的硬件系统主要包括三大部分, 分别由单片机系统、 分别由单片机系统、矩阵键盘系统和外部 存储系统组成。 存储系统组成。 1.(At89c52)单片机系统的介绍; ( )单片机系统的介绍; 2.(4 x 4)矩阵键盘系统的介绍; ( )矩阵键盘系统的介绍; 3.(At24c08)外部存储系统的介绍; ( )外部存储系统的介绍;
中断地址
0003H~000AH 0003H~000AH 000BH~0012H 000BH~0012H 0013H~001AH 0013H~001AH 001BH~0022H 001BH~0022H 0023H~002AH 0023H~002AH 外部中断0 外部中断0中断地址区 定时/计数器0 定时/计数器0中断地址区 外部中断1 外部中断1中断地址区 定时/计数器1 定时/计数器1中断地址区 串行口中断地址区
单片机+电子琴设计+八个音调+三首歌+歌词显示

系统功能说明:1、通过八个按键是否按下发出相应的1234567i这8个音调2、实验中可以播放三首歌曲,通过开关控制3、播放歌曲时,液晶屏显示播放歌曲号及歌词附录1:晶振为12M的音乐频率表音符频率(Hz)简谱码(T值)低1DO 262 63628 TH0=F7H TL0=24H #1DO# 277 63731 TH0=F8H TL0=F3H 低2RE 294 63835 TH0=F9H TL0=5BH #2RE# 311 63928 TH0=F9H TL0=B8H 低3M 330 64021 TH0=FAH TL0=15H 低4FA 349 64103 TH0=FAH TL0=67H #4FA# 370 64185 TH0=FAH TL0=B9H 低5SO 392 64260 TH0=FBH TL0=04H #5SO# 415 64331 TH0=FBH TL0=4BH 低6LA 440 64400 TH0=FBH TL0=90H #6 466 64463 TH0=FBH TL0=CFH 低7SI 494 64524 TH0=FCH TL0=0CH 中1DO 523 64580 TH0=FCH TL0=44H #1DO# 554 64633 TH0=FCH TL0=79H 中2RE 587 64684 TH0=FCH TL0=ACH #2RE# 622 64732 TH0=FCH TL0=DCH 中3M 659 64777 TH0=FDH TL0=09H 中4FA 698 64820 TH0=FDH TL0=34H #4FA# 740 64860 TH0=FDH TL0=5CH 中5SO 784 64898 TH0=FDH TL0=82H #5SO# 831 64934 TH0=FDH TL0=A6H 中6LA 880 64968 TH0=FDH TL0=C8H #6 932 64994 TH0=FDH TL0=E2H 中7SI 988 65030 TH0=FEH TL0=06H 高1DO 1046 65058 TH0=FEH TL0=22H #1DO# 1109 65085 TH0=FEH TL0=3DH 高2RE 1175 65110 TH0=FEH TL0=56H #2RE# 1245 65134 TH0=FEH TL0=6EH 高3M 1318 65157 TH0=FEH TL0=85H 高4FA 1397 65178 TH0=FEH TL0=9AH #4FA# 1480 65198 TH0=FEH TL0=AEH 高5SO 1568 65217 TH0=FEH TL0=C1H #5SO# 1661 65235 TH0=FEH TL0=D3H 高6LA 1760 65252 TH0=FEH TL0=E4H #6 1865 65268 TH0=FEH TL0=F4H 高7SI 1967 65283 TH0=FFH TL0=03H 休止符用TH0=FFH ,TL0=FFH表示附录2:LCD相关资料两行液晶显示的地址:(均为十六位计数)0 1 2 3 4 5 6 7 8 9 A B C D E F40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F命令格式要求,设置地址指针的时候第8位为1,后边为地址,即AC0~AC6,就是对应上表的地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8e};
//中音1-7和高音1-7对应频率列表
uint16 code NoteFrequ[] = {
523,587,659,698,784,880,988, //中音1-7
for(i=0;i<4;i++)
{
P2=buff[i];
temp=P2;
temp&=0xf0;//取P2的高四位;
while(temp!=0xf0)
{
delay5ms(5);//延时5ms去除抖动;
temp=P2;
temp&=0xf0;
while(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=i*4+0;break;//获取键值;
}
if(num==8)
{
T0LoadH = 0xff;
T0LoadL = 0x00;
TR0 = 1;
flag = 0;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
P0 = 0x00;
for(i=0;i<10000;i++);//闪烁灯全亮
PlayTwoTiger();
}
}
void PlayTwoTiger()
//计算发生时间,为总时间的0.75
/***********去除抖动********************/
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
/************************************/
}
}
}
}
void zhongyin(uint8 num)//对应的发出中音
};
for(beat=0;beat<sizeof(TwoTigerNote);)//用节拍索引作为循环变量
{
while(!tmrflg);//每次定时器中断完成后检查并处理节拍
tmrflg = 0;
if(time == 0)
{
//启动一个新的节拍
note = Leabharlann woTigerNote[beat]-1;
void zhongyin(uint8 num);//对应发出高音
void gaoyin(uint8 num);//对应的发出高音
void main()
{
Init();
while(1)
{
KeyPress();
}
}
void Init()//函数的初始化
{
ADDR3 = 1;
ENELD = 0;
ADDR0 = 0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENELD = P1^4;//LED控制使能
sbit BUZZ = P1^6;//蜂鸣器控制使能
//数码管的真值表
code uint8 array[]={
case 6: T0LoadH = (uint8)(NoteReload[12]>>8);T0LoadL=(uint8)NoteReload[12];TR0 = 1;flag = 1;enable = 1;break;
case 7: T0LoadH = (uint8)(NoteReload[13]>>8);T0LoadL=(uint8)NoteReload[13];TR0 = 1;flag = 1;enable = 1;break;
ADDR1 = 0;
ADDR2 = 0;
P0 = 0x00;
TMOD = 0x01;//配置T0在工作模式1
TH0 = T0LoadH;
TL0 = T0LoadL;
ET0 = 1;//使能T0中断
TR0 = 0;//占时不启动T0
EA = 1;//使能全局中断
}
void delay5ms(uint8z)//延时5ms
T0LoadH = NoteReload[note] >> 8;
T0LoadL = NoteReload[note];
//右移两位相当于除以4,移位代替除法可以加快执行速度
beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;//计算节拍总时间
{
uint16 i;
switch(num)
{
case 1: T0LoadH = (uint8)(NoteReload[0]>>8);T0LoadL=(uint8)NoteReload[0];TR0 = 1;flag = 1;enable = 1;break;
case 2: T0LoadH = (uint8)(NoteReload[1]>>8);T0LoadL=(uint8)NoteReload[1];TR0 = 1;flag = 1;enable = 1;break;
65536 - (11059200/12)/(1047*2),
65536 - (11059200/12)/(1175*2),
65536 - (11059200/12)/(1319*2),
65536 - (11059200/12)/(1397*2),
65536 - (11059200/12)/(1568*2),
if(num==0||num<=8)
{
if(num == 0)
{
bb++;
if(bb==3)
bb = 1;
}
switch(bb)
{
case 1: zhongyin(num);break;
case 2: gaoyin(num);break;
}
}
/********************************************/
case 7: T0LoadH = (uint8)(NoteReload[6]>>8);T0LoadL=(uint8)NoteReload[6];TR0 = 1;flag = 1;enable = 1;break;
}
if(num==8)
{
T0LoadH = 0xff;
T0LoadL = 0x00;
TR0 = 1;
{
uint8x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void keypress()
{
uint8 i,temp,num;
uint8 buff[4]={0xfe,0xfd,0xfb,0xf7};//P2口每次扫描行时,只有一个低电平其他全为高电平,只改变前四位。?
case 3: T0LoadH = (uint8)(NoteReload[2]>>8);T0LoadL=(uint8)NoteReload[2];TR0 = 1;flag = 1;enable = 1;break;
case 4: T0LoadH = (uint8)(NoteReload[3]>>8);T0LoadL=(uint8)NoteReload[3];TR0 = 1;flag = 1;enable = 1;break;
1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,
5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,
};
uint8 code TwoTigerBeat[] = {
//两只老虎节拍,4表示一拍,1就是1/4拍,8就是2拍
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,3,1, 3,1, 4, 4, 3,1, 3,1, 4, 4, 4, 4, 8, 4, 4, 8,
case 5: T0LoadH = (uint8)(NoteReload[4]>>8);T0LoadL=(uint8)NoteReload[4];TR0 = 1;flag = 1;enable = 1;break;
case 6: T0LoadH = (uint8)(NoteReload[5]>>8);T0LoadL=(uint8)NoteReload[5];TR0 = 1;flag = 1;enable = 1;break;
flag = 0;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
P0 = 0x00;
for(i=0;i<10000;i++);//闪烁灯全亮
PlayTwoTiger();
}
}
void gaoyin(uint8 num)//对应的发出高音
{
uint16 i;
switch(num)
{
case 1: T0LoadH = (uint8)(NoteReload[7]>>8);T0LoadL=(uint8)NoteReload[7];TR0 = 1;flag = 1;enable = 1;break;
单片机实现电子琴并可播放歌曲可以音乐播放播放音乐单片机电子琴单片机实现音乐播放电子音乐实现歌曲
//两只老虎歌曲部分代码参考了金山摊工作室
#include<reg52.h>