1、 目录目录 一、一、前言前言1 二、方案论证方案论证1 三、系统框图系统框图2 四、硬件设计硬件设计2 1、 89C52单片机芯片.2 2、发声电路.5 3、 按键电路6 五、 软件设计五、 软件设计.6 1、 主程序流程图6 2、 初使化程序6 3、 按键扫描及消抖程序7 4、 发声程序8 5、延时程序.9 6、中断子程序.9 六、 系统调试六、 系统调试.10 1、 硬件调试.10 2、 软件调试.12 七、设计总结七、设计总结14 八、参考书目八、参考书目15 九、附录九、附录16 1、附录一:系统设计原理框图16 2、附录二:电子琴音符频率表18 3、附录三:二十一音电子琴源程序19
2、4、附录四:二十一音电子琴仿真图24 5、附录五:二十一音电子琴硬件清单25 6、 附录六: keil 调试图和二十一音电子琴实物图.26 第 1 页 共 26 页 一、一、前言前言 单片机因其体积小、功能强、价格低廉而得到广泛应用,同时随着我国经济 的飞速发展,单片机在越来越多的领域中得到了很好的应用。单片机在中国产品 应用领域十分广泛,也与人民生活越来越密切。因此这次课程设计,我们尝试做 一个 21 键的电子琴,将我们平时所学,学以致用。 本设计主要是通过对电子琴主体部分的电路进行模仿设计, 达到电子琴固有 的基本功能。整个设计利用单片机定时器可发出不同频率的脉冲,不同频率的脉 冲经喇叭驱
3、动电路放大滤波后,就会发出不同音调原理来设计。首先,利用 21 个独立按键电路把我所需要发出声音的信号输入单片机;其次通过程序,定时器 按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲 高电平,由于定时参数不同,就发出不同频率的脉冲,本设计中按键一次,就会 调用一个延时程序,在延时后继续检测按键,若此时又有键被按下,若被按下的 仍为原键则声音不变,否则键盘会译出被按下的另一个键的音调。从而实现了一 个简易电子琴的功能。 二、方案论证二、方案论证 第一种方法是使用循环语句来实现延时。 让单片机循环的执行某条指令然后根据单片机每条指令运行的时间以及循 环的次数来计算延时时间。
4、 从延时程序可知, DJNZ 指令执行时间为2个机器周期, MOV 指令执行时间为1个机器周期,对于单片机的晶振频率为12MHz时,机器周 期为1 s。 因此可以根据这些指令的执行时间和每条指令的循环次数计算出以上 的延时程序延时时间大约为50ms。但这种方法的计算的延时时间不是很准确并 且为达到一定的延时时间先必须进行很复杂的运算。 所以在延时时间要求不严格 的时候才采用这种方法。但对于电子琴电路,由于每个音符的频率值要求比较严 格,变化范围不能太大,因此产生方波的频率也要求比较严格,不能采用延时程 序来产生此方波。 第二种方法是使用单片机的定时/计数器延时。 AT89C51单片机内部有两个16位的定时计数器 T0和 T1,单片机的定时 计数器实际上是个计数装置, 它既可以对单片机的内部晶振驱动时钟计数也可以 对外部输入的脉冲计数,对内部晶振计数时称为定时器,对外部时钟计数时称为 第 2 页 共 26 页 计数器。当对单片机的内部晶振驱动时钟计数时,每个机器周期定时计数器的 计数值就加1,当计数值达到计数最大值时计数完毕并通知单片机的 CPU;对外 部输入的时钟信号计数时,