谁有用8255和8254制作电子琴的程序代码
kuaidi.ping-jia.net 作者:佚名 更新日期:2024-08-29
急求电子琴单片机程序
1352282
设计任务及要求
1. 以8255接八个开关K1~K8,做电子琴按键输入。
2. 以8253控制扬声器,拨动不同的开关,发出相应的音阶。
要求: K1—静音
K2—发si的音493Hz
K3—发la的音440Hz
K4—发sol的音392Hz
K5—发fa的音349Hz
K6—发mi的音329Hz
K7—发re的音293Hz
K8—发do的音261Hz
二. 方案比较和认证
通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。输入部分主要是由8255和8个常开型开关来完成。常开型开关如右图。8个常开型开关K1~K8与8255的A口PA0~PA7相接,不触动开关时,为高电平输入,当按下开关时,就接地,为低电平输入。例如当K1键按下时,从8255中A口输入的数为11111110B,十六进制为0FEH。每一个开关按下时,都对应一个ASCII码,如下表所示:
开 关 K1 K2 K3 K4 K5 K6 K7 K8
对应数据 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 7FH
对应频率 静音 493 Hz 440 Hz 392 Hz 349 Hz 329 Hz 293 Hz 261 Hz
输入部分的硬件实现比较简单,所以说主要还是在发音部分。在设计中驱动扬声器地声的主要有两种方式,分别是以位触发和定时器控制。下面就这两种不同的方式确定两个不同的设计方案。
方案1:
发声采用位触发方式。电路原理图如下所示。程序直接控制PPI(8255可编程序外围接口芯片)的输出控制寄存器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而产生一串脉冲控制波形,这些脉冲经过放大后驱动扬声器发出声音。
可以利用软件延时来控制所产生的脉冲波形的长度和脉宽,就可以实现产生不同频率和不同音长的声音。软件实现的程序如下:
IN AL,61H
MOV AH,AL
AND AL,0FCH ;关断定时器通道2的门控
SOUND:XOR AL,2 ;触发61H端口第1位
OUT 61H,AL
MOV CX,DX ;(DX)=控制脉冲的计数值
WAIT: LOOP WAIT ;延时循环
DEC BX ;(BX)=脉冲持续的时间
JNZ SOUND
MOV AL,AH
OUT 61H,AL ;恢复61H端口
强人,我没学过汇编语言,我们知道LOOP指令执行2801次的时间为10ms,所以延时子程序则很简单,只需要反复执行LOOP指令就可实现,并且所得到的延时时间为10ms的倍数。
intel 服务器网卡、台式机网卡、8254、8255系列网卡芯片区别、产品型号...
答:1.intel按网卡芯片划分产品,就象它的芯片组线一样 2.intel 桌面网卡非常少,新品就一两个型号,千兆、pci 32位接口的 3.intel 服务器网卡产品线非常丰富,接口基本上都是pci-x和pci-e;介质有LC Fiber Optic、CX4 Copper、SC Fiber Optic、RJ-45 Copper;所用网卡芯片有 Intel(R) 82546GB LC ...
怎样编写8255A的初始化? (用C语言)请指教!
答:我有更好的答案推荐于2017-12-15 12:25:49 最佳答案 #include "reg51.h"#include "absacc.h"#define COM XBYTE[0x7FFF] //8255A 控制口地址#define PA XBYTE[0x7CFF] //8255A A口地址#define PB XBYTE[0x7DFF] //8255A B口地址上面就是初始化 后面比如 你要在pa口 输出0x80那就PA=0x80;...
不用编程。
把两个LED,连接到一个按键上。
于是,每当有一个键按下,同时,就能有两个LED发光。
仿真实例 供参考。
1352282
设计任务及要求
1. 以8255接八个开关K1~K8,做电子琴按键输入。
2. 以8253控制扬声器,拨动不同的开关,发出相应的音阶。
要求: K1—静音
K2—发si的音493Hz
K3—发la的音440Hz
K4—发sol的音392Hz
K5—发fa的音349Hz
K6—发mi的音329Hz
K7—发re的音293Hz
K8—发do的音261Hz
二. 方案比较和认证
通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。输入部分主要是由8255和8个常开型开关来完成。常开型开关如右图。8个常开型开关K1~K8与8255的A口PA0~PA7相接,不触动开关时,为高电平输入,当按下开关时,就接地,为低电平输入。例如当K1键按下时,从8255中A口输入的数为11111110B,十六进制为0FEH。每一个开关按下时,都对应一个ASCII码,如下表所示:
开 关 K1 K2 K3 K4 K5 K6 K7 K8
对应数据 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 7FH
对应频率 静音 493 Hz 440 Hz 392 Hz 349 Hz 329 Hz 293 Hz 261 Hz
输入部分的硬件实现比较简单,所以说主要还是在发音部分。在设计中驱动扬声器地声的主要有两种方式,分别是以位触发和定时器控制。下面就这两种不同的方式确定两个不同的设计方案。
方案1:
发声采用位触发方式。电路原理图如下所示。程序直接控制PPI(8255可编程序外围接口芯片)的输出控制寄存器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而产生一串脉冲控制波形,这些脉冲经过放大后驱动扬声器发出声音。
可以利用软件延时来控制所产生的脉冲波形的长度和脉宽,就可以实现产生不同频率和不同音长的声音。软件实现的程序如下:
IN AL,61H
MOV AH,AL
AND AL,0FCH ;关断定时器通道2的门控
SOUND:XOR AL,2 ;触发61H端口第1位
OUT 61H,AL
MOV CX,DX ;(DX)=控制脉冲的计数值
WAIT: LOOP WAIT ;延时循环
DEC BX ;(BX)=脉冲持续的时间
JNZ SOUND
MOV AL,AH
OUT 61H,AL ;恢复61H端口
强人,我没学过汇编语言,我们知道LOOP指令执行2801次的时间为10ms,所以延时子程序则很简单,只需要反复执行LOOP指令就可实现,并且所得到的延时时间为10ms的倍数。
答:1.intel按网卡芯片划分产品,就象它的芯片组线一样 2.intel 桌面网卡非常少,新品就一两个型号,千兆、pci 32位接口的 3.intel 服务器网卡产品线非常丰富,接口基本上都是pci-x和pci-e;介质有LC Fiber Optic、CX4 Copper、SC Fiber Optic、RJ-45 Copper;所用网卡芯片有 Intel(R) 82546GB LC ...
答:我有更好的答案推荐于2017-12-15 12:25:49 最佳答案 #include "reg51.h"#include "absacc.h"#define COM XBYTE[0x7FFF] //8255A 控制口地址#define PA XBYTE[0x7CFF] //8255A A口地址#define PB XBYTE[0x7DFF] //8255A B口地址上面就是初始化 后面比如 你要在pa口 输出0x80那就PA=0x80;...