电子琴1

  • 格式:doc
  • 大小:115.00 KB
  • 文档页数:10

1 南京工程学院

课程设计任务书

课 程 名 称: 单片机原理及应用A

院(系、部、中心): 自动化学院

专 业: 自动化(数控技术应用)

班 级: 数控061

姓 名: 俞 江

起 止 日 期: 2008.12.17~2008.12.21

指 导 教 师: 孙来业

目录

1 课程设计任务。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页

2 总体方案 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页

3 原理框图 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第3页

4 硬件接线图 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第4页

5调试过程 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页

6课程设计体会。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页

7主要参考文献。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页

8程序清单 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第5页

9实物图片 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。第10页

一 课程设计任务

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

四 硬件接线图

连线 连线孔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