|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简易电子琴单片机源程序3 r% Q- S1 b' f* M T
. H# W5 Q" I3 f7 s5 Y; L; k2 Z2 g% R; e3 R3 V$ ~, A! ^
电子琴按键音乐器:
) \2 t4 |) s+ L1 ^8 w2 g6 V/*
; O% S. q8 s: ?跳线设置:默认跳线位
. @5 n7 c7 I/ z/ K% Z0 u程序效果:用按键T0 S4 S5控制音符的输出! _% h9 U0 }& G! h4 l! `+ P# x
*/
3 Q/ e8 u5 m& I2 U: m# G#include<reg52.h> //头文件
: F5 z7 n) i4 H. n/ Q" m6 r#define uchar unsigned char //宏定义* Q0 y9 m$ @; g9 I$ G8 `3 V
#define uint unsigned int2 x$ m: r+ k. ^0 D
sbit fmq=P2^2; //定义蜂鸣器的引脚
, I" o% n+ W6 Q+ V* q( l! Iuchar code freq[36*2]={ //这些音乐频率我也不懂,关键是我不懂音律
6 h1 i* R( T# V1 i. [9 \& q0 Q8 y& v 0xA9,0xEF,//00220HZ ,1 //0 ) B) ~/ }. L) X9 x
0x93,0xF0,//00233HZ ,1#0 g5 V, J, ^% U$ \: j
0x73,0xF1,//00247HZ ,2
8 ]4 W% R+ V% ?; o- { 0x49,0xF2,//00262HZ ,2#
& G4 l8 P- c R% ^9 n5 V1 S 0x07,0xF3,//00277HZ ,3
. n- x/ y# U* a2 H! T" ^ 0xC8,0xF3,//00294HZ ,47 k' }: k. E: N ^3 Y# H& \0 S
0x73,0xF4,//00311HZ ,4#
' i/ L8 ^0 k) H3 G0 [ 0x1E,0xF5,//00330HZ ,5
8 `: g( Y8 y) Y( O; T' b8 C 0xB6,0xF5,//00349HZ ,5#
9 D/ l9 t: ?9 P" S( k2 i& H! z0 q' | 0x4C,0xF6,//00370HZ ,6
/ X- p. `2 N4 I9 C 0xD7,0xF6,//00392HZ ,6#
2 r) R9 S: h3 g z 0x5A,0xF7,//00415HZ ,7 . g6 ]3 v* t3 I2 \& ? F$ F
0xD8,0xF7,//00440HZ 1 //12
% J9 [2 g0 R* w2 D1 F/ a 0x4D,0xF8,//00466HZ 1# //13
' ~9 t( y4 I. Q9 \# _ 0xBD,0xF8,//00494HZ 2 //149 O; d; u5 k" Z7 z
0x24,0xF9,//00523HZ 2# //15
4 V" E, k/ _* V- w5 |1 Z2 i 0x87,0xF9,//00554HZ 3 //16' N% E6 U# s s6 v. R
0xE4,0xF9,//00587HZ 4 //17: Q# J) }) U |, ]
0x3D,0xFA,//00622HZ 4# //18
! ^# b' |, a: N0 y( h; W+ D+ L. Y, s, I 0x90,0xFA,//00659HZ 5 //19/ z6 Z2 W0 H% c( a( v( V
0xDE,0xFA,//00698HZ 5# //20
# x: x! ?- x4 G7 }# `- A$ d# G 0x29,0xFB,//00740HZ 6 //21# M& {- s/ [. r5 [# A4 B6 P& n4 u
0x6F,0xFB,//00784HZ 6# //22
8 l, m+ K6 p* p 0xB1,0xFB,//00831HZ 7 //23
, n, P& b2 H1 z0 {8 D" P7 j9 C 0xEF,0xFB,//00880HZ `1: m1 m3 B) V! R: B9 d' t4 @1 k( a
0x2A,0xFC,//00932HZ `1#
: I# G/ N& ]/ G4 P( i) A 0x62,0xFC,//00988HZ `2- t& \0 ^4 D$ D2 a$ o
0x95,0xFC,//01046HZ `2## L# Y& {" [) Y3 k% g
0xC7,0xFC,//01109HZ `3/ y: }/ R* H" K+ k2 @
0xF6,0xFC,//01175HZ `4/ }1 I7 F2 d/ v6 ^! ]
0x22,0xFD,//01244HZ `4#3 Y! C0 J; n, @, o0 O4 ^
0x4B,0xFD,//01318HZ `5; {- R9 L$ }) v+ c" _+ c7 V
0x73,0xFD,//01397HZ `5#) z/ w$ Q- `+ ~, {0 v# H$ `* R
0x98,0xFD,//01480HZ `6
; K( \) q5 S- ^% Z+ ~8 s+ M ? 0xBB,0xFD,//01568HZ `6#* t2 A" M* Y. @( t; ^
0xDC,0xFD,//01661HZ `7 //35& j+ F% s5 R0 [; L$ }
};" B! @4 @1 k6 i% L# J; U6 ^
uchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置( X& u' S. n4 E3 Q) n7 o) C
uchar th,tl; //分别装载T0值得高低位& b7 K" W: p5 Q# c! L& d1 f2 L
void main()
7 d% {$ |$ E) j+ b1 [* C8 a{
5 F9 | f4 b4 c/ N$ x uint i; //延时变量; [/ K3 t" D$ P2 i4 W
EA=1; //打开总中断8 w3 Z9 X- U* X
ET0=1; //打开定时器0
% F. `+ W/ W7 p TR0=1; //启动定时器0
) [' z! x* n* L" b& ?+ X P3=0xf0;//判断按键是否按下的标志
; a6 u$ ?, [* P3 n0 F' R while(1)8 w: j! V; K, \# }3 E" x6 F; \
{: X `# x% n8 x( H z
fmq=1;//关闭蜂鸣器) f# _9 J% W/ `) j
if((P3&0xf0)!=0xf0)//判断按键是否俺按下
2 {, H, |8 K! K2 Q { //在这我并没有延时消抖,有经验的人 就知道,
7 c: n) C- z# H. f" k if(P3==0x70) //在要求严不格的情况下是可以不写消抖语句的
, b) J0 I% i, c3 F w+ C {
8 t& ?7 U1 f2 h+ T) f tl=freq[jie[0]*2]; //装初值
" `3 w/ }0 ~0 `4 Z4 K2 U% n th=freq[jie[0]*2+1];- c/ j) M" Y* ?% g+ |
TR0=1; //启动定时器0
7 H! g( b- J# N; Q/ _6 w3 T/ h for(i=1000;i>0;i--); //延时) [* G" j' ?/ T* j- p
}8 z. P6 J" ^6 F* h
if(P3==0xb0)! h p3 _5 F8 N! K+ N
{
' m" F. I- P( x# B tl=freq[jie[1]*2];
+ C% e- Q0 f" K0 l- C% j/ d7 m8 O th=freq[jie[1]*2+1];! s, D9 m) u6 n
TR0=1;
0 L' U: t% N- d for(i=1000;i>0;i--);
' J; ]% o$ l: q3 {: G9 R0 w }
9 G/ ?" Y2 b! Q% i if(P3==0xd0)+ |7 J+ W( [8 L- T
{
, l1 E3 n; T; Z2 J2 Y tl=freq[jie[2]*2];
* j2 b! S% F% `6 [) E7 p; P8 t th=freq[jie[2]*2+1];3 D' a0 F0 V/ ]) X4 _1 L
TR0=1;* O( J* {8 T8 H+ t0 z: S1 s9 H
for(i=1000;i>0;i--);
: ~" e2 `; V/ C# \ }
, P- G$ o5 \. R* t+ w, a, J; s if(P3==0xe0); P; g$ n$ d" @- V
{% J2 y7 W! b7 g. o
tl=freq[jie[3]*2];
# ? u+ M4 z. @' h0 q- t th=freq[jie[3]*2+1];. z! E6 W0 T7 H3 s8 M0 D
TR0=1;
6 U* ~% d+ [6 i2 W6 f3 X for(i=1000;i>0;i--);
7 X, ]! p3 x- r% l4 R8 r# z } ( c" H8 @- C' h0 m( ~/ S9 {, Z
}
/ \0 x4 y3 R. z7 s7 s TR0=0;//关闭定时器0
u& W8 L" Z6 x* L1 _4 j' L" q% Z }5 j& p: E( k9 F9 O8 Z
}
9 i* w+ [/ S5 @- i0 @2 v+ }void time0() interrupt 1 //用于产生唱歌的频率
% Q7 R. t; b* T. g& r0 Z{
6 o+ r9 s# E' H5 B! n$ j1 {4 p0 r TH0=th; //装初值) r/ D4 `7 k" | |" S4 j5 ~
( L# C# T5 v5 T$ s. s
& [" J8 X+ u6 W0 h' W…………限于本文篇幅 余下代码请从论坛下载附件…………
* N2 K, h v, ^4 g* X
电子按键音乐器c.rar
(9.97 KB, 下载次数: 0)
6 K% W A2 _9 x( F$ x& K- H6 B' w% ?5 @! [
|
|