基于51单片机的简易电子琴设计_第1页
基于51单片机的简易电子琴设计_第2页
基于51单片机的简易电子琴设计_第3页
基于51单片机的简易电子琴设计_第4页
基于51单片机的简易电子琴设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上基于51单片机的简易电子琴设计一、设计任务及要求1、在该简易电子琴设计中,设置8个按键,8个按键可以发出do、re、mi、fa、sol、la、si、Do 8个音阶。2、设计三个拨码开关,三个拨码开关可以调节高音、中音、低音三个音调。3、画出电路的总体方框图和电路原理图。二、设计原理音乐由许多不同的音阶组成的,而每个音阶对应着不同的频率,这样,我们就可以利用不同的频率组合,构成我们想要的音乐。 简易电子琴是摁下拨码开关时,单片机AT89C51会发出声音,声音从P1.0端口经过LM386,经过放大以后传入喇叭。声音主要是经过单片机4×4矩阵键盘的按键产生,这里只

2、用到8个按键来产生高中低的8个音阶,来产生do re mi fa sol la si Do。下面是计数初值:音符频率HZ半周期us初值码音符频率HZ半周期us初值码低1DO262190863628#4FA#74067664860#1DO#277180563731中5SO78463864898低2RE294170063835#5SO#83160264934#2RE#311160863928中6LA88056864968低3MI330151664021#6LA#93253664994低4FA349143364103中7SI98850665030#4FA#370135064185高1DO104647

3、865058低5SO392127664260#DO#110945165085#5SO#415120564331高2RE117542665110低6LA440113664400#2RE124540265134#6LA#466107264463高3MI131837265157低7SI494101264524高4FA139735865178中1DO523095664580#4FA#148033865198#1DO#554090364633高5SO156831965217中2RE578084264684#5SO#166129265235#2RE#622080464732高6LA176028465252

4、中3MI659075964777#6LA#186526865268中4FA698071664820高7SI197625365283三、设计方案本次设计的电子琴主要是利用AT89C51单片机为核心控制元件,同时还包括键盘、拨码开关和扬声器等控制模块,由键盘选择八个音阶。1、电路原理图的总体设计 总体电路需要c51单片机一片,音乐按键及喇叭等外围电路,要进行音调控制和音频放大,设计好的电路图如下图所示:2、键盘控制模块的设计矩阵按键部分由8个轻触按键按照2行4列排列,连接到P3端口。将行线所接的单片机的I/O口作为输出端,而列线所接的I/O,则作为输入。行线输出是低电平,有健按下,则输入线就会被拉

5、低,这样,通过读输入线的状态就可得知是否有键按下。3、键盘消抖当用手按下一个键时,如图所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。键按下前沿抖动后沿抖动闭合稳定用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,此后再读入键盘码。一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得

6、要2个机器周期,还有两条指令要4个机器周期才行。DJNZ指令是双周期指令,所以延时10MS的指令如下:DELAY10MS: ;延时10ms程序MOV R6,#10D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RET4、拨码开关模块设计8个音阶的选择开关接在了P3口,三个拨码开关可以连在P2口的P2.0、P2.1、P2.2上,在内存区中建立三个表,分别存储低音、中音和高音的频率值。当三个拨码开关中某一个按下,就通过软件选择相应的音量。P2.0P2.1P2.25、扬声器模块设计(1)一般单片机的I/O口输出电压是在05V,NPN三极管的发射极接地时,基极不能直接接受5V电压,所

7、以用电阻R1来限流。一般取4.710K。(2)三极管工作在开关状态,即截止-饱和两个状态。用PWM输出时能听到声音,是因为变化的脉宽信号已经被平滑成了我们人耳能听见的音频信号(包络线)。“当IO口为高电平时三极管导通,此时基极的电位与集电极的电位又是相等的”,这里你忽略了电阻R1的作用。基极的电位最高是0.7V,而集电极的电位能低至饱和压降(0.1V左右),符合三极管饱和时“两个正偏”的状态。VccP1.0接地四、程序框图开始行列式键盘按键按下成功否?识别按键功能根据按键功能,装入音符T值到T0中启动T0工作行列式键盘按键释放成功否?停止T0工作T0初始化并开中断允放T0中断音调选择开关按下否

