|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
简易电子琴单片机源程序
% ]1 W+ ?# H* O2 W0 H/ Q1 Z$ [. I. ^
) {2 n" |. k" Q9 f8 p) T$ F/ j+ L
电子琴按键音乐器:
' k! P5 G- W$ t8 |8 W! K6 ^* o/*
8 k( ~" M4 [" N. u4 J跳线设置:默认跳线位
/ p7 c+ t: a, Y9 C# F. h# Q$ f4 Q程序效果:用按键T0 S4 S5控制音符的输出8 O0 ^) ?% L+ x2 \: X
*/
% \: x; l* f# W#include<reg52.h> //头文件
* l- L+ M/ x. S5 n# |; B#define uchar unsigned char //宏定义
3 m( a% \, ~& \) P#define uint unsigned int
$ M' s- Z+ w% g: r# Ysbit fmq=P2^2; //定义蜂鸣器的引脚
, D# l- n/ e& W! b. e, B5 Ouchar code freq[36*2]={ //这些音乐频率我也不懂,关键是我不懂音律9 ?$ n' g+ n$ N: `8 \$ c& c
0xA9,0xEF,//00220HZ ,1 //0 ; N { l+ a) ?8 |. ^ {
0x93,0xF0,//00233HZ ,1#
. _: r$ T+ x: j 0x73,0xF1,//00247HZ ,2 f; W/ `1 P4 p- h( ]
0x49,0xF2,//00262HZ ,2#
; B0 w6 L1 N9 v; i# r) x 0x07,0xF3,//00277HZ ,3
9 S8 X4 L+ O Q/ [( l' R* } 0xC8,0xF3,//00294HZ ,4
. ^% L4 O5 _. ^ C& Z6 x H 0x73,0xF4,//00311HZ ,4#
- N, g. X) r4 {% ^' n {8 J4 l 0x1E,0xF5,//00330HZ ,5
/ L; c8 j& X8 f0 r5 Q 0xB6,0xF5,//00349HZ ,5#4 `0 Q$ F; X, c
0x4C,0xF6,//00370HZ ,6
9 A2 h: o( |! B8 J9 r. o 0xD7,0xF6,//00392HZ ,6#4 {" c& {- q) p' J0 p4 }% `2 k
0x5A,0xF7,//00415HZ ,7 & B" }8 X) N: A* J" _- y. B. @
0xD8,0xF7,//00440HZ 1 //123 B6 ]' e. f$ T4 ~( x
0x4D,0xF8,//00466HZ 1# //13( [& M) | o+ `- ?" ^- f2 H y5 E- w: ?
0xBD,0xF8,//00494HZ 2 //14' F7 o4 R% q" u7 K
0x24,0xF9,//00523HZ 2# //15' U% m* J4 Z+ }
0x87,0xF9,//00554HZ 3 //16( u! F# k/ D# c. C3 t3 f
0xE4,0xF9,//00587HZ 4 //17
0 i2 g. F1 }5 c( }0 |5 X 0x3D,0xFA,//00622HZ 4# //18
8 T6 c& O/ G' U 0x90,0xFA,//00659HZ 5 //19
. f/ C) w" W8 P0 \! ] 0xDE,0xFA,//00698HZ 5# //20
5 r% N7 Z6 R+ y9 m7 {5 P* c9 K 0x29,0xFB,//00740HZ 6 //21, X K6 z8 R" i
0x6F,0xFB,//00784HZ 6# //22
- c( r r- C. u0 {( s 0xB1,0xFB,//00831HZ 7 //23
$ L) w( h, U5 n: r 0xEF,0xFB,//00880HZ `1' ~$ u* k/ }( A( d1 h$ \+ g
0x2A,0xFC,//00932HZ `1#
- ^8 `# B$ o, _1 }8 O2 n 0x62,0xFC,//00988HZ `2
& J+ D* m0 C! c2 C; J 0x95,0xFC,//01046HZ `2#* _% p. k# [+ O. Z: W6 v
0xC7,0xFC,//01109HZ `39 d# j. X1 [4 r! ^" c' R
0xF6,0xFC,//01175HZ `4
7 W* o- D/ Q! d$ i/ y% ~ 0x22,0xFD,//01244HZ `4#
' @3 I [$ O" V; v! o/ a" E 0x4B,0xFD,//01318HZ `5) F% w$ D- g( d9 q$ B
0x73,0xFD,//01397HZ `5#
' s( l$ D& J1 U9 l 0x98,0xFD,//01480HZ `6
5 l7 f0 [. W% l4 g: j% f 0xBB,0xFD,//01568HZ `6#1 K6 z2 u. v9 z5 T
0xDC,0xFD,//01661HZ `7 //35
4 M1 [# D4 m/ H7 S};1 J2 F$ g( E0 }* }# w! m) ]
uchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置
0 }7 K2 X U' w5 O6 ouchar th,tl; //分别装载T0值得高低位7 {: k4 a' R4 n5 W0 y
void main()
' M8 b' k0 c6 g$ h n{7 X0 z3 f6 G; e, ~0 P
uint i; //延时变量6 o# T7 Q' \7 ]6 m- {0 H
EA=1; //打开总中断
3 l" E, E8 V$ F5 D0 i ET0=1; //打开定时器0+ [: C; R! y, a1 k3 M+ u3 O
TR0=1; //启动定时器0
$ Z& m+ p7 M9 e& I% m y: _ P3=0xf0;//判断按键是否按下的标志9 W. s/ ^# j) W' Z8 F
while(1)
& C4 }. P! F0 H% T5 W, l {
" [6 G' V5 `! Z# e8 ^$ ~ fmq=1;//关闭蜂鸣器
/ [3 W8 U+ M! v5 O( o( i if((P3&0xf0)!=0xf0)//判断按键是否俺按下
5 p: H& E, H3 h { //在这我并没有延时消抖,有经验的人 就知道,; I* p4 f% w0 `0 D+ V5 n
if(P3==0x70) //在要求严不格的情况下是可以不写消抖语句的8 j! s7 L o/ R. X" q r; E( m/ t
{
8 v! R: K2 ]0 J8 C! ^ k# f% V tl=freq[jie[0]*2]; //装初值* |5 e: ~2 |% J* [; j5 _
th=freq[jie[0]*2+1];) c7 s" d4 [7 |
TR0=1; //启动定时器01 a; b6 A. Z m) B6 ?: D/ j/ K, Y
for(i=1000;i>0;i--); //延时
. Z% S; `0 h& W5 P0 c }
. o* x9 Y4 B4 @# j if(P3==0xb0)
7 b" J; d6 C; j/ Y# R) ~) [6 R {
; A4 T9 @6 h" ? a: V tl=freq[jie[1]*2];
0 M* {+ A" ]2 e" S$ o th=freq[jie[1]*2+1];
- |. N# L: o+ ?3 N1 {3 Y0 H TR0=1;6 `% q+ t- A/ `, T; ~6 z
for(i=1000;i>0;i--);% L0 G n0 N% ^8 z N& e
}
7 b7 z$ Y. ` X; a: I( } if(P3==0xd0)
; R' t$ u m9 N! l* h: Q {
; R9 I1 U; Y& Q8 b, _% c tl=freq[jie[2]*2];
/ O/ j7 V* {" L( Z- i# P th=freq[jie[2]*2+1];/ {6 D: R, K& g; d0 ]
TR0=1;
' Q6 n& p* \( B9 e for(i=1000;i>0;i--);
, T0 I2 ]! A& ], I9 m }
5 G6 c5 Z: H$ k1 u9 z! J6 c if(P3==0xe0)
! c- M$ H9 @0 W& u; R: o8 i {
( l, \/ W% F% Z tl=freq[jie[3]*2];
2 g3 B' f/ z7 Y% a- I$ i th=freq[jie[3]*2+1];
9 M6 b* D I/ P9 R" o TR0=1;
; C, {4 ]( {. Q3 b for(i=1000;i>0;i--); # N" b. f( [) u/ P( K6 a) A
} d2 i x$ h4 C7 i$ o
} ; F5 W/ k! C L) F+ C# x
TR0=0;//关闭定时器0
6 B3 s$ G% T7 r, k( G* n0 w }! ?" B. |9 c+ v
}0 } t2 ?) L/ k H6 ]+ }1 r& q! y, \
void time0() interrupt 1 //用于产生唱歌的频率4 J4 p; Q; w( _& L( Q, f% H
{5 ^% x* r" z) A+ _" v
TH0=th; //装初值
3 x; z4 m% B5 X. c+ }) R6 w8 `, Y( g
8 u' ]4 s o. t( [6 Z…………限于本文篇幅 余下代码请从论坛下载附件…………
7 B& p( N" p! C. k1 |8 q
电子按键音乐器c.rar
(9.97 KB, 下载次数: 0)
5 |7 u0 r1 G" z3 I7 p) n6 @
% W. y U5 I# A% G! q9 z
|
|