您的位置 首页 ADAS

单片机规划的电子琴

功能说明:此电子琴小巧、声音悦耳、便于携带、成本低、美观大方,能演奏绝大部分音乐。本作品采用的16键设计方法,也可以扩展成21键的。另…

功用阐明:

电子琴细巧、声响动听、便于带着、成本低、美观大方,能演奏绝大部分音乐。本著作选用的16键规划办法,也能够扩展成21键的。别的还能在这个基础上附加一些功用。

1.由4×4组成的16个按钮矩阵,规划成16个音。

2.硬件原理图:

程序附录:

实物图:

原理图:

源代码:

;************* 单片机–电子琴 *******************;
;*MCU: AT89C52 ;
;*MCU-crystal: 12M ;
;*Version: 01 ;
;*Last Updata: 2007-6-9 ;
;*Author: zhaojun ;
;*Description: ;
;P2口是电子琴按键输入 ;
;P1.0为音频输出 ;
;***************WAVE-E6000/T*********************;
;******************************;
; 电子琴 ;
;******************************;
ORG 0000H ;主程序开端地址
JMP START ;跳至主程序
ORG 000BH ;TIMER0中止开端地址
JMP TIM0 ;跳至TIMER0中止开端地址
START: MOV TMOD,#00000001B ;设TIMER0在MODE1
MOV IE,#10000010B ;中止使能
SETB TR0 ;发动TIMER0

L1: CALL KEY ;调用KEY,判别是否有键按下?
CLR EA ;中止屏蔽
JB F0,L1 ;没按则F0=1,有按则F0=0
MOV A,22H ;有按则将取码指针暂存地址载入A
RL A ;乘2
MOV DPTR,#TABLE ;
MOVC A,@A+DPTR ;至TABLE取码,取T的值
MOV TH0,A ;取到的高位字节存入TH0
MOV A,21H ;取到的高位字节存入(21H)
MOV A,22H ;再载入取码指针值
RL A ;乘2
INC A ;加1
MOVC A,@A+DPTR ;至TABLE1取相对的低位字节计数值
MOV TL0,A ;取到的低位字节存入TLO
MOV 20H,A ;取到的低位字节存入(20H)
L2: CALL KEY ;调用KEY判别有按否?
SETB EA ;中止使能
JB F0,L1 ;有按否?
JMP L2 ;有则跳至L2

KEY: SETB F0 ;设F0=1
MOV R3,#0F7H ;扫描初值(P23=0)
MOV R1,00H ;取码指针初值
L3: MOV A,R3 ;载入扫描指针
MOV P2,A ;输出至P2,开端扫描(P23~P20)一行为0
MOV A,P2 ;读入P2
CLR C
CPL C ;令C=1
MOV R5,#04H ;检测P27~P24
L4: RLC A ;左移一位(P27~P24)
JNC KEYIN ;检测行C=0,表明被按
INC R1 ;没按则取码值指针加1
DJNZ R5,L4 ;4列检测结束了?
MOV A,R3 ;载入扫描指针
CLR C
CPL C ;C=1
RRC A ;扫描下一行,即下一行为0
MOV R3,A ;存回R3扫描指针寄存器
JC L3 ;C=0表明扫描结束
RET
KEYIN: MOV 22H,R1 ;取码指针存入22H地址
CLR F0 ;令F0=0
RET

TIM0: PUSH ACC ;将A的值暂存于仓库
PUSH PSW ;将PSW的值暂存于仓库
MOV TL0,20H ;重规划数值
MOV TH0,21H
CPL P1.0 ;将P1.0位反相
POP PSW ;至仓库取回PSW的值
POP ACC ;至仓库取回A的值
RETI ;回来主程序

TABLE: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
END

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/275881.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部