数电大作业实验报告如图是CODE3的case语句程序,该模块是一个编码器,即将输入的8位琴键信号进行编码,输出一个4位码,最多能对应16个音符(若有16个键)。
如图所示是INX2CODE的case语句程序,该模块是一个译码器,它将来自键盘输入的编码信号译码成数控分频器SPK0输出信号的频率控制字。
另外两个模块是M_CODE和DCD7SG,它们的case语句程序如上图所示。
前者的功能是将来自CODE3的键盘编码译成简谱码和对应的音调高低值H,后者是一个数码管7段显示译码器,负责将简谱码译成数码管的显示信号。
如图所示是SPK0模块的内部结构。
其中的计数器CNT11B是一个LPM宏模块,这是一个11位二进制加法计数器。
在设置其结构参数时,应该选择同步加载控制,即sload(Synchronous Load),这样能较好地避免来自进位信号cout中可能的毛刺影响。
异步加载aload极易受到随机窄脉冲的误触发,在此类电路中不宜采用。
图中D触发器和反相器的功能是将用于控制加载的进位信号延迟半个时钟周期,一来也是为了滤除可能的毛刺,以免对加载更为可靠,因为这时,时钟上升沿正好处于加载脉冲的中点。
模块CODE3,INX2CODE和SPK0的主要工作过程是这样的:
当按琴键后,产生的数据经编码器获得一个编码(例如,当按下第二个键,对应0010,即2),它对应模块INX2CODE中的一个值(2对应390H)。
当这个值(如390H)被置入模块SPK0中的11位可预置计数器中后。
由于计数器的进位端与预置数加载段端相连,导致此计数器将不断以此值作为计数起始值,直至全1。
以下以预置值为390H为例,来计算SPK0输出信号的频率值。
当以390H为计数器起始值后,此计数器成为一个模(7FFH-390H=46FH=1135)的计数器。
即每从CLK端输入1135个脉冲,BEEP端输出一个进位脉冲。
由于输入的时钟频率是1MHz (周期是1us),于是BEEP输出的信号频率是1/(1135us)=841Hz。
由下面电子琴的顶层电路可见,SPK0的输出信号经过一个由D触发器接成的T’触发器后才输出给蜂鸣器。
这时信号被作了二分频,于是,预置值390H对应的与蜂鸣器发音的基频F
约等于440Hz。
B
电子琴顶层电路中T’触发器有两个功能,一个作用是作二分频器;另一个作用是作为占空比均衡电路。
这是因为由SPK0模块输出信号的脉宽极窄,功率极低,无法驱动蜂鸣器,但信号通过T’脉宽就均匀了(F
的占空比为50%)。
B
如图所示是电子琴顶层设计电路,含2个输入口和3个输出口。
1.工作时钟CLK,频率:1MHz。
用于在主控模块中产生与琴键对应的振荡频率,以驱动蜂
鸣器发出相应的声音。
2.琴键输入DIN[7..0].8个音符,8位中只能有一位为0,即8个琴键中每一时刻只能按
一个键。
3.输出端口SPK0用于驱动蜂鸣器。
4.输出信号LED接数码管,用于显示对应的简码谱。
H显示音高低。