单片机设计矩阵键盘电子琴
基于51单片机的4×4矩阵键盘电子琴
![基于51单片机的4×4矩阵键盘电子琴](https://img.taocdn.com/s3/m/7e55432642323968011ca300a6c30c225901f0ea.png)
基于51单片机的4×4矩阵键盘电子琴基于51单片机的4×4矩阵键盘电子琴前些日子,做而论道写了一篇关于单片机发音的文章,后来,就不断有网友来电询问单片机电子琴的设计方法。
以前制作过一个24键(独立按键)的,程序是用汇编语言写的,估计多数人看不了。
下面,把新设计的16按键的电子琴,公布给网友。
电路图如下:图片链接:/picture/detail/b05f67dd8b5c82da3af4 83a4f974902b5660a0da制作说明:单片机采用51系列的都行,AT89C2051也可;图中没有画出复位和晶振电路,实际制作时,不可省略,晶振可以使用11.0592或12MHz;扬声器应该按照图中给出的附图加上驱动电路;显示器及七段译码器不接,单片机电子琴也可以正常工作。
74LS47 和数码管之间,应该接上“限流电阻”,约470 欧姆即可。
C语言程序如下:/************************************************************* * 程序功能 : 对4×4矩阵键盘进行扫描,显示键值和输出音响**************************************************************/ #include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit SPK = P3^7; //P3.7外接扬声器uint FreqTemp;unsigned int code Freqtab[] = { //定时半周期的初始值64021,64103,64260,64400, //低音3 4 5 664524,64580,64684,64777, //低音7,中音1 2 364820,64898,64968,65030, //中音4 5 6 765058,65110,65157,65178}; //高音1 2 3 4//关于半周期的初始值与频率的关系,可见:///do_sermon/item/8cff22baf5142245bb 0e1247/************************************************************* * 函数功能 : 用扫描法读 P1 外接4×4 键盘* 函数返回 : 按下键:返回0~15、如无键按下:返回16**************************************************************/ uchar Keyscan(void){uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};for(j = 0; j < 4; j++) { //循环四次,扫描四行P1 = Buffer[j]; //在低四位分别输出一个低电平_nop_();temp = 0x80; //计划先读出P1.7位for(i = 0; i < 4; i++) { //循环四次,检查四列if(!(P1 & temp)) { //从高四位,截取1位return (i + j * 4); //返回取得的按键值}temp >>= 1; //换右边一位} }return 16; //没有键按下就返回16}/************************************************************** * 函数功能 : 将参数分成十位、个位,分别显示到P2* 输入 : k (键盘数值)*************************************************************** /void Display(uchar k){P2 = ((k / 10) << 4) + (k % 10);}/************************************************************** * 主函数*************************************************************** /void Main(void){uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值TMOD = 0x01; //T0定时方式1ET0 = 1; //允许T0中断EX0 = 1; //允许X0中断EA = 1;while(1) {TR0 = 0; //暂不发音Key_T emp1 = Keyscan(); //读入按键if(Key_Temp1 != 16) { //有键按下Display(Key_Value); //显示键值、延时消抖Key_T emp2 = Keyscan(); //再读一次if (Key_Temp1 == Key_T emp2) {//两次相等Key_Value = Key_T emp1; //就确认下来FreqTemp = Freqtab[Key_Value]; //根据键值,取出定时半周期的初始值Display(Key_Value); //显示TR0 = 1; //启动定时器,发音while (Keyscan() < 16); //等待释放SPK = 1; //停止发音} } } }//===================================== ==========void T0_INT(void) interrupt 1{TL0 = FreqTemp; //载入定时半周期的初始值TH0 = FreqTemp >> 8;SPK = ~SPK; //发音}//===================================== ==========#单片机有关。
(完整版)基于51单片机的简易电子琴设计
![(完整版)基于51单片机的简易电子琴设计](https://img.taocdn.com/s3/m/d04df99ff242336c1fb95e57.png)
鉴于 51 单片机的简略电子琴设计一.问题提出为何选择简略电子琴设计?1.关于音乐的兴趣我们对音乐都有着浓重的兴趣,喜爱听钢琴曲,如理查德·克莱德曼演奏的《思乡曲》《星空》《秋天的密语》等,音乐在我们的生活中饰演着很重要的角色。
有人曾说,喜爱音乐的人不会向恶。
从前不认为然,但是跟着这些年来慢慢喜爱上阴暗,听了愈来愈多的钢琴曲以后,感觉这句话特别有道理。
音乐是用艺术家用音符记录世界,传达感情的一种艺术形式,音乐里有一种和睦之美,听音乐能够让人心情愉快,与外界和睦一致。
音乐此刻已经成为我生活中很重要的一部分,我们每周都会抽些时间去赏识世界名曲,作为对精神的浸礼。
2.关于电子琴的好奇好奇是人的本性,人类关于自然的认识,关于科学的探究,无不始于好奇。
我们对电子琴怎样实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇,想经过学习单片机这个时机,深入认识电子琴的功能实现原理。
3.关于51单片机强盛功能的信任51单片机有基本特征:(1)面向控制的 8 位 CPU 和指令系统(2)4K 字节的程序储存器( ROM 或 EPROM)(3)128 字节的数据储存器(4)可编程的并行 I/O 口 P0~P3,有 32 位双向输入 /输出线(5)一个全双工串行口(6)两个 16 位准时器 /计数器(7)五其中止源,两个优先级的中止构造(8)一个片内时钟振荡器和时钟电路(9)能够寻址 64K 字节的程序储存器和 64K 字节的外面数据储存器51单片机功能强盛,性能日益完美,在工业测控、智能仪器仪表、机电一体化产品、家电领域中应用宽泛,所以鉴于51 单片机设计简易的电子琴可行性特别大。
二.功能需求1.能够实现基本的琴键功能即每按下一个琴键,单片机能够检测到键盘的按键,并依据按键的地点,经过程序来控制,使蜂鸣器发出不一样频次(音调)的声音,声音延缓一段时间,等到按键松开后,声音停止。
而后再连续扫描,看能否有键按下,这样循环下去,即可实现基本的琴键功能。
单片机设计矩阵键盘电子琴
![单片机设计矩阵键盘电子琴](https://img.taocdn.com/s3/m/4f787c5e77232f60ddcca124.png)
课程设计任务书课程名称单片机原理及应用课程设计院(系、部、中心)通信工程学院专业通信工程1.课程设计应达到的目的本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。
通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
2.课程设计题目及要求带存储播放功能的简易电子琴设计要求:利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。
其他扩展功能学生可自己添加,功能不限定与此。
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
(2)完成电路板的组装(3)完成硬件电路的测试、以及软件的编程(4)最终完成具体的课设任务。
4.主要参考文献1.张洪润等.单片机应用设计200例.北京:北京航空航天大学出版社,20062. 胡汉才.单片机原理及其接口技术. 北京:清华大学出版社,20103.夏继强等.单片机实验与实践教程.北京:北京航空航天大学出版社,20064. 倪晓军等.单片机原理与接口技术教程.北京:清华大学出版社,20075(1)硬件方面:单片机。
4*4行列式键盘,蜂鸣器,独立数码管,独立建。
硬件部分采用逐列扫描,16个键位对应16个音,不断检测16键位,当某个键位被按下,先检测哪一列再检测哪个按键被按下,同时设置四个功能键,p1.0,p1.1播放歌曲,p1.2暂停,p1.3复位,可控制歌曲的播放。
插入图片(2)音乐频率6 程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。
单片机4×4矩阵键盘设计方案
![单片机4×4矩阵键盘设计方案](https://img.taocdn.com/s3/m/c7a16e0ba45177232f60a2e8.png)
1、设计原理(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。
(2)键盘中对应按键的序号排列如图14.1所示。
2、参考电路图14.2 4×4矩阵式键盘识别电路原理图3、电路硬件说明(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。
(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
4、程序设计内容(1)4×4矩阵键盘识别处理。
(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
5、程序流程图(如图14.3所示)6、汇编源程序;;;;;;;;;;定义单元;;;;;;;;;;COUNT EQU 30H;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100HSTART: LCALL CHUSHIHUALCALL PANDUANLCALL XIANSHILJMP START;;;;;;;;;;初始化程序;;;;;;;;;;CHUSHIHUA: MOV COUNT,#00HRET;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;;PANDUAN: MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHJZ SW1LCALL DELAY10MS JZ SW1MOV A,P3ANL A,#0FHCJNE A,#0EH,K1 MOV COUNT,#0 LJMP DKK1: CJNE A,#0DH,K2 MOV COUNT,#4 LJMP DKK2: CJNE A,#0BH,K3 MOV COUNT,#8 LJMP DKK3: CJNE A,#07H,K4 MOV COUNT,#12K4: NOPLJMP DKSW1: MOV P3,#0FFH CLR P3.5MOV A,P3ANL A,#0FHJZ SW2LCALL DELAY10MS JZ SW2MOV A,P3ANL A,#0FHCJNE A,#0EH,K5 MOV COUNT,#1 LJMP DKK5: CJNE A,#0DH,K6 MOV COUNT,#5 LJMP DKK6: CJNE A,#0BH,K7 MOV COUNT,#9 LJMP DKK7: CJNE A,#07H,K8 MOV COUNT,#13K8: NOPLJMP DKSW2: MOV P3,#0FFH CLR P3.6MOV A,P3ANL A,#0FHJZ SW3LCALL DELAY10MS JZ SW3MOV A,P3ANL A,#0FHCJNE A,#0EH,K9 MOV COUNT,#2 LJMP DKK9: CJNE A,#0DH,KA MOV COUNT,#6 LJMP DKKA: CJNE A,#0BH,KB MOV COUNT,#10 LJMP DKKB: CJNE A,#07H,KC MOV COUNT,#14 KC: NOPLJMP DKSW3: MOV P3,#0FFH CLR P3.7MOV A,P3ANL A,#0FHJZ SW4LCALL DELAY10MSJZ SW4MOV A,P3ANL A,#0FHCJNE A,#0EH,KDMOV COUNT,#3LJMP DKKD: CJNE A,#0DH,KE MOV COUNT,#7LJMP DKKE: CJNE A,#0BH,KF MOV COUNT,#11 LJMP DKKF: CJNE A,#07H,KG MOV COUNT,#15KG: NOPLJMP DKSW4: LJMP PANDUAN DK: RET ;;;;;;;;;;显示程序;;;;;;;;;; XIANSHI: MOV A,COUNTMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ALCALL DELAYSK: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ SKRET;;;;;;;;;;10ms延时程序;;;;;;;;;;DELAY10MS: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;DELAY: MOV R5,#20LOOP: LCALL DELAY10MSDJNZ R5,LOOPRET;;;;;;;;;;共阴码表;;;;;;;;;;TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H;;;;;;;;;;结束标志;;;;;;;;;;END7、C语言源程序#includeunsigned char code table[]={0x3f,0x66,0x7f,0x39,0x06,0x6d,0x6f,0x5e,0x5b,0x7d,0x77,0x79,0x4f,0x07,0x7c,0x71};void main(void){ unsigned char i,j,k,key;while(1){ P3=0xff; //给P3口置1//P3_4=0; //给P3.4这条线送入0//i=P3;i=i&0x0f; //屏蔽低四位//if(i!=0x0f) //看是否有按键按下//{ for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);if(i!=0x0f) //再次判断按键是否按下//{ switch(i) //看是和P3.4相连的四个按键中的哪个// { case 0x0e:key=0;break;case 0x0d:key=1;break;case 0x0b:key=2;break;case 0x07:key=3;break;}P0=table[key]; //送数到P0口显示//}}P3=0xff;P3_5=0; //读P3.5这条线//i=P3;i=i&0x0f; //屏蔽P3口的低四位//if(i!=0x0f) //读P3.5这条线上看是否有按键按下// { for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);i=P3; //再看是否有按键真的按下//i=i&0x0f;if(i!=0x0f){ switch(i) //如果有,显示相应的按键//{ case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}P0=table[key]; //送入P0口显示//}}P3=0xff;P3_6=0; //读P3.6这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=8;break;case 0x0d:key=9;break;case 0x0b:key=10;break;case 0x07:key=11;break;}P0=table[key];}}P3=0xff;P3_7=0; //读P3.7这条线上是否有按键按下//i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--) for(k=200;k>0;k--); i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=12;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;}P0=table[key];}}}}8、注意事项在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。
基于51单片机实现的电子琴设计
![基于51单片机实现的电子琴设计](https://img.taocdn.com/s3/m/91c104cf3186bceb19e8bb1b.png)
目录摘要 (3)Abstract (3)1绪论 (4)1.1背景 (4)1.2目的 (4)1.3 意义 (4)1.4基本理论依据和主要工作内容 (4)2 设计方案简述 (6)2.1键盘模块 (6)2.2发声模块 (6)2.3 8X8点阵显示模块 (6)2.4系统技术指标和预期功能 (7)3 详细设计 (8)3.1主要IC芯片介绍 (8)3.2硬件设计 (11)4 设计结果及分析 (19)4.1 测试 (19)5总结 (20)参考文献 (21)附录主要程序代码 (22)摘要单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。
本设计阐述的主要内容是一种基于51 单片机的电子琴的设计,其核心芯片AT89S52 单片机,内部电路包括4X4行列式键盘模块、音频放大模块和8X8LED点阵显示模块,本系统运行稳定,功能较为完善,控制系统可靠,性价比较高等,具有一定的实用价值。
对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,他可以显示字符、数字和简单图形,显示亮度较高,并且对环境条件要求比较低。
电子乐器的结构较为复杂,音源是由晶体管产生的电振动,并通过音色回路而产生各种音色;同时由周波数调制产生颤音效果,由振幅调制产生各种乐器的音效。
关键词:AT89S52单片机;音频放大模块;8X8点阵AbstractIts applications have become increasingly close to life, with a single chip to achieve a number of electronic design is becoming simpler. The main elements of the design described is based on 51 single-chip, the flower design, the core chip AT89S52 microcontroller Internal circuit including the 4X4 determinant keyboard module, audio amplifier module and 8X8LED dot matrix display module, the system is stable, function better, control system reliability, higher cost and so on, has some practical value. For those who need to display the amount of information is small, resolution is not high, they need to make the occasion a relatively low cost, using large and small screen, LED dot matrix display is more economical, and he can display characters, numbers and simple graphics, display brightness higher and lower demands on the environmental conditions. : The structure of more complex electronic instruments, the source is generated by the transistor electrical vibration, and sound loops generated by a variety of tone; also modulated by the frequency to produce vibrato effects, generated by the amplitude modulated sounds of various instruments.Keywords:AT89S52 Microcontroller;Audio Amplifier Module;8X8 matrix1绪论1.1背景单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机(single chipmicrocomputer).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果。
基于单片机的电子琴设计
![基于单片机的电子琴设计](https://img.taocdn.com/s3/m/1f4cb96cf011f18583d049649b6648d7c0c70801.png)
基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
基于51单片机音乐盒程序设计
![基于51单片机音乐盒程序设计](https://img.taocdn.com/s3/m/73723a43e518964bcf847c9b.png)
基于51单片机音乐盒程序设计一、功能设计说明1、电路设计实物图矩阵键盘部分电路图2、运行流程图3、电子琴模式按键对应发音设计按键 发音 按键 发音 K1 低 1 K9 中 2 K2 低 2 K10 中 3 K3 低 3 K11 中 4 K4 低 4 K12 中 5 K5低 5K13中 6程序开始播放小苹果歌曲判断任意按键是否按下继续播放小苹果歌曲否是进入电子琴模式判断K16按键是否按下播放完成是否按键发音按键发音K6 低6 K14 中7K7 低7 K15 高1K8 中1 K16 重新播放小苹果二、硬件电路说明1、程序下载电路音乐盒电路图ISP下载接口本设计采用的单片机为A T89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口.2、音乐发音电路IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ 晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示:音符频率(HZ)简谱码(T值)音符频率(HZ) 简谱码(T值)低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178中1 DO 523 64580 # 4 FA# 1480 65198# 1 DO# 554 64633 高 5 SO 1568 65217中 2 RE 587 64684 # 5 SO# 1661 65235# 2 RE# 622 64732 高 6 LA 1760 65252中 3 M 659 64777 # 6 1865 65268中 4 FA 698 64820 高 7 SI 1967 65282 计算方法:例如产生262HZ频率(发音DO),周期T=1/262=3816 us,由于定时器中断使IO不停取反,故周期T=3816/2=1908 us 定时器初值N=65536-1908=63628TH0=63628/256TL0=65536%256三、程序代码说明1 、脉冲产生采用定时器0溢出中断产生脉冲,定时器初始化如下:TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能定时器0溢出中断产生脉冲,void Timer0() interrupt 1代码如下:TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音2、音普规则:a、音普由一个字节十六进制数组成b、高4位代表节拍,一拍约400MS,将一拍分成8份c、低4位代表音符,一一对应Note[]列表d、0x20代表歌曲结束符e、uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};该列表为发音所对应的定时器初装值例如编写如下一段音乐列表:0x83,0x81,0x82,0x8d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40 0x40表示停顿4*50MS /*你是我的小呀小苹果*/3、音普列表解读while(Xiaopingguo[temp]!=0x20) //不停判断音乐是否结尾,结尾跳出{jiepai=Xiaopingguo[temp]>>4; //获取节拍,即高4位数yinpu=Xiaopingguo[temp]&0x0F; //获取音普,即低4位数Timer_Set(yinpu); //根据列表对应发音Delay(jiepai*50); //节拍temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}void Timer_Set(uchar num)为定时器0赋值子程序,包含的代码如下:th0=Note[num]/256;tl0=Note[num]%256;四、程序代码编写/**********************************************************************************************项目名称:音乐盒单片机型号:AT89S52频率:外部石英晶振12MHZ设计时间:2014-08-06设计者:小左MCU工作室Q Q: 576689422******************************************************************************* **************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit BUZZER=P1^0;//蜂鸣器输出uchar th0,tl0; //定时器0赋值变量uchar start_; //返回变量uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};/*************************************************************************音普规则:1、音普由一个字节十六进制数组成2、高4位代表节拍,一拍约400MS,将一拍分成8份3、低4位代表音符,一一对应Note[]列表4、0x20代表歌曲结束符**************************************************************************/uchar code Xiaopingguo[]={0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*怎么爱你都不嫌多*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*红红的小脸温暖我的心窝*/0x42,0x81,0x42,0x43,0x42,0x43,0x42,0x23,0x25,0x85,0x30,0x45,0x10,0x45,0x30,0x45,0x10,0x 45,0x30,0x85,0x85,0x85,0x40,/*点亮我生命的火火火火火火*/0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*就像天边最美丽的云朵*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*春天又来到了花开满山坡*/0x42,0x81,0x42,0x43,0x82,0x8c,0x8d,0x4d,0x41,0x8d,0x20/*种下希望就会收获*/};//----延时子程序--------------------------------------------------void Delay(uint xms){uint j;for(;xms>0;xms--)for(j=110;j>0;j--);}//---------------------------------------------------------------//----定时器变量赋值--------------------------------------------- void Timer_Set(uchar num){th0=Note[num]/256;tl0=Note[num]%256;}//---------------------------------------------------------------//----系统初始化------------------------------------------------- void Init(){BUZZER = 1; //关闭蜂鸣器TMOD = 0x01; //定时器0工作方式1TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能start_ = 0; //返回变量初始化}//---------------------------------------------------------------//----按键扫描--------------------------------------------------- void Key_Scan(){P0 = 0x0f;if(P0!=0x0f){Delay(5);if(P0!=0x0f){P0=0xfe;if(P0==0xee){Timer_Set(8);} //按键1被按下else if(P0==0xde){Timer_Set(12);}//按键5被按下else if(P0==0xbe){Timer_Set(2);} //按键9被按下else if(P0==0x7e){Timer_Set(6);} //按键13被按下else;P0=0xfd;if(P0==0xed){Timer_Set(9);} //按键2被按下else if(P0==0xdd){Timer_Set(13);}//按键6被按下else if(P0==0xbd){Timer_Set(3);} //按键10被按下else if(P0==0x7d){Timer_Set(7);} //按键14被按下else;P0=0xfb;if(P0==0xeb){Timer_Set(10);} //按键3被按下else if(P0==0xdb){Timer_Set(14);}//按键7被按下else if(P0==0xbb){Timer_Set(4);} //按键11被按下else if(P0==0x7b){Timer_Set(15);}//按键15被按下else;P0=0xf7;if(P0==0xe7){Timer_Set(11);} //按键4被按下else if(P0==0xd7){Timer_Set(1);} //按键8被按下else if(P0==0xb7){Timer_Set(5);} //按键12被按下else if(P0==0x77){start_=1;} //按键16被按下else;}}else{th0=0;}}//---------------------------------------------------------------//----主程序----------------------------------------------------- void main(){uchar temp,yinpu,jiepai;Init();while(1){start:temp=0;while(Xiaopingguo[temp]!=0x20){jiepai=Xiaopingguo[temp]>>4; //获取节拍yinpu=Xiaopingguo[temp]&0x0F; //获取音普Timer_Set(yinpu);Delay(jiepai*50);temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}out:th0 = 0;BUZZER = 1;//关闭蜂鸣器while(1){Key_Scan();if(start_==1){start_=0;goto start;}}}}//---------------------------------------------------------------//----定时器0中断服务程序----------------------------------------void Timer0() interrupt 1{TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音}//----------------------------------------------------------------更多精彩程序请在淘宝店铺中搜索“小左MCU”QQ:576689422。
单片机电子琴系统设计
![单片机电子琴系统设计](https://img.taocdn.com/s3/m/30bfdc7a7f1922791788e84d.png)
总体概述本设计采用AT89S52单片机作为整个系统的控制核心,具有:音乐琴, 电子钟, LED阵列扫描显示, 液晶字符显示, 循环彩灯五个模块。
音乐琴采用4X4矩阵键盘为输入键盘,共有十六个基本音, 并与其他功能组合, 具有一定的实用性与趣味性, 较好的完成题目要求。
关键词:单片机矩阵键盘频率。
一、音乐琴系统。
1. 电路原理图2.系统板硬件连线1.把“单片机系统”区域中的P1.0 端口用导线连接到“音频放大模块”区域中的SPK IN 端口上;2.把“单片机系统“区域中的P3.0 -P3.7 端口用8 芯排线连接到“4X4 行列式键盘”区域中的C1 -C4 R1 -R4 端口上;3.相关程序内容音乐产生的方法;一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/ 计数器T0 来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
现在以单片机12MHZ 晶振为例,例出高中低音符与单片机计数T0 相关的计数值如下表所示下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据低音0 -19 之间,中音在20 -39 之间,高音在40 -59 之间TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0DW 0,63731,63928,0,64185,64331,64463,0,0,0DW 0,64580,64684,64777,64820,64898,64968,65030,0,0DW 0,64633,64732,0,64860,64934,64994,0,0,0DW 0,65058,65110,65157,65178,65217,65252,65283,0,0DW 0,65085,65134,0,65198,65235,65268,0,0,0DW 02 、音乐的音拍,一个节拍为单位(C 调)对于不同的曲调我们也可以用单片机的另外一个定时/ 计数器来完成。
51单片机简易电子琴设计
![51单片机简易电子琴设计](https://img.taocdn.com/s3/m/86cf1a2633687e21af45a9e7.png)
毕业设计(论文)课题名称:指导教师:系别:专业:班级:姓名:摘要音乐一直都是人类情感表达的一个重要媒介,随着社会的进步与发展,音乐在人类的生活与学习中的作用越发不可忽视。
电子琴也是实现播放音乐的一个途径。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在音乐演奏中已成为不可缺少的一部分。
单片机是一个具有功能强大和编程灵活性的控制器,它已广泛应用于现代人们的生活中,扮演着重要的角色。
本设计主要是使用AT89C51单片机及单片机C语言,用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
在PROTEUS 仿真平台上实现功能仿真,同时还增加了音乐播放功能。
本文中给出了该系统设计的硬件电路,软件设计等。
其次,详细阐述了程序的各个模块和实现过程。
本设计具有硬件电路简单、功能完善、控制可靠、运行稳定等特点,具有一定的实用性。
关键词: 单片机;电子琴;PROTEUS;KEIL;C语言1.引言单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色。
简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。
还常作为独奏乐器出现,具有鲜明时代特色。
但电子琴的局限性也是十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类馆、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。
单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。
基于单片机的简易电子琴设计_毕业设计
![基于单片机的简易电子琴设计_毕业设计](https://img.taocdn.com/s3/m/d210e818551810a6f4248614.png)
摘要
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机, 它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的 应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成 为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现 代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性, 它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用 AT89S51 单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与 键盘、扬声器等模块组成核心主控制模块,在主控模块上设有 16 个按键和扬声 器。
1. 2任务与要求 实现电子琴发声控制系统;要求电路实现如下功能:
利用蜂鸣器作为发声部件,两个数码管作为显示部件,设置 10 个按键,实现高 音、中音、低音的 1、2、3、4、5、6、7 的发音。并在存储一首歌曲的内容,可 以实现自动播放。
用 PROTEUS 实现的电子琴仿真设计 说明:单片机的工作时钟频率为 11.0592MHz 。
图 1-1 AT89C52
2 系统总体方案及硬件设计
本系统采用单片机 AT89C52 为电子琴的控制核心,系统主要包括播放模块、 安键控制模块。下面对各模块的设计逐一进行论证比较。总电路图见附页二。
2. 1 系统总体方案 2.1.1 定时/计数器的设计和状态字定义:
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以 2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将 P1.0 反相,然后重复计时再反相。就可在 P1.0 引脚上得到此频率的脉冲。利用 AT89C51 的内部定时器使其工作计数器模式(MODE1)下,改变计数值 TH0 及 TL0 以产生 不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期 T=1/523=1912μ s, 因此只要令计数器计时 956μ s/1μ s=956,每计数 956 次时将 I/O 反相,就可 得到中音 DO(523Hz)。计数脉冲值与频率的关系式是:N=fi÷2÷fr,式中,N 是计数值;fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz);fr 是想 要产生的频率。其计数初值 T 的求法如下:T=65536-N=65536-fi÷2÷fr 例如:设 K=65536,fi=1MHz,求中音 DO(261Hz)。T=65536-N=65536- fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音 DO 的 T=65536 -500000/523=64580。 单片机 12MHZ 晶振,中音符与计数 T0 相关的计数值如表所示:
单片机电子琴方案
![单片机电子琴方案](https://img.taocdn.com/s3/m/a939530bad51f01dc381f137.png)
方案设计1电子琴设计框图图1 电子琴设计框图2总体设计2.1硬件部分采用AT89S52单片机作为主控制部件,AT89S52用上电自动复位,12MHZ 的晶振和两个电容形成晶振电路。
面键,用于输入音符。
2.2软件部分软件部分采用汇编语言编写程序,单片机汇编语言程序设计步骤如下:第一步:分析问题。
第二步:画出程序的基本轮廓。
第三步:实现该程序。
2.3软硬件调试使用KEIL软件,将程序输入进行编译,编译通过后,则将制作的电路进行联机仿真,检测功能和设计任务能不能实现。
如果不能达到预期效果,则必须重新检查硬件或修改程序。
2.4程序固化经过调试,实现了预期的成果和功能,就可以开始程序固化了。
将程序烧录到AT89S52内部ROM中,然后将单片机放入到电路中,再进行观察。
一. 相关技术简介用电子琴可以演奏出各种美妙的音乐,而音乐是有音符组成的。
不同的音符是由相应频率的振动产生不同频率的声音电信号经扬声器发音后,人耳所听到的便是不同的声音,换言之,只要向扬声器中输入不同频率的电信号就可以产生不同的声音。
若将不同的音节于不同的节拍组合在一起便形成一定的曲调,因此一个单片机I/O 口,通过软件,控制其输出不同频率的信号,就可以产生8个基本音节,将音节以一定的节拍进行组合,便可以产生歌曲。
乐曲中每一音符对应着确定的频率,表1给出C 调时各音符频率。
如果单片机某个口 线输出“高” “低”电平的频率和某个音符的频率一样,那么将此口线接上喇 叭就可以发出此音符。
二. 硬件设计1. AT89S52单片机图2 AT89S52单片机< 1)简介AT89S52是一种低功耗、高性能 CMOS8位微控制器,具有8K 在系统可编 程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业 80C51产品指令和引脚完全兼容。
片上Flash 允许程序存储器在系统可编程,亦 适于常规编程器。
在单芯片上,拥有灵巧的 8位CPU 和在系统可编程Flash, 使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
基于STC89C52的简易电子琴课程设计报告
![基于STC89C52的简易电子琴课程设计报告](https://img.taocdn.com/s3/m/dc329dcd050876323112128c.png)
课程设计(报告)题目基于STC89C52单片机的简易电子琴学院名称指导教师职称班级学号学生姓名2011年 6月 12日摘要:本课程设计简易电子琴的制作基于STC89C52单片机。
利用定时器中断产生不同频率来实现不同音阶,用键盘扫描实现矩阵琴键的识别。
音频处理部分采用LM386进行信号放大,通过蜂鸣器发音。
该简易电子琴可以实现用矩阵琴键弹奏乐曲和播放一段示例音乐的功能。
关键字简易电子琴 STC89C52 LM386 矩阵键盘Abstract:The electronic organ in this paper is based on one Singal Chip Micro-Computer. Witn the timer interrupt,it achieves different scales at different frequencies and achieves identification of the matrix keyboard keys by scaning.In audio processing part,LM386 is used to amplificat the signal, and sounding by buzzer.The simple electronic organ can play music with the matrix keyboard and play a sample of music.Keywords: simple electronic organ ; STC89C52 ; LM386 ; matrix keyboard目录引言 (3)设计方案论证 (4)1、按键模块方案选择 (4)2、音频处理模块方案选择 (4)硬件部分 (4)1、系统结构图 (4)控制模块 (4)2.1 STC89C52简介 (4)主要功能特性 (5)2.2 音频处理模块 (5)2.2.1 LM386简介 (5)2.2.3 蜂鸣器 (7)软件部分 (7)1 音乐产生原理 (7)2 音阶产生方法 (8)3 音乐的节拍 (9)4 矩阵键盘识别 (9)4.1去抖动: (9)4.2被按键识别 (9)4.3键码产生 (9)程序调试与仿真 (10)电路板的制作与调试 (11)实际电路调试 (12)课程设计心得体会 (12)参考文献 (13)附录一:程序清单 (14)附录二:元器件清单 (21)引言电子琴是使用现代科技实现传统器乐功能的典范。
基于单片机的简易电子琴设计_毕业设计论文
![基于单片机的简易电子琴设计_毕业设计论文](https://img.taocdn.com/s3/m/e15f0dc37f1922791688e85a.png)
基于单片机的简易电子琴设计摘要随着科学技术的不断发展,单片机的应用日益成熟。
单片机集成度高、处理功能强大、价格低廉使其在各个领域得到广泛应用。
同时电子琴作科学技术与音乐共同发展的产物,在这个电子信息化的时代,为音乐的大众化做出了不可代替的贡献。
本文主要介绍一种基于51单片机的简易电子琴设计方案。
它采用了STC公司出品的一款低功耗、高性能单片机STC89C52芯片作为主控单元,与4*4矩阵键盘、复位电路、LED双位数码显示器、扬声器等组成主控核心模块。
文章详细论述了电子琴硬件设计和软件结构设计流程,采用了Altium Designer 09画出原理图、PCB图,通过Keil编程软件对电子琴进行软件编程,然后进行软硬件的调试运行并将程序烧录到STC89C52芯片中。
此系统运行比较稳定,具有硬件设计电路简单、清晰,成本低,软件功能完善,控制系统牢靠,性价比高等优点,具有一定的实用和参考价值。
关键词:STC89C52;电子琴;矩阵键盘AbstractAlong with the development of science and technology, the application of SCM increasingly mature. Single chip microcomputer high level of integration, processing powerful, low prices make it is widely used in various fields. At the same time the keyboards for science and technology and music common development of the product, in the electronic information era, for music's popular do can't replace contribution.This paper mainly introduces a kind of simple keyboard based on 51 SCM design scheme. It USES the STC product of our company a low power consumption, high performance microprocessor STC89C52 chips as the master unit, and 4 * 4 matrix keyboard and reset circuit, LED digital display, a double master core module and other components of the speaker. This paper discusses the design of hardware and software structure keyboard design process, the use of a Altium Designer 09 draw a diagram, PCB figure, through the Keil software keyboard to software programming, then the software and hardware debugging run and will burn to STC89C52 chip program. Operation of the system is stable and has the hardware circuit design simple, clear, and the cost is low, the software perfect function, control system firm, price higher advantages, has certain practical and reference value.Key words : stc89c52; keyboard; matrix keyboard目录摘要 (I)Abstract (II)1 绪论 (1)1.1 设计的目的和意义 (1)1.2 设计的主要内容 (1)2 系统概述 (2)2.1 系统工作原理 (2)2.2 系统结构组成 (2)2.2.1 电源电路 (2)2.2.2 控制部分 (3)2.2.3 显示部分 (3)2.2.4 发声部分 (3)2.3 主要芯片及元件的介绍 (3)2.3.1 STC89C52单片机简介 (3)2.3.2 芯片引脚介绍 (4)2.3.3 STC89C52时钟介绍 (6)2.3.4 双位LED数码显示器简介 (7)3 硬件电路的设计 (9)3.1 电源电路的设计 (9)3.2 复位电路的设计 (10)3.2.1 复位操作 (10)3.2.2 复位信号及其产生 (11)3.3 键盘控制电路 (12)3.3.1 矩阵式键盘的概述 (12)3.3.2 矩阵式键盘按键识别原理及方法 (12)3.4 显示电路 (13)4 系统软件设计 (14)4.1 如何利用单片机实现音乐节拍 (14)4.2 如何用单片机产生音频脉冲 (15)4.2.1 音符和频率的关系 (15)4.2.2 定义初值 (16)4.3 音乐发生程序流程图 (17)结论 (18)参考文献 (19)附录一电子琴源程序 (20)附录二原理图 (24)附录三 PCB图 (25)附录四实物图 (26)致谢 (27)1 绪论1.1 设计的目的和意义单片机又称单片微型计算机,英文字母的缩写MCU。
基于51单片机的简易电子琴设计
![基于51单片机的简易电子琴设计](https://img.taocdn.com/s3/m/5726f8ac1711cc7930b71603.png)
基于51单片机的简易电子琴设计一、设计任务及要求1、在该简易电子琴设计中,设置8个按键,8个按键可以发出do、re、mi、fa、sol、la、si、Do 8个音阶。
2、设计三个拨码开关,三个拨码开关可以调节高音、中音、低音三个音调。
3、画出电路的总体方框图和电路原理图。
二、设计原理音乐由许多不同的音阶组成的,而每个音阶对应着不同的频率,这样,我们就可以利用不同的频率组合,构成我们想要的音乐。
简易电子琴是摁下拨码开关时,单片机AT89C51会发出声音,声音从端口经过LM386,经过放大以后传入喇叭。
声音主要是经过单片机4×4矩阵键盘的按键产生,这里只用到8个按键来产生高中低的8个音阶,来产生do re mi fa sol la si Do。
下面是计数初值:#6LA# 466 1072 64463 高3MI 1318 372 65157低7SI 494 1012 64524 高4FA 1397 358 65178中1DO 523 0956 64580 #4FA# 1480 338 65198#1DO# 554 0903 64633 高5SO 1568 319 65217中2RE 578 0842 64684 #5SO# 1661 292 65235#2RE# 622 0804 64732 高6LA 1760 284 65252中3MI 659 0759 64777 #6LA# 1865 268 65268中4FA 698 0716 64820 高7SI 1976 253 65283 三、设计方案本次设计的电子琴主要是利用AT89C51单片机为核心控制元件,同时还包括键盘、拨码开关和扬声器等控制模块,由键盘选择八个音阶。
1、电路原理图的总体设计总体电路需要c51单片机一片,音乐按键及喇叭等外围电路,要进行音调控制和音频放大,设计好的电路图如下图所示:2、键盘控制模块的设计矩阵按键部分由8个轻触按键按照2行4列排列,连接到P3端口。
基于单片机控制的矩阵键盘显示系统设计
![基于单片机控制的矩阵键盘显示系统设计](https://img.taocdn.com/s3/m/a0fdb37886c24028915f804d2b160b4e767f81ea.png)
基于单片机控制的矩阵键盘显示系统设计矩阵键盘是一种常见的输入设备,用于将用户的按键操作转换成数字信号,以便与其他电子设备进行交互。
基于单片机的矩阵键盘显示系统设计实现了对键盘输入的读取,并通过显示器将按键信息进行显示。
下面将对该系统的设计进行详细介绍。
1.系统概述本系统主要由矩阵键盘、单片机、显示器组成。
矩阵键盘采用常见的4行4列的布局,每个按键都与单片机的输入引脚相连接。
单片机负责读取输入引脚的状态,并根据不同的按键进行不同的处理。
而显示器则用于显示按键输入的结果。
2.硬件设计2.1矩阵键盘矩阵键盘采用4行4列的布局,每个按键都与单片机的输入引脚相连接。
为了实现多按键同时按下的检测,采用按键矩阵的方式进行连接。
在按键矩阵中,每个按键与四个不同的引脚相连接,分别代表行和列。
单片机通过轮询的方式读取每个行和列的引脚状态,从而实现对按键状态的检测。
2.2单片机单片机作为系统的核心控制器,负责读取矩阵键盘的输入信号,并对按键进行处理。
单片机需要配置相应的IO引脚作为输入引脚,并进行轮询式的读取。
当按键按下时,单片机会通过扫描算法检测到按键的位置,并将按键的信息存储到相应的缓存区。
2.3显示器显示器用于显示按键输入的结果。
可以采用常见的数码管、LCD屏幕或者LED矩阵作为显示设备。
单片机通过输出引脚将按键信息传递给显示器,显示器根据这些信息进行相应的显示操作。
3.软件设计3.1初始化在系统启动时,单片机需要进行相应的初始化工作。
主要包括配置口线方向、扫描算法的设置、中断使能等。
3.2扫描算法为了检测按键的位置,需要采用合适的扫描算法。
常用的有逐行扫描、逐列扫描和矩阵扫描等。
逐行扫描的方法是先给每一行输出低电平,然后通过检测每一列的引脚状态来确定按键位置。
逐列扫描的方法与之类似,只是输出低电平的对象从行变为列。
矩阵扫描方法是同时扫描行和列,通过检测相交的引脚状态来确定按键位置。
在实际应用中,可以根据具体需求选择合适的扫描算法。
基于51单片机的电子琴设计
![基于51单片机的电子琴设计](https://img.taocdn.com/s3/m/52b478af0875f46527d3240c844769eae009a334.png)
基于51单片机的电子琴设计随着科技的不断发展,单片机技术已经成为了现代电子设备中的重要组成部分。
51单片机作为一种广泛应用的单片机系列,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式系统开发中。
本文将介绍一种基于51单片机的电子琴设计。
一、系统硬件设计1、单片机选择本设计选用AT89C51单片机作为主控制器,AT89C51是一种低功耗、高性能的8位单片机,具有4K字节的可编程存储器和128字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、电子琴设计电子琴采用8×8 LED点阵作为输出设备,通过单片机控制点阵的亮灭状态来展示音乐波形。
具体实现方式是将音频信号通过一个运放放大器放大,然后将其输入到LED点阵中,通过控制点阵的亮灭状态来展示音乐的波形。
3、存储模块设计为了实现电子琴曲目的存储和播放,本设计选用了一块AT24C02 EEPROM芯片作为存储设备。
AT24C02是一种串行E2PROM存储器,容量为256字节,可以通过I2C总线与单片机进行通信。
将曲目信息存储在AT24C02中,可以实现曲目的存储和播放功能。
4、按键模块设计本设计采用4×4矩阵键盘作为输入设备,通过扫描按键状态来实现音符的选择和节奏控制。
矩阵键盘的行线连接到单片机的P1口,列线连接到P2口,通过检测行列组合的变化来确定按下的键位。
二、系统软件设计1、音符解码本设计采用MIDI音符编码方式来存储和播放曲目信息。
在解码过程中,根据音符的频率和持续时间计算出对应的音高和节奏信息,然后将其用于驱动电子琴的输出设备展示音乐的波形。
2、演奏控制为了实现节奏控制,本设计采用了一种基于时间间隔的演奏方式。
在演奏过程中,单片机根据设定的节奏间隔时间来触发音符输出,从而实现对节奏的控制。
同时,为了实现曲目的停止和播放功能,我们需要在软件中加入相应的控制逻辑。
3、存储和播放在软件设计中,我们需要实现将曲目信息存储到AT24C02中以及从AT24C02中读取曲目信息的功能。
51单片机 diy 电子琴
![51单片机 diy 电子琴](https://img.taocdn.com/s3/m/72785cabf524ccbff1218468.png)
#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz
#define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz
#define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz
#define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz
TL1=(65536-500)%256; //定时器T1的高8位赋初值
while(1) //无限循环
{
switch(keyval)
{
case 1:f=l_dao; //如果第1个键按下,将低音1的频率赋给f
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/*******************************************
函数功能:节拍的延时的基本单位,延时200ms
******************************************/
本设计主要是针对电子琴的主要功能电路进行设计。以达到电子琴所具有的基本功能,利用定时器/计数器的定时功能。设置好定时的时间,然后定时器定时产生中断信号,每一次中断将发出的脉冲频率反向,借此来产生不同的音,随后这些音通过功放电路将信号放大,在通过扬声器放出来。
二、系统的总体设计方案
1、系统总框图
该系统通过电子琴的琴键,随意按入一个键,作为一个电平信号传送给处理器进行识别,然后在将电信号转化成声音信号,经过放大电路将声音放大,同时经过数码管的显示。这样就可以通过扬听到声音和看到音符,其主要模块有四个部组成,如图所示:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书课程名称单片机原理及应用课程设计院(系、部、中心)通信工程学院专业通信工程1.课程设计应达到的目的本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。
通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
2.课程设计题目及要求带存储播放功能的简易电子琴设计要求:利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。
其他扩展功能学生可自己添加,功能不限定与此。
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
(2)完成电路板的组装(3)完成硬件电路的测试、以及软件的编程(4)最终完成具体的课设任务。
4.主要参考文献1.张洪润等.单片机应用设计200例.北京:北京航空航天大学出版社,20062. 胡汉才.单片机原理及其接口技术. 北京:清华大学出版社,20103.夏继强等.单片机实验与实践教程.北京:北京航空航天大学出版社,20064. 倪晓军等.单片机原理与接口技术教程.北京:清华大学出版社,20075(1)硬件方面:单片机。
4*4行列式键盘,蜂鸣器,独立数码管,独立建。
硬件部分采用逐列扫描,16个键位对应16个音,不断检测16键位,当某个键位被按下,先检测哪一列再检测哪个按键被按下,同时设置四个功能键,p1.0,p1.1播放歌曲,p1.2暂停,p1.3复位,可控制歌曲的播放。
插入图片(2)音乐频率6 程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。
然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。
插入图片7心得体会:通过这次课程设计,我学到了很多书本上学不到的知识与经验,同时也遇到了很多问题,并在这个过程中逐步尝试去解决他们,提高自己的实践能力,硬件设计上我发现通过不同的I/O口可以节省端口资源的利用,部分端口上的需求可以通过软件解决。
从语法错误到程序功能的实现,前前后后也是改了又改,这次课程设计使我意识到很多存在的问题,必须在单片机方面读更多的书,更深入的去探究,去挖掘这些问题的答案。
8源程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit buz=P2^3; //定义蜂鸣器uchar temp,key;sbit s1=P1^0; //定义功能键1sbit s2=P1^1; //定义功能键2sbit s3=P1^2; //定义功能键3sbit s4=P1^3;uint code table[]={64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178}; //频率uint code xable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z) //延时程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void initialize(){P1=0xff; //起初数码管不显示任何数}void main(){TMOD=0x01;EA=1; //开总中断ET0=1; //开定时器0中断while(1){P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0) //检测第一行按键{delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0,P0=xable[0];break;case 0xde:key=1,P0=xable[1];break;case 0xbe:key=2,P0=xable[2];break;case 0x7e:key=3,P0=xable[3];break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0) //松手检测{temp=P3;temp=temp&0xf0;}TR0=0;buz=1;}}P3=0xfd; //检测第二行按键temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4,P0=xable[4];break;case 0xdd:key=5,P0=xable[5];break;case 0xbd:key=6,P0=xable[6];break;case 0x7d:key=7,P0=xable[7];break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}TR0=0;buz=1;}}P3=0xfb; //检测第三行按键temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8,P0=xable[8];break;case 0xdb:key=9,P0=xable[9];break;case 0xbb:key=10,P0=xable[10];break;case 0x7b:key=11,P0=xable[11];break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}TR0=0;buz=1;}}P3=0xf7; //检测第四行按键temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=12,P0=xable[12];break;case 0xd7:key=13,P0=xable[13];break;case 0xb7:key=14,P0=xable[14];break;case 0x77:key=15,P0=xable[15];break;}TH0=table[key]/256;TL0=table[key]%256;TR0=1;while(temp!=0xf0){temp=P3;temp=temp&0xf0;}TR0=0;buz=1;}}if(s1==0) //功能键1{delay(10);if(s1==0){TR0=1;while(1){if(s3==0) //功能键3{delay(1);if(s3==0){TR0=~TR0; //设置启动\暂停while(!s3);}}key=4; //祝你生日快乐TH0=table[key]/256;TL0=table[key]%256;delay(150);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=7;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(600);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(150);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=8;TH0=table[key]/256;TL0=table[key]%256;delay(300);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(300);buz=1;while(!s1); //松手检测}}}if(s2==0) //功能键2 {delay(10);if(s2==0){TR0=1;while(1){if(s3==0) //功能键3{delay(10);if(s3==0){TR0=~TR0;}}key=4; //找朋友TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(800);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=7;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=6;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=5;TH0=table[key]/256;TL0=table[key]%256;delay(400);key=4;TH0=table[key]/256;TL0=table[key]%256;delay(800);key=2;TH0=table[key]/256;TL0=table[key]%256;delay(800);buz=1;while(!s2); //松手检测}}}}}void time() interrupt 1 //中断{TH0=table[key]/256;TL0=table[key]%256;buz=~buz;}。