《51单片机简易电子琴(共10页).doc》由会员分享,可在线阅读,更多相关《51单片机简易电子琴(共10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上基于51单片机简易电子琴设计院 系;电气信息工程学院班 级;10通信工程三班姓 名:张瑞 指导老师:设计周数:一周一设计题目:设计一简易电子琴,要求能够发出1、2、3、4、5、6、7等七个音符。使用元件:AT89C51、LM324,喇叭,按键等 二设计目的(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。(2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。(4)对软件编程、排错调试、
2、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。三设计思路在本次课程设计中,根据复杂程序设计思想模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。程序设计的思路按以下顺序进行:1 分析与确定程序总体设计目标2 将总体目标划分为若干模块3 定义每个模块的具体任务,明确它与其他模块间的通信方式4 编写源程序,进行调试四、设计原理、思路及流程图设计原理(1)对于一个特定的/转换接口电路,CPU执行一条输出指令将数据送入/, 即可在其输出端得到一定的电压输出。给/转换器输入按正弦规律变化的数据, 在其输出端即可产生
3、正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值: (2)由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。原理: 系统硬件图 流程图: 。 本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216-5105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,: 五 实验源程序方案一:产生按
4、键音符 ORG 0000H LJMP MAIN ORG 000BH LJMP BREAKMAIN: MOV TMOD,#01H ;设置定时器0的工作方式 SETB EA SETB ET0 ; 设置定时器0中断 SETB TR0 ; 启动定时器0WAIT1: LCALL KEY ; 调用KEY子程序,判断有键按下否?第几个键? CLR EA ;屏蔽中断 CJNE R3,#00H,WAIT1 ;如果R3=0,表示有键按下 MOV A,22H ;将22H里存放的按键号送给A RL A ; 因为查表里都是字,所以得乘2查得数据 MOV DPTR,#TABLE ;指向表头 MOVC A,A+DPTR ;
5、 查表 MOV TH0,A ;将数据高位送TH0 MOV 21H,A ; 将高位备份 MOV A,22H ;将22H里存放的按键号送给A RL A ;因为查表里都是字,所以得乘2查得数据 INC A ;取低位数据 MOVC A,A+DPTR MOV TL0,A MOV 20H,AWAIT2: LCALL KEY SETB EA CJNE R3,#00H,WAIT1 JMP WAIT2KEY: MOV R3,#00H ; KEY子程序,判断有键按下否?第几个键? MOV R1,#0FFH MOV R0,#00H MOV A,R1 MOV P2,A MOV A,P2 CLR C CPL C ;利用
6、标志位CY来判断是哪个键按下 MOV R2,#08HWAIT3: RLC A ;移位判断 JNC STORE INC R0 DJNZ R2,WAIT3STORE: MOV 22H,R0 ; 将按键号存22H,R3=0有键按下 MOV R3,#00H RETBREAK: PUSH ACC ; 中断产生方波,从P1.0口输出 PUSH PSW MOV TL0,20H MOV TH0,21H CPL P1.0 POP PSW POP ACC RETITABLE: DW 65030,64968,64898,64820,64777,64684,64580 ; 7,6,5,4,3,2,1 END方案二:产
7、生按键音符 ORG 0000H SJMP START ORG 000BH AJMP INT_0 ORG 0030HSTART: MOV P1,#00H SETB EA SETB ET0 ;计数器0 MOV TMOD,#02H MOV TH1,#09CH MOV TL1,#09CH ;定时器初植 CLR TR0 ;定时器不允许SCAN: ;键盘扫描 MOV A,P2 ;判断键盘按下,跳到SCAN_1,若未按,继续扫描 CJNE A,#0FFH,SCAN_1 NOP SJMP SCANSCAN_1:ACALL DELAY ;是不是真的要按下?如果是,则跳转SU_KEY查询是哪个按下? MOV A,
8、P2 CJNE A,#0FFH,SU_KEY NOP SJMP SCANSU_KEY:JNB P2.1,MU_1 ;判断是哪个键按下? JNB P2.2,MU_2 JNB P2.3,MU_3 JNB P2.4,MU_4 JNB P2.5,MU_5 JNB P2.6,MU_6 JNB P2.7,MU_7 SJMP SCAN ;R1信号周期MU_1: MOV R1,#19 ;如果第一个按键按下,则R1=19,同时程序转NEXT SJMP NEXTMU_2: MOV R1,#17 SJMP NEXTMU_3: MOV R1,#15 SJMP NEXTMU_4: MOV R1,#14 SJMP NEX
9、TMU_5: MOV R1,#13 SJMP NEXTMU_6: MOV R1,#11 SJMP NEXTMU_7: MOV R1,#10 SJMP NEXTNEXT: MOV A,R1 MOV R0,A SETB TR0 ;启动定时器0 NEXT_1:MOV A,P2 ; 没键按下继续执行,有键按下,返回读引脚 CJNE A,#0FFH,NEXT_1 ACALL DELAY MOV A,P2 ;真的没键按下? CJNE A,#0FFH,NEXT_1 CLR TR0 ;不响 AJMP SCAN ;扫描键盘去 INT_0: ;中断程序 DJNZ R0,RE ;R0不等于0时,返回 CPL P1.
10、0 MOV A,R1 MOV R0,ARE: RETIDELAY:MOV R7,#100 ;延长时间等待,键盘消抖D1: MOV R6,#10D2: DJNZ R6,D2 DJNZ R7,D1 RET END 生日快乐歌:(扩展功能部分程序) ORG 0000H JMP MAIN ORG 000BH JMP TT0MAIN: MOV TMOD,#01H ;设置定时器0工作方式 MOV IE,#82H ;设置中断MAIN0:MOV 30H,#00HNEXT: MOV A,30H MOV DPTR,#TABLE ;查表 MOVC A,A+DPTR MOV R2,A JZ STOP ANL A,0F
11、H MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP W1SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 ;查表 MOVC A,A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL0,A MOV 20H,A SETB TR0W1: CALL DELAY INC 30H JMP NEXTSTOP: CLR TR0 JMP MAIN0TT0: PUSH ACC ;中断服务程序 PUSH PSW MOV TL0,2
12、0H MOV TH0,21H CPL P1.0 POP PSW POP ACC RETIDELAY:MOV R7,#2 ;延时187ms W2: MOV R4,#187 W3: MOV R3,#248 DJNZ R3,$ DJNZ R4,W3 DJNZ R7,W2 DJNZ R5,DELAY RETTABLE1:DW 64260,64400,64524,64580 ;音符计数植 DW 64684,64777,64820,64898 DW 64968,65030,65058,65110DW 65157,65178,65217 TABLE:DB 82H,01H,81H,94H,84H ;节拍表 D
13、B 0B4H,0A4H,04H DB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4HDB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H
14、,04H DB 00HEND六、 实验总结:经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试过,就肯定学到了不少东西,也真正体会到做电子设计行业工作的辛苦,不过自己收获还是挺大的。这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。经过短短一周的课程设计,我认识到,课程设计能真正让人学到实际应用的东西的一门课程。收获比上几星期课还多。 首先,要实现题目要求的功能并有所创新,我们必须全心地投入其中,养成一种敢于钻研敢于创新的
15、习惯。在把课程要求实现到实际中来的过程中,首先必须清楚明白地了解几个参考程序的每一行的意思,这就需要敢于静心钻研。为了把使得程序更加完整,就必须进行创新,这就需要敢于创新。 其次,通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧。为了了解键盘,查找了不少单片机的资料,了解了键盘的初始化,存取缓存,扫描键盘,读取键码以及键码和显示码之间的转换。为了实现基本功能,认真研究了参考程序的意义,了解了电子琴的不同音阶放音功能的实现,长短音的实现,更深入了解了单片机的使用方法。编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。调试程序中,学习了DEBUG 的使用,DEBUG对检查程序的错误作用很大。同时,也要灵活使用各种调试方法,来缩小寻找错误的范围。检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。在设计扩展功能的过程中,大胆想像并且用多种思路来求解实现目标是必备的武器。参考文献:单片机应用及C51程序设计 机械工业出版社单片机原理与实践指导 中国电力出版社电子线路CAD北京大学出版社电子线路CAD设计电子工业出版社51单片机开发与应用技术详解电子工业出版社专心-专注-专业