严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30PF?10PF,而如果使用陶瓷振荡器建议选择40PF?10PF。用户也可以采用外部时钟。采用外部时钟的电路如图示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如下:
图3.4 单片机内部、外部振荡电路
3.3 硬件电路图及功能
总体硬件电路实现功能如下,如图3.5所示
电路中用P1.0~P1.5控制按键。P0.0~P0.7控制LED。P3.0控制蜂鸣器。电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。
5
LCD1LM017LC230pC1VSSVDDVEE30p8RSRWE456复位123CRYSTAL7891011121314X1D0D1D2D3D4D5D6D7U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617D2+5VR2330RC38u18+5V10KD1123456789RESPACK-8D3XTAL29RSTLED-YELLOWD5LED-YELLOWD6LED-YELLOWD7LED-YELLOWD8LED-YELLOWLED-YELLOWLED-YELLOWD40123293031PSENALEEALED-YELLOW4下一首5上一首6播放|暂停7开机LS112345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51SOUNDER 图3.5 硬件电路图
4. 软件设计
4.1 软件程序设计
4.1.1 程序流程图
主程序流程图
6
4.1.2 程序源代码(见附录A)
4.2音乐程序的设计原理
4.2.1 建立音乐的步骤
1. 先把乐谱的音符找出,然后建立T值表的顺序。
2. 把T值表建立在TABLE1,构成发音符是计数值放在“TABLE”。 3. 简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。
4.2.2 单片机音乐的产生原理
1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
2.利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。
3.例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr N:计数值;
Fi:内部计时一次为1us,故其频率为12MHz; Fr:要产生的频率; 4.其计数值的求法如下:
T=65536-N=65536-Fi÷2÷Fr
例如:设K=65536,F=1000000=Fi=1MHz,求低音DO(261MHz)、中音DO(523MHz)、音DO(1046MHz)的计数值。
T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr
低音DO的T=65536-500000/262=63627 中音DO的T=65536-500000/523=64580 高音DO的T=65536-500000/1047=65059
5.C调各音符频率与计数值T的对照表如附录表B所示。
7
表4-1 节拍与节拍码对照 节 拍 码 1 2 3 4 5 6 8 A C F 节 拍 数 1/4拍 2/4拍 3/4拍 1拍 1又1/4拍 1又1/2拍 2拍 2又1/2拍 3拍 3又3/4拍 节 拍 码 1 2 3 4 5 6 8 A C 节 拍 数 1/8拍 1/4拍 3/8拍 1/2拍 5/8拍 3/4拍 1 1又1/4拍 1又1/2拍 表4-2各调1/4节拍的时间设定 各调1/4节拍的时间设定 曲 调 值 曲 调 值 DELAY DELAY 调1/4 调3/4 调2/4 125毫秒 187毫秒 250毫秒 调4/4 调3/4 调2/4 62毫秒 94毫秒 125毫秒 1/4拍的延迟时间=187毫秒
DELAY: MOV R7,#02
D2: MOV R4,#187 别的延迟值,只需修改这儿的值为相应值,即可。
D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2
DJNZ R5,DELAY 节拍值放在R5,决定节拍 RET 相关知识:
每一音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,节拍与节拍码的对照如表4-1所示。
节拍与节拍码的对照。如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间 。假使1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DEALY时间,其余的节拍就是它的倍数,如附录表B所示为1/4和1/8节拍的时间设定简 谱 发 音 简 谱 码 T值。
8
5. 调试
5.1 检查硬件连接
在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,复位电路是否设计正确。
5.2 检查软件系统
1.根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。
2.将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。
5.3 测试结果
5.3.1.总体运行图
LCD1LM017LC230pC1VSSVDDVEE30p8RSRWE456复位123CRYSTAL7891011121314X1D0D1D2D3D4D5D6D7U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617D2+5VR2330RC38u18+5V10KD1123456789RESPACK-8D3XTAL29RSTLED-YELLOWD5LED-YELLOWD6LED-YELLOWD7LED-YELLOWD8LED-YELLOWLED-YELLOWLED-YELLOWD40123293031PSENALEEALED-YELLOW4下一首5上一首6播放|暂停7开机LS112345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51SOUNDER 图5.1 系统总体运行图
6. 课程设计体会
这学期学习单片机的课时不多,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。
在一个好的氛围里才能踏下心来做东西,在这一段时间里,同学们都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,查阅资料,互助解决问题。另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。我们也是这么做的,这一点在这次的课程设计中十分重要。
通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单
9