实训二电子琴Word文档下载推荐.docx
《实训二电子琴Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实训二电子琴Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
时钟电路
复位电路
三、硬件系统原理图:
硬件系统原理图如下页图:
1.频率、声音的实现和产生
单片机的频率和声音输出的原理是,利用琴键控制定时器的开中断和闭中断,即实现发音和闭音。
在此期间再通过对定时器的定时时间进行控制来产生不同频率的方波,驱动嗡宁器发出不同音阶的声音。
把C调中相应琴键对应的音符变换为定常数,作为数据表格存放在存储器中。
由程序查表得到定时常数,用以控制定时器产生方波的频率。
当下一个琴键按下时,再查下此琴键所对应音符的定时常数。
依次进行下去,就可以演奏出自己所要的歌曲。
用定时器T0方式0来产生琴键对应音符的频率的方波,由P1.0输出驱动嗡宁器。
单片机所用的晶振的频率为6MHz,琴键所对应音符、频率及定时常数三者之间的对应关系如下所示。
C调音符
7
1
2
3
4
5
6
频率(Hz)
494
524
588
660
698
784
880
988
半周期(ms)
1.01
0.95
0.85
0.76
0.72
0.64
0.57
0.51
定时值
FE07
FE25
FE57
FE84
FE98
FEC0
FEE3
FF01
2.键盘的方案选择
此系统琴键输入是通过独立式键盘来完成的。
由于8051单片机的八位I/O口足以能实现控制C调各音阶的输出,并且独立式键盘的编程容易易懂,结构简单,实现起来方便,而且每个按键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,所以采用独立式键盘。
P0.0~P0.7口分别对应琴键1~7输入,如下图所示。
●关于键盘的抖动问题的分析和解决
当用手按下一个键时,如图3所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;
在释放一个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。
图4键抖动信号波形
延迟10ms的程序为:
MOVR1,#100;
执行次数为1
D1:
MOVR2,#98;
执行次数为100
NOP;
D2:
DJNZR2,D2;
执行次数为100ⅹ98
DJNZR1,D1;
执行次数为48
延迟时间与指令执行时间有密切的关系。
在使用6MHz晶振时,一个机器周期为0.5μs,执行一条MOV指令时间为0.5μs,执行一条DJNZ指令时间为1μs。
则实际延迟时间=1ⅹ0.5+100ⅹ0.5+100ⅹ0.5+100ⅹ98ⅹ1+98ⅹ1=99.985≈10ms。
4.放大电路分析
此部分的放大电路简单容易实现。
可以采用一个小功率PNP型硅管9012,
放大电路输出原理图
利用“分压偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。
分压电阻分别选择1K和5.5K。
蜂鸣器一端接+5V电压,一端接晶体管的发射极。
由P1.0
输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的转换。
5.时钟电路分析
此系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
MCS-51内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容CX1和CX2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为6MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
图6为复位电路的原理图。
复位电路原理图
MSC-51片内振荡电路
图▉时钟电路原理图
6.复位电路的论证和分析:
MS-51的复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,如图7所示。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1KΩ。
四、系统软件设计
1、系统程序流程如图所示:
程序开始
延迟10ms
读P0口的状态
Y
再读P0口的状态
判断是否是抖动
N
启动定时器T0
判断是几号琴键,
并跳转到相应的程序
查表得相应琴键的定时初值
等待中断,并判断此次琴键是否被释放
中断程序流程图
主程序流程图
2、程序清单:
ORG0000H
LJMPMAI
ORG000BH
LJMPTIM
MAI:
CLRTR0;
关闭上一次定时,进入下一次按键判断
MOVTMOD,#01H
MOVIE,#82H
MOVA,P1
MOV30H,A;
保存键盘状态值
LCALLD10MS;
延迟10ms消除抖动
MOVA,P1;
再读键盘状态
CJNEA,30H,MAI;
两次结果不同,是抖动引起,转MAI
JNBP0.0,N1
JNBP0.1,N2
JNBP0.2,N3
JNBP0.3,N4
JNBP0.4,N5
JNBP0.5,N6
N6:
LJMPLA;
JNB的跳转范围限定在256B,所以用LJMP跳转
JNBP0.6,N7
N7:
LJMPXI
JNBP0.7,N8
N8:
LJMPDO
N1:
MOVDPTR,#TAB;
设定音阶1的定时时间
MOVA,#00H
MOVCA,@A+DPTR
MOVR1,A
MOVA,#01H
MOVCA,@A+DPTR
MOVR0,A
MOVTH0,R1
MOVTL0,R0
SETBTR0
RE1:
JBP0.0,MAI;
判断琴键1是否释放
AJMPRE1
N2:
设定音阶2的定时时间
MOVA,#02H
MOVA,#03H
MOVTL0,R0
RE2:
JBP0.1,MAI
AJMPRE2
N3:
设定音阶3的定时时间
MOVA,#04H
MOVA,#05H
RE3:
JBP0.2,MAI
AJMPRE3
N4:
设定音阶4的定时时间
MOVA,#06H
MOVA,#07H
RE4:
JBP0.3,A1
AJMPRE4
A1:
N5:
设定音阶5的定时时间
MOVA,#08H
MOVA,#09H
RE5:
JBP0.4,A2
AJMPRE5
A2:
LA:
设定音阶6的定时时间
MOVA,#0AH
MOVA,#0BH
RE6:
JBP0.5,A3
AJMPRE6
A3:
XI:
设定音阶7的定时时间
MOVA,#0CH
MOVA,#0DH
RE7:
JBP0.6,A4
AJMPRE7
A4:
DO:
MOVA,#0EH
MOVA,#0FH
RE8:
JBP0.7,A5
A5:
TIM:
MOVTH0,R1;
重装定时器初值
CPLP1.0
RETI;
中断返回
D10MS:
MOVR1,#100;
延时10ms子程序
MOVR2,#98
NOP
DJNZR2,D2
DJNZR1,D1
RET
TAB:
DB0FEH,25H
DB0FEH,57H
DB0FEH,84H
DB0FEH,98H
DB0FEH,0C0H
DB0FEH,0E3H
DB0FFH,01H
DB0EFH,07H
END