电子琴1
- 格式:doc
- 大小:115.00 KB
- 文档页数:10
1 南京工程学院
课程设计任务书
课 程 名 称: 单片机原理及应用A
院(系、部、中心): 自动化学院
专 业: 自动化(数控技术应用)
班 级: 数控061
姓 名: 俞 江
起 止 日 期: 2008.12.17~2008.12.21
指 导 教 师: 孙来业
2
目录
1 课程设计任务。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页
2 总体方案 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页
3 原理框图 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页
4 硬件接线图 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第4页
5调试过程 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页
6课程设计体会。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页
7主要参考文献。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页
8程序清单 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页
9实物图片 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第10页
3
一 课程设计任务
1 题目
电子琴设计
2 设计要求:
利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7、8、9作为电子琴按键,其中1~7号键按下后即发出相应的音调。8号键按下后依次发出“1、2、3、4、5、6、7” 音调,9号键按下后依次发出“7、6、5、4、3、2、1” 音调,P1.0 口发出音频脉冲,驱动喇叭。
二 总体方案
1 利用定时器,发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,发出不同的音调。各音阶的标称频率值如下表
2 定时器按设置的定时参数产生中断,这一次的中断发出脉冲低电平,下一次反转发出脉冲高电平。由于定时参数不同,就发出了不同频率的脉冲。本实验中按键一次,会发出50个脉冲。发完后继续检查键盘,如果键还按下,继续发音。
三 原理框图
音阶 1 2 3 4 5 6 7
频率(HZ) 440.00 493.88 554.37 587.33 659.26 739.99 830.61 4
四 硬件接线图
5
连线 连线孔1 连线孔2
1 P1.0 喇叭信号输入
五 调试过程(发现的问题、解决的方法)
1.发现的问题
在能够发出1-7音节后,按下1后在很快的速度接着按2的时候 发现
2的音并不能发出,再试其他的键是效果一样,不能达到实际生活中,电
子琴连续发音的情况,而在按下 8 键或者 9 键时,因为是间隔性的发声
所以不存在这类问题。
2.解决的方法
在和同组的同学交流之后,发现在每个键按下并发音之后,有一段延时
子程序,使得在一个键发音后接着按下另一个键的时候,系统在运行着这段
延时程序,不能后进行键盘扫描,从而发音,在去掉这段延时子程序后,得、
到解决。
六 课程设计体会
通过这次的课程设计,我学到不少东西,从理论知识上来讲,电子琴的
课程设计综合运用了单片机这门课程里大部分的知识,比如键盘扫描,键盘
值的读入和调用,定时器,延时等等。从实践能力上来讲,这次的课程设计
对于我对实验系统的了解,动手操作都有了很大的提高。
另一方面,我们做的这个电子琴和市场上卖的有声的贺卡其实是很相识
的,也就是说只要我们对其中的程序进行相应的修改,我们可以编出自己喜
欢的电子音乐,这是一个最切合实际的课程设计,是单片机的实际应用的一
个简单版,对还没实际走上社会的我们是很有帮助的。
七 主要参考文献 6 《单片机原理及应用实验指导书》,屈波等编,2008年
《单片机原理及应用》,赵德安等编,机械工业出版社,2004
《单片机原理及应用》,雷晓平等编著,机械工业出版社,2007
八 程序清单SPK EQU P1.0 ;喇叭控制信号
FKEY EQU 20H.0 ;是否有按键 标志
DI EQU 71H ;记录计数初值低字节
GAO EQU 72H ;记录计数初值高字节
KEY_NO EQU 73H ;按键码(1--9)
NO EQU 74H
TC EQU 75H
OUTBIT EQU 08002H ;位控制口
OUTSEG EQU 08004H ;段控制口
IN EQU 08001H ;键盘读入口
ORG 0000H
JMP BEGIN
ORG 0BH
JMP TO_INT
BEGIN:
MOV TMOD,#00000000B ;设置定时器
SETB EA
SETB ET0
JMP RUN
JMP $
PLAY: ;发单音子程序
CALL LOAD_VALUE
CALL SOUND_ON
PL1:
MOV R5,#15
CALL DELAY
CALL SOUND_OFF
RET
PLAY_SONG1: ;连续发音1-7 子程序
MOV TC,#0
PA0:
MOV DPTR,#SONG1
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,PA1 7 RET
PA1:CALL PLAY
INC TC
JMP PA0
RET
PLAY_SONG2: ;连续发音7-1子程序
MOV TC,#0
PB0:
MOV DPTR,#SONG2
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,PB1
RET
PB1:CALL PLAY
INC TC
JMP PB0
RET
SOUND_ON: ;开喇叭
SETB TR0
RET
SOUND_OFF: ;关喇叭
CLR TR0
RET
LOAD_VALUE: ;设定计数器初值子程序(发音不同的关键)
MOV DPTR,#HI_LIST
MOV A,R4
MOVC A,@A+DPTR
MOV GAO,A
MOV DPTR,#LO_LIST
MOV A,R4
MOVC A,@A+DPTR
MOV DI,A
RET
TO_INT: ;定时器中断服务子程序
MOV TL0,DI
MOV TH0,GAO
CPL SPK
RETI
HI_LIST: ;音频对应定时器初值高字节
DB 0,226,229,232,233,236,238,240
LO_LIST: ;音频对应定时器初值低字节
DB 0,4,13,10,20,3,8,6 8 SONG1: DB 1,2,3,4,5,6,7,0FFH ;连续发音1(即 8 键)
SONG2: DB 7,6,5,4,3,2,1,0FFH ;连续发音2(即 9 键)
DELAY: ;延时
MOV R6,#50
D1:MOV R7,#50
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
TABLE_DIG: ;键盘子程序
DB 16H,15H,14H,0FFH
DB 13H,12H,11H,10H
DB 0DH,0CH,09H,0AH
DB 0EH,03H,06H,09H
DB 0FH,02H,05H,08H
DB 00H,01H,04H,07H
SCAN: ;键盘扫描子程序(判断是
MOV DPTR ,#OUTBIT 否有键按下)
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#IN
MOVX A,@DPTR
CPL A ;累加器A中的内容求补
ANL A,#0FH 两数相与,放入A中
RET
GET_KEY: ;键码转化子程序
MOV DPTR,#OUTBIT 通过从键盘读入的数据,进行
MOV P2,DPH 转换后成为键码,然后根据键值
MOV R0,#LOW(IN) 从上面的键盘DATA定义段里 找
MOV R1,#00100000B 到实际按下的值,提供给发音字程序
MOV R2,#6 进行相应的选择。
KLOOP:
MOV A,R1 ;找出键所在列
CPL A
MOVX @DPTR,A
CPL A
RR A
MOV R1,A
MOVX A,@R0
CPL A
ANL A,#0FH
JNZ GOON1 ;该列有键按下
DJNZ R2,KLOOP