四川大学网络教育学院计算机综合实践报告 2012年秋电气专业罗欢潮
工作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号。当8255的PA0和PA1都为1时,8253发出指定频率的声音信号的前提下,声音信号通过与门到达驱动器驱动扬声器发声。
硬件原理图如图1所示: Q0 8255 PA0 8253 计数器 门控 控制喇叭 8255 PA1 图1 硬件原理图 与门 扬声器驱动 扬声器 扬声器驱动电路如图2所示。
图2 扬声器驱动电路
软件设计
系统要求实现2个功能,电子琴和音乐盒的功能。两者发声的方法一样,只是一个数据是从键盘读取的,另一个是已经保存好的数据。首先我们可以用一个子程序实现单个音调的产生,对8253输入不同的计数初值生成不同频率的波形,然后延时一段时间。电子琴程序主要是读取键盘按键,根据键值产生不同的音调即可。而乐曲的播放先将乐曲的音符编码表和节拍编码表建立好的,然后在播放时读取数据。 1. 单音调子程序SOUND
单音调子程序的调用前需要进行以下几个方面工作:
四川大学网络教育学院计算机综合实践报告 2012年秋电气专业罗欢潮
1)确定相应的音调所对应的频率,查表可以得到,再由频率得到对应的8253计数初值。
2)确定音长,即一个音符所持续的时间。
在单音调子程序中实现发出一个音符的声音,持续所需的时间,流程图如图3所示:
读取8253计数初值和音长 8253置初值 开启与门和8253GATE 延时 关闭与门和8253GATE 返回
图3 单音调子程序流程图
2.音乐盒程序
音乐盒的乐曲播放程序中需要有两组数据支持:一组是频率数据,一组是节拍时间数据。音符的频率可以通过简谱从频率表中查得。节拍时间就是音符的持续时间,取决于乐曲的速度和每个音符的节拍数据。如4/4(四四拍)中,每小节包括4拍,全音符持续4拍,二分音符持续2拍,四分音符持续一拍,八分音符持续半拍等。
有了音调与频率和时间的关系后,就可以按照乐曲的曲谱将每个音符的频率和持续的时间定义成两组数据表,然后编程依次取出表中的频率值和节拍值,调用单音调子程序就可依次产生各个音调,播放出乐曲。
在程序中存储几个乐曲数据,根据音乐盒子菜单选择相应的乐曲
四川大学网络教育学院计算机综合实践报告 2012年秋电气专业罗欢潮
演奏,读取对应的数据输出。 乐曲《两只老虎》的简谱如下:
两只老虎
1=C 4/4
1 2 3 1 | 1 2 3 1 | 3 4 5 - | 3 4 5 - |56 54 3 1 |56 54 3 1 | 2 5 1 - | 2 5 1 - |
对应的频率数据表Freq、节拍数据表Time如下:
TWOTIGERS_FRE DW 2 DUP(524,588,660,524,0) ;乐曲的频率表
DW 2 DUP(660,698,784,0)
DW 2 DUP(784,880,784,698,660,524,0) DW 2 DUP(588,392,524,0),1
TWOTIGERS_TIME DW 10 DUP(100),200,100,100,200 ;乐曲的时间表
DW 2 DUP(50,50,50,50,100,100) DW 2 DUP(100,100,200) outb_p(0x34,0x43); outb_p(LATCH&0xff,0x40); outb_p(LATCH>>8,0x40);
outb(inb_p (0x21) & ~0x01, 0x21); //允许接收定时器中断
四川大学网络教育学院计算机综合实践报告 2012年秋电气专业罗欢潮
}
void do_timer(void) {
这是定时器主程序,用于每隔一段时间后进行某些操作 }
[8253.asm]:
//以下是nasm格式的汇编代码,这个中断处理函数必须用汇编 timer_interrupt: push gs push fs push es push ds push ebp push edi push esi push edx push ecx push ebx push eax
;如果你不在操作系统下使用,以下三行必须删除,否则必须把0x10更改为内核段选择符 mov eax,0x10 mov ds,ax
四川大学网络教育学院计算机综合实践报告 2012年秋电气专业罗欢潮
mov es,ax mov al,0x20
out 0xa0,al ;发送EOI out 0x20,al call do_timer pop ebx pop ecx pop edx pop esi pop edi pop ebp pop ds pop es pop fs pop gs xor eax,eax iretd
实验四 实时时钟实验
一、实验目的:
掌握ARM7嵌入式系统实验箱的使用方法;掌握LPC2148的内部定时器模块的使用方法;掌握LPC2148的RTC模块的使用方法。 二、实验内容: