简易电子琴的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
与仿真
课程设计报告
简易电子琴的设计与仿真
1、设计原理:
1.1 音阶的产生
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。 本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5,105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
所示:
音符 频率(HZ) 简谱码(T值) 中 1 DO 523 64580
中 2 RE 587 64684
中 3 M 659 64777
中 4 FA 698 64820
中 5 SO 784 64898
中 6 LA 880 64968
中 7 SI 988 65030
1.2 实验环境
Keil uVision3
proteus 7
1.3 功能设计描述
按 k1—k7音调输出
按一下k8。在按k1—k7音频逆向输出 先按着k8再+k1键后会在音频输出歌曲,k1键停止
1.4 主要知识点
Keil uVision3的使用及调试
proteus 7的使用及调试
定时器、中断、键盘接口
数字电路、模拟电路的相关知识 2、实现及编程
2.1程序框图
)
开始
TO初始化并开中断允放TO中断
按键按下是否成功
识别按键功能
如果是第八键 如果是1-7键 则发出音调
Y
是否检测到k2 接着按k1-k7发出逆向的音调
N
K8是放开
T1初始化并开中断让T1中断
开始播放歌曲
如果检测到K1键按下
则停止播放歌曲
2.2电路原理图
2.3程序内容
7个音调的产生
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
按k2让音调逆向输出
如何按k8+k2放出音乐 和如何让音乐停止
2.4 汇编源程序
BUZZ EQU P2 ORG 001BH BUZZ1 EQU P1.7 LJMP TIME1 ORG 0000H ORG 8000H LJMP MAIN MAIN:
ORG 000BH MOV SP,#90H LJMP INT_T0 MOV BUZZ,#0FFH
MOV TMOD,#11H MOV 30H,#0FCH
SETB ET0 MOV 31H,#0C1H
SETB ET1 LJMP SET_TIMER
SETB EA KEY4:
CLR TR0 CJNE R0,#0F7H,KEY5 START: MOV 30H,#0FCH
MOV R0, BUZZ MOV 31H,#0EFH
CJNE R0,#0FFH,KEY1 LJMP SET_TIMER
CLR TR0 KEY5:
SJMP START CJNE R0,#0EFH,KEY6 KEY1: MOV 30H,#0FDH
CJNE R0,#0FEH,KEY2 MOV 31H,#045H
MOV 30H,#0FBH LJMP SET_TIMER
MOV 31H,#0E9H KEY6:
LJMP SET_TIMER CJNE R0,#0DFH,KEY7 KEY2: MOV 30H,#0FDH
CJNE R0,#0FDH,KEY3 MOV 31H,#92H
MOV 30H,#0FCH LJMP SET_TIMER
MOV 31H,#5CH KEY7:
LJMP SET_TIMER CJNE R0,#0BFH,KEY8 KEY3: MOV 30H,#0FDH
CJNE R0,#0FBH,KEY4 MOV 31H,#0D6H
LJMP SET_TIMER
KEY8: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CJNE R0,#7FH,NOKEY OSTART:
LOOP1:MOV R0, BUZZ MOV R0, BUZZ
CJNE R0,#7DH,LOOP CJNE R0,#0FFH,OKEY1
LJMP MAIN1 CLR TR0
LOOP: CJNE SJMP OSTART
R0,#0FFH,LOOP1 OKEY1:
CJNE R0,#0BFH,OKEY2
LJMP OSTART MOV 30H,#0FBH
MOV 31H,#0E9H SET_TIMER: LJMP OSET_TIMER
SETB TR0 OKEY2:
SJMP START CJNE R0,#0DFH,OKEY3 NOKEY: MOV 30H,#0FCH
CLR TR0 MOV 31H,#5CH
SJMP START LJMP OSET_TIMER INT_T0: OKEY3:
MOV TH0,30H CJNE R0,#0EFH,OKEY4
MOV TL0,31H MOV 30H,#0FCH
CPL BUZZ1 MOV 31H,#0C1H
RETI LJMP OSET_TIMER
OKEY4: LOOP2:MOV R0, BUZZ
CJNE R0,#0F7H,OKEY5 CJNE R0,#7DH,LOOP3
MOV 30H,#0FCH LJMP MAIN1
MOV 31H,#0EFH LOOP3: CJNE
LJMP OSET_TIMER R0,#0FFH,LOOP2
OKEY5:
CJNE R0,#0FBH,OKEY6 LJMP START
MOV 30H,#0FDH OSET_TIMER:
MOV 31H,#045H SETB TR0
LJMP OSET_TIMER SJMP OSTART
OKEY6: ONOKEY:
CJNE R0,#0FDH,OKEY7 CLR TR0
MOV 30H,#0FDH LJMP OSTART
MOV 31H,#92H ;;;;; ;;;;;;;;;;;;;;;;;;;;;;
LJMP OSET_TIMER MAIN1: MOV 40H,#00H
OKEY7:
CJNE R0,#0FEH,OKEY8 NEXT: MOV R0, BUZZ
MOV 30H,#0FDH MOV 41H,R0
MOV 31H,#0D6H ORL 41H ,#0FEH
LJMP OSET_TIMER MOV R0,41H OKEY8: CJNE R0,#0FFH,STOP
CJNE R0,#07FH,ONOKEY MOV A,40H
MOV DPTR,#SONG INC A
MOVC A,@A+DPTR MOVC A,@A+DPTR
CJNE A,#00H,PLAY MOV TL1,A
LJMP STOP MOV 20H,A
PLAY: MOV R1,A SETB TR1
ANL A,#0FH DEL: LCALL DELAY
MOV R2,A INC 40H
MOV A,R1 LJMP NEXT
ANL A,#0F0H STOP: CLR TR1
CJNE A,#00H,MUSIC LJMP START
CLR TR1 TIME1:PUSH ACC
LJMP DEL PUSH PSW
MUSIC:SWAP A CPL BUZZ1
DEC A MOV TL1,20H
MOV 22H,A MOV TH1,21H
ADD A,22H
MOV R3,A POP PSW
MOV DPTR,#SONG1 POP ACC
MOVC A,@A+DPTR RETI
MOV TH1,A DELAY:MOV R7,#02H
MOV 21H,A DELA1:MOV R6,#125
MOV A,R3 DELA2:MOV R5,#248
DJNZ R5,$ DB 16H,12H,14H,22H,32H
DB 26H,12H,94H,22H,32H
DJNZ R6,DELA2 DB 2CH
DJNZ R7,DELA1 DB 32H,52H
DJNZ R2,DELAY DB 36H,22H,14H,54H
RET DB 0ACH,92H,0A2H SONG1: DB 96H,0A2H,96H,82H DW 64580,64684,64777,64820 DB 3CH,54H
DW DB 36H,22H,14H,54H 64898,64968,65030,64260 DB 0ACH,92H,0A2H
DW DB 16H,12H,14H,22H,32H 64400,64524,65058,63835,64021 DB 2CH,02H,82H
DB 16H,32H,56H,12H
DB 0A6H,32H,56H,52H
DB 66H,72H,0B6H,62H SONG :;;;;;;;;;;;;;;;;;;月亮代表我
DB 62H,52H,58H,32H,22H 的心;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DB 02H,82H DB 16H,12H,14H,32H,22H
DB 16H,32H,54H,02H,52H DB 16H,12H,14H,22H,32H
DB 0A6H,32H,54H,02H,52H DB 26H,92H,0A4H,12H,22H
DB 64H,74H,0B6H,64H DB 1CH
DB 52H,5CH,32H,22H DB 00
DB 16H,12H,14H,32H,22H ;
END
3、调试及测试
3(1调试(按实际做的步奏)
如按下k5后显示如下图:
k1—k7音调输出
按一下k8。在按k1—k7音频逆向输出
先按着k8再+k1键后会在音频输出歌曲,k1键停止 3(2测试
在proteus环境下点击k1-k7 看看发出的音是不是正确的 K8键按后是否音调是逆向的
K8+k1是否音乐输出
在调试源代码中采用分块测试:音频输出、按键音乐播放
最后采用组合调试
3(3出现的问题及解决
在做k8按键 检查k到8直到k8放开才跳转 一直出错。。原来是忘了继续检测p2口。。。
TMOD设置错误
4、课程设计总结
4.1 在此设计基础上还可以增加的功能及设计思路
即每按下一个琴键,单片机能够检测到键盘的按键,并根据按键的位置通过程序来控制,使蜂鸣器发著不同频率的声音,声音延迟延迟一段时间,等到按键放开后,声音停止。然后再继续扫描,看是否有键按下,如此循环下去,即实现基本的琴键功能
还可以增加播放下一首的功能。
4(2通过本课程设计的收获及感想
熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。
对软件编程、排错调试相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
这个课程设计也培养了我们的耐心和毅力,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,由于这个课程设计也使我积累了一些经验,相信这些经验在我以后的学习工作中会有很大的作用