目录摘要 (1)第一章设计方案的对比 (2)第二章总体方案设计 (3)2.1 原理简介 (3)2.2 方案设计思想 (3)第三章方案实现 (4)3.1、音频脉冲的产生 (4)3.2.音乐节拍的生成 (5)3.3.建立音乐的步骤 (5)第四章硬件设计 (6)4.1 硬件电路 (6)4.1.1、AT89C51的工作特性 (6)4.2 原理说明 (7)4.3 电路各模块说明 (7)4.3.1 键盘系统 (7)4.3.2 放大电路 (8)4.3.3 时钟电路 (9)4.3.4 复位电路 (9)5.3.5 显示电路 (10)第五章软件设计 (11)5.1 主模块的设计 (11)第六章仿真、安装和调试 (13)总结 (14)致谢 (15)参考文献 (15)附录 (16)附录一:音乐程序 (16)附录二:基于单片机的数字音乐盒总电路图 (33)摘要本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。
要求利用I/O 口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲(最少三首乐曲,每首不少于30秒),开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。
本设计采用4*4键盘,用Protel99来画系统硬件图,采用汇编语言进行编程,编程后利用KEIL C51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。
该音乐盒的设计可以通过按键选择不同的曲目,播放和暂停,并通过LCD显示歌曲号及播放时间。
本设计键盘采用动态扫描方式。
每次扫描一行键盘,送此行低电平,读输入口的状态值,判断有没有键按下。
若有键按下,根据读入口的值选择显示值并送至显示值寄存单元,判断键值,启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。
同时启动定时器T1,计算音乐的播放的时间。
关键词:数字音乐盒AT89C51 LCD显示器Proteus软件4*4键盘动态扫描 KEIL C5第一章 设计方案的对比方案一:本设计以89C51为核心,配合键盘系统,放大电路,时钟电路和数码管显示电路实现音乐的演奏。
音乐盒设计采用独立的键盘做为音符的输入以89C51为核心。
本设计中用到了89C51单片机,4*4矩阵式键盘,蜂鸣器,14引脚的LCD ,可以通过以下原理框图(图1.1)来实现该音乐盒的设计。
方案二:该方案以AT89S52单片机为核心,主要设计模块包括数码管显示部分,功能键盘部分,蜂鸣器发声部分,彩灯部分。
数码管采用共阳极数码管,通过单片机P1口控制,实现歌曲序号的显示;功能键盘采用1*8键盘按键开关,通过单片机P3口控制,实现歌曲播放顺序的调换和暂停播放功能;蜂鸣器由单片机的P2口控制,实现歌曲播放;彩灯是由普通发光二极管代替,能实现单色长亮和闪烁效。
综上所述:由于方案一的琴键输入是通过独立式键盘来完成的,这样便于控制且直观。
且本方案是采用我们所熟知的单片机类型和显示电路,便于我们理解。
而方案二中其他电路部分与方案一相差不大,但系统实现比较困难。
且主控芯片采用的是我们少用的AT89S51,所以我们选择方案一。
图1.1 系统结构框图琴键电路放大 电路P0.0 | P0.7P3.7时钟电路复位电路单片机89C51显示电路第二章总体方案设计2.1 原理简介当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号。
2.2 方案设计思想(1)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(2)利用8951的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。
例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。
记数脉冲值与频率的关系公式如下:N=Fi/2/Fr N:记数值Fi:内部计时一次为1微秒.故其频率为1MHZFr;要产生的频率(3):起记数值的求法如下:T=65536-N=65536-Fi/2/Fr例如:设K=65536,F=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr低音D0的T=65536-500000/262=63627中音D0的T=65536-500000/523=64580低音D0的T=65536-500000/1047=65059第三章 方案实现3.1、音频脉冲的产生对于音乐盒而言发出悦耳的音乐是其最主要的功能,那么对于使用单片机来制作出来的音乐盒怎么实现音符的发声呢?通过查看资料我们知道音符的发音主要靠不同的音频脉冲。
利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制引脚的输出音乐(本实验采用P1.0做为输出引脚)。
只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O 反相,然后重复计时此半周期时间再对I/O 反相,就可在I/O 脚上得到此频率的脉冲。
具体做法如下所示(以中音DO 为例):例如:中音1(DO )的音频= 523HZ,周期T=1/523s=1912s μ 定时器/计数器0的定时时间为:T/2=1912/2s μ=956s μ定时器956s μ的计数值=定时时间/机器周期=956s μ/1s μ=956(时钟频率=12MHZ)装入T0计数器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P1.0引脚的输出值进行取反,就可得到中音DO (523HZ )的音符音频。
将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。
下表3-1是C 调各音符频率与计数初值T 的对照表:表3-1 C调各音符频率与计数初值T的对照表音符频率(Hz)/初值(sμ)音符频率(Hz)/初值(sμ)低1DO 262/63627 中1DO 523/64580 高1DO 1042/65056 低2RE 294/63835中2RE 589/64687 高2RE1245/65134低3M 330/64021 中3M 661/64780 高3M 1318/65157 低4FA 350/64107中4FA 700/64822 高4FA1397/65178低5SO 393/64264 中5SO 786/64900高5SO 1568/65217 低6LA 441/64402中6LA 882/64969 高6LA 1760/65252低7SI 495/64526 中7SI 990/65031高7SI 1967/652823.2.音乐节拍的生成要唱出一首歌,只产生出音频脉冲还不够,还要考虑节拍。
定义:每个音符占用一个字节,字节的高4位代表音符的高低,低4位表示该音符的节拍,如果一拍为0.4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。
我们也可以设1/4拍为1个DELAY,则1拍应该是4个DELAY,只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。
(见表3-2)表3-2节拍数1/4节拍2/4节拍3/4节拍1拍1又1/4拍节拍码 1 2 3 4 5节拍数1又1/2拍2拍2又1/2拍3拍3又3/4拍节拍码 6 8 A C F3.3.建立音乐的步骤先把谱的音符找出,然后由上表建立时间常数初值T的顺序表,标号为TABLE1。
建立音符和节拍表,标号为TABLE,将构成发音符的计数值放在其中。
TABLE表的结构为:简谱码(代表音符)为高4位,节拍码(表示节拍数)为低4位,在唱歌程序中对每一个有节拍的音符能通过设计共同生成音符节拍码,本程序的音符节拍码表见表3-2。
第四章硬件设计4.1 硬件电路本设计中用到了89C51单片机,其引脚图如右图4-1-1所示,矩阵式键盘模块,蜂鸣器,16*2 LCD,扬声器、LED数码管显示器等。
(数字音乐盒总硬件图如附录一所示)图4-1-1 89C51引脚图4.1.1、AT89C51的工作特性•内含4KB的FLASH存储器檫写次数1000次;•内含128字节的RAM;•具有32根可编程I/O 线; •具有2个16位编程定时器•具有6个中断源,5个中断矢量,2级优先权的中 断结构;•具有1个全双工的可编程串行通信接口; •具有1个数据指针DPTR ; •具有可编程3级程序锁定位;•AT89C51的工作电源为5(1±0.2)V 且典型值为5V ; •AT89C51最高工作频率为24MHZ ;•AT89C51的编程频率为3~24MHZ ,编程启动电流和启动电压 分别为1mA 、5或12V 。
4.2 原理说明当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
同时启动定时器T1,显示歌曲号。
(1) 硬件电路中用0INT 、1INT 分别接S1、S2作为上、下一曲的功能键 (2) 用P1.0-P1.6控制七段码a,b,c,d,e,f 。
(3) 用P2.0口控制喇叭。
(4) 电路为12MHZ 晶振频率工作,起振电路中C1,C2均为30pf 。
4.3 电路各模块说明4.3.1 键盘系统键盘模块采用4*4按键模式(S1-S16),接在单片机的P1口上。
键盘系统的链接电路图如图4-3-1所示:当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms 。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms 来等待抖动消失,这之后,在读入键盘码。
具体编码如下所示:MAI: CLR TR0 ;关闭上一次定时,进入下一次按键判断MOV TMOD, #01HMOV IE, #82HMOV A, P1MOV 30H, A ;保存键盘状态值LCALL D10MS ;延迟10ms消除抖动MOV A , P1 ;再读键盘状态CJNE A, 30H, MAI ;两次结果不同,是抖动引起,转MAI图4-3-1 键盘模块电路图4.3.2 放大电路放大电路的分析如下所示,其电路图如图4-3-2所示:此部分的放大电路简单容易实现。