基于51单片机的电子琴_基于51单片机的电子琴设计论文
51单片机设计的电子琴怎么发出音。。请给出具体电路图啊。。。救命。。
由4X4组成16个按钮矩阵,设计成16个音。
基于51单片机的电子琴_基于51单片机的电子琴设计论文
基于51单片机的电子琴_基于51单片机的电子琴设计论文
基于51单片机的电子琴_基于51单片机的电子琴设计论文
可随意弹奏想要表达的音和音乐。
51单片机如果想发出不同的音阶,需要使用无源蜂鸣器。
可以使用三极管驱动。
电路图及其简单,难点为无源蜂鸣器的驱动部分的程序。
用89C51单片机设计开发简易电子琴,能7个音,并存一首歌就好,要简单点的,做为课程设计用,急需!!!
T0H EQU 30H
T0L EQU 31H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
SETB ET0
SETB EA
LOOP:
MOV DPTR,#FREQ
MOV A,P2 ;控制高中低音区
MOV R1,#0
ANL A,#03H
JB ACC.0,LOOP01
MOV R1,#14
SJMP LOOP0
LOOP01:
JB ACC.1,LOOP0
MOV R1,#28
LOOP0:
JB P0.0,LOOP1 ;控制音频1234567
MOV A,R1
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP1:
JB P0.1,LOOP2
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#2
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP2:
JB P0.2,LOOP3
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#4
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP3:
JB P0.3,LOOP4
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#6
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP4:
JB P0.4,LOOP5
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#8
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP5:
JB P0.5,LOOP6
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#10
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP6:
JB P0.6,LOOP7
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0H,A
INC DPTR
MOV A,R1
ADD A,#12
MOVC A,@A+DPTR
MOV T0L,A
LJMP LOOP
LOOP7:
CLR TR0
LJMP LOOP
;-----------------------------
T0ISR:
CLR TR0
MOV TH0,T0H
MOV TL0,T0L
SETB TR0
CPL P3.0
RETI
;-----------------------------
FREQ:
DB 0F2H,03DH ;低音1
DB 0F3H,0BDH ;低音2
DB 0F5H,014H ;低音3
DB 0F5H,0B1H ;低音4
DB 0F6H,0D0H ;低音5
DB 0F7H,0D1H ;低音6
DB 0F8H,0B5H ;低音7
DB 0F9H,01EH ;中音1
DB 0F9H,0DEH ;中音2
DB 0FAH,08AH ;中音3
DB 0FAH,0D8H ;中音4
DB 0FBH,068H ;中音5
DB 0FBH,0E8H ;中音6
DB 0FCH,05AH ;中音7
DB 0FCH,08FH ;高音1
DB 0FCH,0EFH ;高音2
DB 0FDH,045H ;高音3
DB 0FDH,06CH ;高音4
DB 0FDH,0B4H ;高音5
DB 0FDH,0F4H ;高音6
DB 0FEH,029H ;高音7
;-----------------------------
END
用51单片机 制作简易电子琴 的两个问题
1,单片机的指令系统执行以下指令就可识别按键被按下,原理就是判别连接按键的端口是否发生了电平变化.用 JNB P1.0,TO_OFF 就可判定如果P1.0脚为低电平就转去TO_OFF那执行.
2,循环是单片机执行指令系统中的转移指令来达到循环.可以用JMP无条件的跳转来循环,和如上题那样有条件判断后的循环.当然也可以利用定时器产生的定时中断来不断的执行中断程序来达到循环.
对于C语言的,单片机内部使用while(1)这个语句实现不断地循环,如果是用汇编来写的话,我记得有伪指令可以实现跳转功能,这跳转功能就能实现不断地循环,汇编还有什么条件转移啊,无条件转移啊,都可实现循环
识别按键按下,对于C语言,可以使用循环语句加上键盘扫描程序来实现,就是不断地扫描端口当前的状态,一旦扫描端口信号被改变即立刻延时一段时间,然后执行一个指定的语句,这个语句可以实现你想要的放出声音或是其他的功能。
语句执行完后,即再次开始扫描,不断地循环
单片机的I/0口默值是高电平,当按键按下时,会使该引脚为低电平。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。