|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简易电子琴单片机源程序. _% g/ X# J% o; v6 _
$ `5 @3 }9 l5 k5 `. k, o
3 L: v" m! X! v1 A D) z
电子琴按键音乐器:! `" `* M* z0 i' y+ w- ~! S( j
/*
2 [+ R2 w" c- Z3 v! d% _9 F5 d+ X跳线设置:默认跳线位/ f+ G/ M3 N0 B$ ~8 t
程序效果:用按键T0 S4 S5控制音符的输出
6 c* p) j; q1 u7 D6 \*/
0 l! C& N+ `( }2 m: E#include<reg52.h> //头文件( b. X, R o M8 ?! d
#define uchar unsigned char //宏定义1 t% G c/ q b" ~+ B3 n
#define uint unsigned int" G0 p& C2 W H/ P" t; E! v
sbit fmq=P2^2; //定义蜂鸣器的引脚0 p$ n- U6 Q6 Q
uchar code freq[36*2]={ //这些音乐频率我也不懂,关键是我不懂音律
% g3 [) a7 j! Q% I, D5 Y 0xA9,0xEF,//00220HZ ,1 //0
& l7 y( U8 c S 0x93,0xF0,//00233HZ ,1#
% ~) W+ k% ?. L: p" H+ i( S% O0 i 0x73,0xF1,//00247HZ ,22 i6 {5 _: K: n* t( ^- F: S0 W0 M! ]
0x49,0xF2,//00262HZ ,2#
. S2 V2 v, H4 g+ h% A 0x07,0xF3,//00277HZ ,31 R0 n/ K& t2 F
0xC8,0xF3,//00294HZ ,47 a! K' x1 R! b1 v& ^5 E
0x73,0xF4,//00311HZ ,4#: c7 C% c, W) a8 G' c$ t) ^+ |
0x1E,0xF5,//00330HZ ,5 7 P7 Z: t9 m" ~, X
0xB6,0xF5,//00349HZ ,5#$ V1 Q# ?% p3 z3 @) p
0x4C,0xF6,//00370HZ ,6- i; s5 k3 i' h- p4 f
0xD7,0xF6,//00392HZ ,6#- {* ^/ x8 i3 n" V. H# P( M3 C
0x5A,0xF7,//00415HZ ,7
! w6 u/ {2 k8 e0 \1 |4 m 0xD8,0xF7,//00440HZ 1 //12
( R& [+ [8 L/ I5 ]: q6 B 0x4D,0xF8,//00466HZ 1# //13
3 O$ D6 s2 m0 I* j: W( N6 ^7 k/ h4 ]% R 0xBD,0xF8,//00494HZ 2 //14
8 R0 \0 W. n" j1 m& E 0x24,0xF9,//00523HZ 2# //15
/ O3 l/ B9 e6 F' k3 ~' H 0x87,0xF9,//00554HZ 3 //16
" z2 r* r' N( P- T$ b 0xE4,0xF9,//00587HZ 4 //177 L1 z$ g& @8 ?% o2 R1 D- T
0x3D,0xFA,//00622HZ 4# //18
- [0 e3 F/ F' ^5 v; c% u! D# \4 U 0x90,0xFA,//00659HZ 5 //19/ `) k$ O$ m$ U
0xDE,0xFA,//00698HZ 5# //201 ?; n. t; M8 m
0x29,0xFB,//00740HZ 6 //21
n9 E$ [9 H! x4 s4 c 0x6F,0xFB,//00784HZ 6# //22
/ |" g4 g; o( N* e 0xB1,0xFB,//00831HZ 7 //23
/ I9 h+ u1 ~% c) {- [ 0xEF,0xFB,//00880HZ `1& m* [0 Q! I) ]
0x2A,0xFC,//00932HZ `1#
$ X: i; Z2 `, C) B' j% {) l 0x62,0xFC,//00988HZ `2
# p$ s( c5 a# Z* S 0x95,0xFC,//01046HZ `2## Q5 S, i7 w! s5 H L& k* f
0xC7,0xFC,//01109HZ `3, d/ `" i% \( f/ a2 E; p$ {) ]1 I
0xF6,0xFC,//01175HZ `49 ^/ z- V _ T- H$ M2 c
0x22,0xFD,//01244HZ `4#
% m, E. q1 y* `& W- _7 } 0x4B,0xFD,//01318HZ `5; i+ N! q1 C2 _
0x73,0xFD,//01397HZ `5#9 \6 l" u c) I5 v' R3 y1 P) ~
0x98,0xFD,//01480HZ `6
; Q3 m' w4 c- G" y7 G) g 0xBB,0xFD,//01568HZ `6#% l1 a) s4 L. ]7 c
0xDC,0xFD,//01661HZ `7 //35
5 l% _3 U* x, j7 C* d3 N" L2 ?};5 Z5 C- W9 w' n
uchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置: M* @5 @8 P+ D Q
uchar th,tl; //分别装载T0值得高低位8 b) [9 D3 X3 n/ f% N# v- f" \
void main()+ h/ ]9 e6 A' [9 ~/ d# r7 {$ C
{
9 B6 [3 f2 R4 I. g7 [& `4 P uint i; //延时变量
2 d, _9 e0 n! H, e7 O: r8 n EA=1; //打开总中断+ N3 E( ]8 w5 b# J4 W5 \' n3 Z
ET0=1; //打开定时器0, ?5 R: \3 z/ a8 F- E' g
TR0=1; //启动定时器0+ H; u3 ?: p L. d4 i
P3=0xf0;//判断按键是否按下的标志9 d" p" [; [- F$ m- h, H
while(1)
' V# a5 N0 E6 v; ]' K! @ {& m9 O4 b9 k8 o1 |) `& f
fmq=1;//关闭蜂鸣器
; U) n' b( p, I; `! f8 L0 v. ^1 s if((P3&0xf0)!=0xf0)//判断按键是否俺按下
( O8 q" C& T0 Y, X& h7 c { //在这我并没有延时消抖,有经验的人 就知道,$ q8 ]- d# J( R1 j
if(P3==0x70) //在要求严不格的情况下是可以不写消抖语句的# `# f' H* g) \* m2 `. o0 D. y
{
/ Z" X" Z) ]0 _* V& R tl=freq[jie[0]*2]; //装初值
$ _: }7 S3 v' O) v% v+ D th=freq[jie[0]*2+1];
2 c5 C7 i* ]) R9 a$ s TR0=1; //启动定时器0
" C0 j7 k! I# v% x for(i=1000;i>0;i--); //延时
1 T9 ~; M2 c& g; d }6 C2 g& d. E" l, D( I0 O
if(P3==0xb0)! R) E& L' `. G" r( J
{+ f1 @% N& g# s2 W
tl=freq[jie[1]*2];
5 ^9 J- W8 k5 F3 l i' p" \- ^ th=freq[jie[1]*2+1];
& F( O: e. y6 h. R TR0=1;
& R+ n; P8 a& A9 _) \% G for(i=1000;i>0;i--);
5 F5 K2 n. y8 K7 g/ o6 B& F }
( C1 u; j0 F5 p6 r2 a" h( O' j# O. d9 A if(P3==0xd0)
% u7 T8 B2 A3 w/ j7 i6 D' d* U$ { {3 @7 I# _) h" q* ]' `
tl=freq[jie[2]*2];
, O. ^' c5 o2 R' D5 L th=freq[jie[2]*2+1];. Y A0 O. v6 z
TR0=1;
0 F, Q0 K' T; ], Q' f for(i=1000;i>0;i--);
1 O3 ^* a+ L( ^! ]% g }" _$ P7 N3 ` G& F6 t' `3 b% R
if(P3==0xe0)7 Q8 m" n+ c9 O8 v- P
{
$ C1 D" k* { d tl=freq[jie[3]*2];: F2 j+ }' C1 m) D5 R& p
th=freq[jie[3]*2+1];! q0 {/ C- _& k- J1 q# ^2 ]; s' C
TR0=1;
9 a' |+ \. b5 h. p& e5 i' v for(i=1000;i>0;i--);
+ T0 x: t9 i1 @8 q! S- b& X, e } ! l+ s" V( G* `0 y: G4 p$ [8 [" y
}
8 a* N1 j: d, I1 R4 h& Y( T1 [( o! C TR0=0;//关闭定时器0
8 b- {% Y; H0 M5 d' x0 }# d }. A: r& |! ]9 s* D9 o5 {1 v
}
* p) B+ U- t4 P7 v0 r8 G' Y" @: lvoid time0() interrupt 1 //用于产生唱歌的频率
! ]5 R9 s2 x$ P6 |{
& l) h3 {& z: x% \/ d- [: s; f TH0=th; //装初值! r5 [& P* h3 u/ K3 E
$ l0 x ?0 r* Z& y* g4 Z1 ^2 J) p* [) J l) x
…………限于本文篇幅 余下代码请从论坛下载附件…………
/ i D- G) |' `
电子按键音乐器c.rar
(9.97 KB, 下载次数: 0)
' I @0 P- h& T5 R+ X9 }3 A
# Z: V' r$ W( D# l0 y' e( H |
|