实验四 电子琴模拟实验

您所在的位置:网站首页 电子琴发声的原理 实验四 电子琴模拟实验

实验四 电子琴模拟实验

2024-06-06 04:57| 来源: 网络整理| 查看: 265

实验四 电子琴模拟实验 实验目的

1、了解单片机系统发声原理 2、进一步熟悉定时器编程方法

实验说明

1、利用定时器,可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。 2、定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平。由于定时参数不同,就发出了不同频率的脉冲。本实验中当有键按下,会发出连续脉冲,直到按键松开,才停止发音。发完后继续检测键盘,如果键还按下,继续发音。 各音阶标称频率值:

音 阶 1 2 3 4 5 6 7 频率(HZ) 261.1 293.7 329.6 349.2 392.0 440.0 493.9 实验内容及步骤

利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。用P3.2 口发出音频脉冲,驱动喇叭。 1、单片机最小应用系统的 P1口接查询式键盘,单片机INT0口接扬声器的SP+,SP-接GND,扬声器的J19打在23处,P1口接查询式键盘的JD3口 2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。 3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“Organ.ASM”源程序,进行编译,直到编译无误。 4、全速运行程序,按查询式键盘的1~7键,扬声器发出高低不同的声音。 5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)

流程图及源程序 流程图

源程序: PULSE BIT 10H ;脉冲 TONEHIGH EQU 30H ;高音调 TONELOW EQU 31H ;低音调  TONE EQU 32H ;音调   SPEAKER   BIT  P3.2 LJMP START ORG 000BH TIMER0INT: ;定时中断 PUSH PSW CLR TR0 MOV TH0, TONEHIGH MOV TL0, TONELOW SETB TR0 MOV C, PULSE MOV SPEAKER,C CPL PULSE POP PSW RETI TONETABLE: DW 64578, 64686, 64778, 64821 DW 64898, 64968, 65029 TESTKEY: MOV P1, #0FFH MOV A, P1 ;读入键状态 RET KEYTABLE: DB 0FEH,0FDH,0FBH,0F7H ;键值表 DB 0EFH,0DFH,0BFH,07FH GETKEY: MOV R6,#10 ACALL DELAY MOV A,P1 CJNE A,#0FFH,K01 ;确有键按下 LJMP MLOOP K01: MOV R3, #8 ;8个键 MOV R2,#0 ;键码 MOV B,A ;暂存键值 MOV DPTR, #K0TAB K02: MOV A,R2 MOVC A,@A+DPTR ;从键值表中取键值 CJNE A,B,K04 ;键值比较 MOV A,R2 ;得键码 RET K04: INC R2 ;不相等,到继续访问键值表 MOV A,#0FFH ;键值不在键值中,即多键同时按下 LJMP MLOOP DELAY: ;延时子程序 MOV R7,#0 DELAYLOOP: DJNZ R7,DELAYLOOP DJNZ R6,DELAY RET START: MOV SP, #70H MOV TMOD,#01 ;TIMER MOV IE, #82H ;EA=1, IT0 = 1 MOV TONE,#0 MLOOP: CALL TESTKEY JZ MLOOP CALL GETKEY MOV B,A JZ MLOOP ;= 0, < 1 ANL A, #8 JNZ MLOOP ;> 7 DEC B MOV A,B RL A ;A = A*2 MOV B,A MOV DPTR,#TONETABLE MOVC A, @A+DPTR MOV TONEHIGH,A MOV TH0,A MOV A,B INC A MOVC A,@A+DPTR MOV TONELOW, A MOV TL0, A SETB TR0 MOV P1,#OFFH WAIT: MOV A,P1 CJNE A,#OFFH,WAIT MOV R6,#10 ACALL DELAY CLR TR0 LJMP MLOOP END /*    利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。用P3.2 口发出音频脉冲,驱动喇叭。   1、单片机最小应用系统的 P1口接查询式键盘,单片机INT0口接扬声器的SP+,SP-接GND,扬声器的J19打在23处,P1口接查询式键盘的JD3口   2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。   3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“Organ.ASM”源程序,进行编译,直到编译无误。   4、全速运行程序,按查询式键盘的1~7键,扬声器发出高低不同的声音。   5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二) */ ;电子琴 -----------连续型 查询式键盘 ;P3.2(INT0) 接扬声器 ;P1 键盘读入口 查询式 Pulse equ 10h ;脉冲 PulseCNT equ 50h ;脉冲计数 ToneHigh equ 40h ;高音调 ToneLow equ 41h ;低音调 Tone equ 42h ;音调 KeyBuf equ 54h Speaker BIT P3.2 ORG 0000H ljmp Start org 000bh LJMP Timer0Int ORG 0030H Timer0Int: ;定时中断 push PSW clr TR0 mov TH0, ToneHigh mov TL0, ToneLow setb TR0 mov C, Pulse MOV Speaker,C CPL Pulse pop PSW reti ToneTable: DW 64578,64686,64778,64821 DW 64898,64968,65029 TestKey: MOV P1, #0FFH MOV A, P1 CPL A ; 读入键状态 ret KeyTable:DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH ; 键码定义 GETKEY: MOV R6,#10 ACALL DELAY MOV A,P1 CJNE A,#0FFH,K01 ;确有键按下 LJMP MLOOP K01: MOV R3,#8 ;8个键 MOV R2,#0 ;键码 MOV B,A ;暂存键值 MOV DPTR,#KeyTable K02: MOV A,R2 MOVC A,@A+DPTR ;从键值表中取键值 CJNE A,B,K04 ;键值比较 MOV A,R2 ;得键码 INC A RET K04: INC R2 ;不相等,到继续访问键值表 DJNZ R3,K02 MOV A,#0FFH ;键值不在键值中,即多键同时按下 LJMP MLOOP Delay: ; 延时子程序 mov r7, #0 DelayLoop: djnz r7, DelayLoop djnz r6, Delay ret ;######################### Start: mov sp, #70h mov TMOD, #01 ; Timer mov IE, #82h ; EA=1, IT0 = 1 mov Tone,#0 MLoop: call TestKey jz MLoop call GetKey mov b, a jz MLoop ; = 0, < 1 anl a, #8 jnz MLoop ; > 8 dec b mov a, b rl a ; a = a*2 mov b, a mov dptr, #ToneTable movc a, @a+dptr mov ToneHigh, a mov TH0, a mov a, b inc a movc a, @a+dptr mov ToneLow, a mov TL0, a SETB TR0 MOV P1,#0FFH WAIT: MOV A,P1 CJNE A,#0FFH, WAIT MOV R6,#10 ACALL DELAY CLR TR0 LJMP MLOOP END 电路图



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3