本次课程设计,我采用矩阵式键盘电路,这样可以大大的节省单片机IO的开销。键盘电路见图6-7
图6-7 键盘电路
[13]
在按键过程中常产生“毛刺”现象,如图6-8所示,要消除“毛刺”现象,
这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后,再延时一段时间(10ms~20ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
图6-8“毛刺”现象
6.2.6 发音电路
电子琴发音电路见图6-9。
图6-9 电子琴发音电路
6.2.7 供电及复位电路
电子琴的供电电路和复位电路
[14]
见图6-10。
图6-10 电子琴供电及复位电路
6.2.8 LED数码管显示电路
本次毕业设计的显示电路采用LED数码管显示,LED(Light-Emitting Diode)是一种外加电压从而渡过电流并发出可见光的器件。LED是属于电流控制器件,使用时必须加限流电阻
[15]
。LED有单个LED和八段LED之分,也有共阴和共阳两种。
常用的七段显示器的结构如图下图所示。发光二极管的阳极连在一起的称为共阳极显示器(如图b所示),阴极连在一起的称为共阴极显示器(如图c所示)。1位显示器由八个发光二极管组成,其中七个发光二极管a~g控制七个笔画(段)的亮或暗,另一个控制一个小数点的亮和暗,这种笔画式的七段显示器能显示的字符较少,字符的开头有些失真,但控制简单,使用方便。
此外,要画出电路图,首先还要搞清楚他的引脚图的分布,在了解了正确的引脚图后才能进行正确的字型段码编码。才能显示出正确的数字来。
图6-11 数码管引脚
选用的是P0口作为输出口时要接上拉电阻
7 系统软件设计
7.1系统软件总体方案 (1)键盘扫描程序:
检测是否有键按下,有键按下则记录按下键的键值,并跳转至功能转移程序;无键按下,则返回键盘扫描程序继续检测 (2)功能转移程序:
对检测到得按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲功能 (3)琴键处理程序:
根据检测到得按键值,查询音律表,给计时器赋值,使发出相应频率的声音 (4)自动播放歌曲程序:
检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放好的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有键按下
7.2系统软件简易流程图
否 是
是 否 按键子程序流程图如下
弹奏程序流程图
自动播放歌曲程序流程图
Y N Y
N 7.3 部分设计源程序 7.3.1歌曲播放子程序
;=== 歌曲播放子程序 === START0:
mov 30H,# SONG0 ;取简谱码指针(第1首) next: mov a,30h
mov dptr,#tab1
movc +dptr ;至相关页码,高4位为音符的高低 mov r2,a ;低4位为音符的节拍 jz end0 ;检查简谱码是否已结束(有无00?) anl a,#0fh ;取节拍(低4位)
mov r5,a ;存入r5,节拍的时间 mov a,r2 swap a
anl a,#0fh ;取音频值(高4位) jnz sing ;是否为0,是0则不发音 clr TR1 ;开始,则不发音 jmp d1
sing: dec a ;因0不列入 mov 22h,a ;存入(22h) rl a ;乘2 mov dptr,#tab1
movc +dptr ;至tab1取码,取t的值
mov th1,a ;取到的高位字节存入th1 mov 21h,a ;取到的高位字节存入(21h) mov a,22h ;再载入取到的音符码 rl a ;乘2 inc a ;加1
movc +dptr ;至table取相对的低位字节计数值 mov tl1,a ;取到的低位字节存入tl0 mov 20h,a ;取到的低位字节存入(20h) setb TR1 ;启动TIMER0 d1: call delay
inc 30h ;取简谱码指针加1 jmp next
end0: clr TR1 ;停止TIMER0
mov a,31h ;载入计次指针 xrl a,#00h ;是否按第1次? jnz end1 ;不是则跳至end1 jb KEY,$ ;按第2次? call delay1 ;消除抖动 jnb KEY,$ ;放开否?
inc 31h ;计次地址(31h)加1 MOV 30h,# song1 ;第2首歌指针 jmp next 7.3.2延时程序 DELY10MS:
MOV R6,#10 D10: MOV R7,#248 DJNZ R7,$ DJNZ R6,D10 RET 7.3.3音符参数表
;==== 音符参数表===
TABLE: DB 06H,5BH,4FH,66H,6DH,7DH,07H,06H DB 06H,5BH,4FH,66H,6DH,7DH,07H,06H
8 系统调试与测试结果分析
8.1 系统调试
在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:中心控制模块的调试,音乐播放模块的调试,按键控制模块的调试等,最后将各模块组合后进行整体测试。首先对各模块的功能进行调试,主要调试各模块能否实现指定的功能。然后通过WAVE6000软件对编好的程序进行调试,检查语法错误。最后将调试好的软件程序导入到硬件模块中,调试系统实现的功能。
调试主要方法和技巧:软件调试和硬件调试 8.1.1系统软件调试
通常一个调试程序应该具备至少四种性能
[16]
:跟踪、断点、查看变量、更改
数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。 8.1.2 系统硬件调试
硬件调试主要是针对单片机部分进行调试。