8、?T0中断入口重装TH0,TL0初值P1.0取反中断返回五、电子琴汇编源程序KEYBUFEQU 30H ;用于储存键值STH0 EQU 31H ;储存高八位初值STL0 EQU 32H ;储存低八位初值TEMP EQU 33H ;储存中间量ORG 00HLJMP MAIN ORG 0BH ;定时器T0中断入口地址LJMP INT_T0MAIN: ;主函数入口 MOV TMOD,#01h ;定时器T0初始化,采用方式1SETB EA ;总中断允许SETB ET0 ;定时器T0溢出中断允许TEXT: ;音调控制按键检测程序入口MOV A,P2CJNE A,#0FEH,TEXT1 ;检测P2.0口低

9、音控制按键是否按下MOV DPTR,#TABLE1 ;低音表首地址LJMP WAIT ;若音调控制按键按下,调至音阶按键检测程序TEXT1:CJNE A,#0FDH,TEXT2 ;检测P2.1口中音控制按键是否按下MOV DPTR,#TABLE2 ;中音表首地址LJMP WAITTEXT2:CJNE A,#0FBH,TEXT3 ;检测P2.2口高音控制按键是否按下MOV DPTR,#TABLE3 ;高音表首地址LJMP WAITTEXT3: LJMP TEXT ;若都没有按下则继续检测音调控制按键WAIT: ;音阶按键检测程序入口MOV P3,#0FFH CLR P3.4 ;检测第一列两个按键

10、MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELAY10MS ;软件延时消抖MOV A,P3ANL A,#0FHXRL A,#0FH JZ NOKEY1 ;确定是否有按键按下MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0 ;赋予键值LJMP DK ;调至按键处理程序NK1:CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DKNK2: NOPNOKEY1: ;检测第二列两个按键MOV P3,#0FFHCLR P3.5 MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY

11、2LCALL DELAY10MS ;软件延时消抖MOV A,P3ANL A,#0FHXRL A,#0FH JZ NOKEY2 ;确定是否有按键按下MOV A,P3ANL A,#0FHCJNE A,#0EH,NK3MOV KEYBUF,#2 ;赋予键值LJMP DK ;调至按键处理程序NK3:CJNE A,#0DH,NK4MOV KEYBUF,#3LJMP DKNK4: NOPNOKEY2: ;检测第三列两个按键MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELAY10MS ;软件延时消抖MOV A,P3ANL A

12、,#0FHXRL A,#0FH JZ NOKEY3 ;确定是否有按键按下MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5MOV KEYBUF,#4 ;赋予键值LJMP DK ;调至按键处理程序NK5:CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DKNK6: NOPNOKEY3: ;检测第四列两个按键MOV P3,#0FFHCLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELAY10MS ;软件延时消抖MOV A,P3ANL A,#0FHXRL A,#0FH JZ NOKEY4 ;确定是否有按键按下M

13、OV A,P3ANL A,#0FHCJNE A,#0EH,NK7MOV KEYBUF,#6LJMP DK ;调至按键处理程序NK7:CJNE A,#0DH,NK8MOV KEYBUF,#7LJMP DKNK8: NOPNOKYE4: LJMP TEXT ;若没有检测到音阶按键按下调至音调控制检测程序入口DK: ;键值处理程序入口MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOVC A,A+DPTR ;根据获得的表首地址及ACC的值读表MOV STH0,A ;存储定时器高八位初值MOV TH0,A ;赋予定时器高八位初值INC TEMP ;TEMP加1为了读取低八位初

14、值MOV A,TEMPMOVC A,A+DPTR ;读取低八位初值MOV STL0,A ;存储定时器低八位初值MOV TL0,A ;赋予定时器低八位初值SETB TR0 ;开启定时器T0中断允许DKA: ;检测音阶按键是否释放程序入口MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DKA ;确定按键是否释放,若没有,继续检测LCALL DELAY100MS ;音阶声音延时LCALL DELAY100MSLCALL DELAY100MSLCALL DELAY100MSCLR TR0 ;关闭T0溢出中断允许NOKEY4: LJMP TEXT ;重新检测DELAY10MS: ;延时1

15、0ms程序MOV R6,#10D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RETDELAY100MS: ;延时100ms程序 MOV R5,#0DDHDL0: MOV R4,#0CFH DJNZ R4,$ DJNZ R5,DL0 RETINT_T0: ;定时器T0中断入口程序MOV TH0,STH0 ;装入定时器高八位初值MOV TL0,STL0 ;装入定时器低八位初值CPL P1.0 ;P1.0口电平翻转,产生一定频率的方波RETI ;中断返回TABLE1: DW 63628,63835,64021,64103;低音调表值 DW 64260,64400,64524,64580TABLE2: DW 64580,64684,64777,648

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论