首页 理论教育 电子琴原理和接口技术,实现不同频率方波信号的发出

电子琴原理和接口技术,实现不同频率方波信号的发出

时间:2023-11-16 理论教育 版权反馈
【摘要】:1 硬件设计如图8-8所示为电子琴原理图电路。P1.0~P1.7依次为行列排列。图8-8 电子琴原理图电路要让单片机发出不同的音符,只要让它发出不同频率的方波信号即可。时钟周期是1μs,方式1时956μs定时器的初值为65536-956=64580。

电子琴原理和接口技术,实现不同频率方波信号的发出

1 硬件设计

如图8-8所示为电子琴原理图电路。通过按下方的音调键演奏乐曲,16个按钮可以演奏出基本的16种音调:低音的Mi、Fa、So、La、Si,中音的Do、Re、Mi、Fa、So、La、Si,高音的Do、Re、Mi、Fa;演奏的同时会以数字显示出当前的音调,有利于培养乐感。由单片机的P3.0口输出音频信号驱动扬声器(最好用晶体管构成达林顿结构放大)。P1口连接16个按键作为输入(当然也需要考虑连接8只10kΩ的电阻电源作为上拉电阻)。P1.0~P1.7依次为行列排列。

978-7-111-54295-7-Chapter08-11.jpg

图8-8 电子琴原理图电路

要让单片机发出不同的音符,只要让它发出不同频率的方波信号即可。一般采用单片机的定时器中断方法来产生不同频率的方波信号。例如要发出中音Do,可查阅表8-4所示的音符对应定时器初值表,可知Do的频率是523Hz,当单片机晶振频率为12MHz时,Do对应的是周期为1912μs的方波,因为每个周期包括半个周期高电平和半个周期低电平,这时只要定时器每隔半个周期(956μs)中断一次让对应的I/O接口线置反,就可以在相应的口线上产生523Hz的方波,扬声器上发出的就是中音Do。时钟周期是1μs,方式1时956μs定时器的初值为65536-956=64580。

表8-4 音符对应定时器初值表

978-7-111-54295-7-Chapter08-12.jpg

(续)

978-7-111-54295-7-Chapter08-13.jpg

2 程序设计

KEYL EQU 30H;定义KEYL变量,用于键盘扫描

KEYR EQU 31H;定义KEYR变量,用于键盘扫描

VAL EQU 32H;定义键值变量VAL

ORG 0000H

SJMP START;主程序入口

ORG 0BH

LJMP INT_T0;T0中断入口

START:MOV TMOD,#01H;T0作定时器,方式1

LSCAN: ;键盘按键判断

MOV P1,#0F0H;行全为1

L1: ;判断第1行

JNB P1.0,L2

LCALL DELAY

JNB P1.0,L2

MOV KEYL,#00H

LJMP RSCAN

L2: ;判断第2行

JNB P1.1,L3

LCALL DELAY

JNB P1.1,L3

MOV KEYL,#01H

LJMP RSCAN

L3: ;判断第3行

JNB P1.2,L4

LCALL DELAY

JNB P1.2,L4

MOV KEYL,#02H

LJMP RSCAN

L4: ;判断第4行

JNB P1.3,L1

LCALL DELAY

JNB P1.3,L1

MOV KEYL,#03H

RSCAN:MOV P1,#0FH ;键盘列输出1

C1: ;判断第1列

JNB P1.4,C2

MOV KEYR,#00H

LJMP CALCU

C2: ;判断第2列

JNB P1.5,C3

MOV KEYR,#01H

LJMP CALCU

C3: ;判断第3列

JNB P1.6,C4

MOV KEYR,#02H

LJMP CALCU

C4: ;判断第4列

JNB P1.7,C1

MOV KEYR,#03H

CALCU: ;计算按键号(www.xing528.com)

MOV A,KEYL

MOV B,#04H

MUL AB

ADD A,KEYR

MOV VAL,A

MOV DPTR,#TABLE2;装表

MOV B,#2

MUL AB

MOV R1,A

MOVC A,@A+DPTR;把表中计数初始值装入累加器A

MOV TH0,A

INC R1

MOV A,R1

MOVC A,@A+DPTR

MOV TL0,A

MOV IE,#82H;使能T0中断

SETB TR0;启动T0

MOV A,VAL

MOV DPTR,#TABLE1

MOVC A,@A+DPTR

MOV P0,A

W0: ;等待按键释放

MOV A,P1

CJNE A,#0FH,W1

MOV P0,#00H

CLR TR0;TR0清0

LJMP LSCAN

W1:MOV A,P1

CJNE A,#0F0H,W2

MOV P0,#00H

CLR TR0

LJMP LSCAN

W2:SJMP W0;T0中断服务程序,输出某一频率的方波

INT_T0:MOV DPTR,#TABLE2

MOV A,VAL

MOV B,#2

MUL AB

MOV R1,A

MOVC A,@A+DPTR

MOV TH0,A

INC R1

MOV A,R1

MOVC A,@A+DPTR

MOV TL0,A

CPL P3.0;清P3.0口

RETI

DELAY:MOV R6,#10

D1:MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

TABLE1:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

TABLE2: ;16个琴键发音频率的计数初始值

DW 64021,64103,64260,64400

DW 64524,64580,64684,64777

DW 64820,64898,64968,65030

DW 65058,65110,65157,65178

END

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