|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简易电子琴单片机源程序
2 V( `! m$ v0 T) e0 E' Z! ~5 y& M& |4 W2 W9 p0 j J2 q
0 j5 n$ n" s8 O9 b1 l9 o电子琴按键音乐器:
! N9 m5 v- F1 w& A/*" h+ K# g" y9 h: h7 E8 P
跳线设置:默认跳线位
$ N8 P2 F; M, Y8 w程序效果:用按键T0 S4 S5控制音符的输出
9 D' R+ |; J5 @0 X- C6 h X*/# ]( u$ r5 r( L% U
#include<reg52.h> //头文件 o% B+ ? S) m
#define uchar unsigned char //宏定义+ J& I8 }) y8 l
#define uint unsigned int
: F3 V0 H. B, y" _sbit fmq=P2^2; //定义蜂鸣器的引脚9 @% J- k& y4 ?
uchar code freq[36*2]={ //这些音乐频率我也不懂,关键是我不懂音律
; V5 e( |% w1 o 0xA9,0xEF,//00220HZ ,1 //0 ' d! ~0 f4 F- p, W) M0 |
0x93,0xF0,//00233HZ ,1#- k$ e9 ?) C! {# i' Y3 v1 Q
0x73,0xF1,//00247HZ ,2
% ^ h+ N7 [# |# E4 J- k 0x49,0xF2,//00262HZ ,2#
# U% z7 F% p$ ^. b' q( ] 0x07,0xF3,//00277HZ ,3' ?/ R* T8 E3 _+ ^2 v
0xC8,0xF3,//00294HZ ,4" h( g! o1 a4 S: J2 U* n3 @ E: Q
0x73,0xF4,//00311HZ ,4#
; H6 x1 ]% o: c6 @ 0x1E,0xF5,//00330HZ ,5 : j, B. X( k' z h
0xB6,0xF5,//00349HZ ,5# h" X7 q9 x- a6 z
0x4C,0xF6,//00370HZ ,6
; P; [9 A4 \: ^7 V* f4 g' }2 O 0xD7,0xF6,//00392HZ ,6#
3 y" N3 R: L% J1 Q5 i6 w, { 0x5A,0xF7,//00415HZ ,7
/ q+ H: c# z5 s% ?4 s& E 0xD8,0xF7,//00440HZ 1 //12
1 K* L3 h. h" ^7 _! w) \ 0x4D,0xF8,//00466HZ 1# //13
4 w+ {. i. w9 G2 A 0xBD,0xF8,//00494HZ 2 //14
3 s& B( Z8 p& K9 \ z* @ 0x24,0xF9,//00523HZ 2# //155 m' o$ S9 u Z5 ` i' X
0x87,0xF9,//00554HZ 3 //169 v' |1 A3 g3 p8 |
0xE4,0xF9,//00587HZ 4 //17
3 i; \) M# J. _0 M. K; _: f& ` 0x3D,0xFA,//00622HZ 4# //18
8 q, @. t0 c. z( |2 r; n) U 0x90,0xFA,//00659HZ 5 //19! ]2 ~% m$ i+ J. s2 u
0xDE,0xFA,//00698HZ 5# //20& s/ O# p3 O$ \8 e4 ]1 h$ [
0x29,0xFB,//00740HZ 6 //216 N: Y4 y. m) o' m2 s4 V/ H
0x6F,0xFB,//00784HZ 6# //22$ ` x3 f6 G7 a! L/ n
0xB1,0xFB,//00831HZ 7 //23
( Y( n8 G1 _) F' j) b. v 0xEF,0xFB,//00880HZ `18 w# j3 P6 `: Y
0x2A,0xFC,//00932HZ `1#$ w0 b5 Q' l; ~+ z
0x62,0xFC,//00988HZ `2% E* y/ J: J! e" Y6 R" e2 X
0x95,0xFC,//01046HZ `2#( {6 [7 |( v; L
0xC7,0xFC,//01109HZ `36 a3 d+ q8 t8 f3 o
0xF6,0xFC,//01175HZ `4/ ^, M$ A' B) }+ F" {, k
0x22,0xFD,//01244HZ `4#
/ [& z. h& X# d4 }( [4 d: _8 E6 q 0x4B,0xFD,//01318HZ `5) r7 Q4 Q/ {/ k" ^5 V$ P% p# A' E( g
0x73,0xFD,//01397HZ `5#7 Y5 m0 t, b6 x- A
0x98,0xFD,//01480HZ `6
; r+ Y/ ]% i# M. X0 f' q' P4 Q: p0 O 0xBB,0xFD,//01568HZ `6## e& o, ]" N" z5 ^" }# K7 ^
0xDC,0xFD,//01661HZ `7 //35
' h' b- ]/ L/ K( y( k) ]};; @1 _$ R2 V( V& B H3 e
uchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置3 v' R' ?& _$ |- q
uchar th,tl; //分别装载T0值得高低位
# a" ?4 _1 j$ ?1 Fvoid main()
, }# L+ x( B$ p) S5 C/ \0 w1 v{
2 R$ S8 S. ], ~6 I$ @4 E" X uint i; //延时变量
; [6 o/ u8 t: o9 F8 s EA=1; //打开总中断
; H" k Y5 p, p ET0=1; //打开定时器0
]( N! y: v7 {' e, G- `6 n TR0=1; //启动定时器0, g a/ N# c% e' t! h) t4 `
P3=0xf0;//判断按键是否按下的标志# N( B7 U' k' t3 J- w4 `
while(1)5 X' u6 h6 r: ? p5 ~/ `- ^
{4 q# P; g& f6 ~; J' j# X
fmq=1;//关闭蜂鸣器
2 W' {: [$ B' @ if((P3&0xf0)!=0xf0)//判断按键是否俺按下
- @) ?7 b( A( e! o' @" S0 N8 t { //在这我并没有延时消抖,有经验的人 就知道,
! n. I6 k0 L- C( _ if(P3==0x70) //在要求严不格的情况下是可以不写消抖语句的* ?, `4 X. r. D2 v D; E+ K
{
7 e6 \0 n( ~" p$ q, R& Z$ T tl=freq[jie[0]*2]; //装初值" q5 Y* p+ e0 i, x. P
th=freq[jie[0]*2+1];: q8 g/ }( `+ n2 L. s- u; f# `
TR0=1; //启动定时器0) A4 ]1 z$ J, E+ A
for(i=1000;i>0;i--); //延时
- s! g4 j/ L+ o3 V$ j1 o }4 \1 M) m5 X# B! q6 d6 r- l+ k
if(P3==0xb0)1 i7 |3 O3 ~5 W6 Z! p5 V
{
0 n! J2 W7 K2 A! q. a4 A4 }; T/ Q tl=freq[jie[1]*2];
/ M4 X+ T& y8 S, i/ [8 D& A th=freq[jie[1]*2+1];
4 ~1 V m8 s1 J( z TR0=1;* _! K' w0 J! e' G8 u
for(i=1000;i>0;i--);6 v- A0 O# h. K5 ?
}
4 T$ h8 m! _" F1 z( \2 u% ] if(P3==0xd0)
7 m& e. I7 `- r# {& A( z4 B' ` {9 ~: [* D4 z; X3 |0 Z9 m3 [( c6 |3 Z
tl=freq[jie[2]*2];
* n: N- [3 ~. t0 N th=freq[jie[2]*2+1];
/ i& g" h# ~% ^, ?; y9 e TR0=1;( E. s' b: P: v9 N; c; T
for(i=1000;i>0;i--);0 @- t4 X: S; Z8 a8 q' t
}
# d8 l! I2 q. q if(P3==0xe0)
) T% l0 ?; A" C& n+ P, p {
; [+ d; v$ {) A" d tl=freq[jie[3]*2];
9 ]! ?" q {$ l- b. C; x2 E, N th=freq[jie[3]*2+1];0 t b# }6 I% I% Z0 |+ y9 w1 R
TR0=1;
- b2 k6 y5 D* e; [# s for(i=1000;i>0;i--);
9 L% ~* n0 z0 n7 T, {: { } - O3 Y6 L! i% V
}
, A( x8 C' Y) w- A$ T' p TR0=0;//关闭定时器0
/ g* B9 ]4 G7 b5 v: J( Y }
3 }8 _, S0 O/ Y% L! b8 D6 F, ~9 G}
* p7 z. ]0 t! Q$ x2 P$ Fvoid time0() interrupt 1 //用于产生唱歌的频率
, H5 d0 s# ?1 P" f{7 K* Q* _! \7 m7 B7 T6 v4 K5 u
TH0=th; //装初值
/ v1 @$ ?+ l P8 I: v8 t9 Y
3 [; M( l' a9 Z( N( a& m6 Q, j; N$ F1 w% y+ k, _
…………限于本文篇幅 余下代码请从论坛下载附件…………
/ h# E1 S3 |$ s1 P+ c5 v% i
电子按键音乐器c.rar
(9.97 KB, 下载次数: 0)
; c4 {0 K U- c3 H% z3 O- ]9 b0 T
1 {6 c# ^8 v1 Q+ X% W, q8 s |
|
|