找回密码
 注册
关于网站域名变更的通知
查看: 402|回复: 1
打印 上一主题 下一主题

简易电子琴单片机源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-9 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
简易电子琴单片机源程序
$ l3 v8 N% d& w8 m8 s! h, c( J8 J  N) l  \) Z1 l9 Z& S: [; h! s2 f9 _$ ~2 p0 U

$ N2 y3 a+ k+ U  P2 i3 a) H. F电子琴按键音乐器:
0 [# b) X& `3 ]9 G, |/*
0 U5 T" r! D$ c; J/ C9 {. Y# j5 `& P跳线设置:默认跳线位
6 l6 j" E6 o; d* g/ {程序效果:用按键T0 S4 S5控制音符的输出4 R  }  {+ e( X) ^7 J# ^
*/
6 u% ^( g2 O2 N( L/ P/ l. ^#include<reg52.h> //头文件; g+ r3 f5 _# \: H8 m& Z6 t& m
#define uchar unsigned char //宏定义
1 q2 M; v- k+ E" m( O& L#define uint  unsigned int& Q3 g2 [0 s( ^* `& P4 r! L6 P
sbit fmq=P2^2; //定义蜂鸣器的引脚% `/ I& ~$ F+ r/ b, C
uchar code freq[36*2]={   //这些音乐频率我也不懂,关键是我不懂音律" ~' @+ {5 O7 o+ X5 Y
0xA9,0xEF,//00220HZ ,1  //0   
7 Q# l2 o- {: d6 r6 Q4 N 0x93,0xF0,//00233HZ ,1#
! R7 ^6 u6 y/ Z% p( S" i: Y8 Q6 r 0x73,0xF1,//00247HZ ,2! B, `6 p3 y, y1 Y
0x49,0xF2,//00262HZ ,2#
2 ~4 S* H, Z# K 0x07,0xF3,//00277HZ ,3
1 N/ ?& X) l0 ?! A/ u7 t" r! L. O6 J 0xC8,0xF3,//00294HZ ,4
% V0 m" t1 Y2 G 0x73,0xF4,//00311HZ ,4#
% C. z8 J) m7 @- Z  C' L 0x1E,0xF5,//00330HZ ,5 * X- T+ N2 h( K2 r' x% l1 z4 m
0xB6,0xF5,//00349HZ ,5#
( W3 [0 z/ f- z7 Y$ N- B) N1 t 0x4C,0xF6,//00370HZ ,6
( [$ Z! x+ V  \ 0xD7,0xF6,//00392HZ ,6#
* u; V$ J' e& ~2 d* Q/ y$ | 0x5A,0xF7,//00415HZ ,7    / |3 o. v: j0 J; F2 ?
0xD8,0xF7,//00440HZ 1     //12
5 w  U" ]3 g( s 0x4D,0xF8,//00466HZ 1#    //13, J* `1 m: ~8 o( O
0xBD,0xF8,//00494HZ 2     //14
& j% j% u% Z, j% [ 0x24,0xF9,//00523HZ 2#    //153 Q6 `8 h4 G/ Z. g; e" L' K5 n: q
0x87,0xF9,//00554HZ 3     //16
5 j' g  `) t) \, z 0xE4,0xF9,//00587HZ 4     //17+ j. C% q+ g& y) b6 l. a" v' P  q
0x3D,0xFA,//00622HZ 4#    //18
# [+ r. Y4 B) O4 S. b+ h' Y 0x90,0xFA,//00659HZ 5     //19
1 S5 N' o/ P& {& Y2 R  o 0xDE,0xFA,//00698HZ 5#    //20& X, ~8 O  k; ]7 X" Q
0x29,0xFB,//00740HZ 6     //215 p' D! h$ \" I9 @7 z" X
0x6F,0xFB,//00784HZ 6#    //22
; S4 \8 [0 _1 T: O' L 0xB1,0xFB,//00831HZ 7     //23
' O0 ?5 z3 k& B7 L3 I9 g# N) _( G 0xEF,0xFB,//00880HZ `1) e+ O+ S9 x/ `
0x2A,0xFC,//00932HZ `1#
8 U! t7 @+ [6 P 0x62,0xFC,//00988HZ `2, ^, H, x/ H, @  O% Q4 p' @9 O/ Q0 F
0x95,0xFC,//01046HZ `2#
0 M! ~% P8 g6 j1 | 0xC7,0xFC,//01109HZ `3
1 f9 z  ^# i' y+ @ 0xF6,0xFC,//01175HZ `4$ b$ I: g2 A. V2 j; F  D
0x22,0xFD,//01244HZ  `4#9 X! c7 r9 C" H
0x4B,0xFD,//01318HZ `53 b6 M9 n# R. {" S' o3 J) }3 l3 x
0x73,0xFD,//01397HZ `5#$ H3 e8 r; H$ s0 m6 n4 r; l
0x98,0xFD,//01480HZ `6
9 [4 C9 _& G* D" u6 S 0xBB,0xFD,//01568HZ `6#" ?5 J/ N: y/ Z+ B3 B7 ^; R
0xDC,0xFD,//01661HZ `7    //35
# q! I2 [9 W1 @- J+ O" G};
5 L9 _( ?, b. duchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置. E7 L, `, V+ X2 @  C1 d6 h$ @
uchar th,tl; //分别装载T0值得高低位
; t& b* [( }- P. {9 O* E9 Svoid main()  u4 L6 d0 V4 {  e+ ]# I& z, H
{
$ `) ~. I7 V4 P  G     uint i;  //延时变量
6 P; a# ]. B& G1 G6 _     EA=1; //打开总中断2 M1 j& t! _1 n7 n
     ET0=1; //打开定时器02 c* Y. x3 R  k, v- \9 \  H+ w+ E) e
     TR0=1; //启动定时器0
0 S- K: |9 e# g0 q! L, i9 H     P3=0xf0;//判断按键是否按下的标志) y9 u" v2 ^! v: @/ v! F
     while(1)' H  c4 B1 H2 O) a' k. S+ k
     {2 `1 B8 m2 E- Y5 s& c
          fmq=1;//关闭蜂鸣器  B: x0 d+ }/ j2 n& e6 O
          if((P3&0xf0)!=0xf0)//判断按键是否俺按下! U0 O( u4 C* U) d! B! Y
          {     //在这我并没有延时消抖,有经验的人 就知道,
* U' F) }( w7 c               if(P3==0x70)   //在要求严不格的情况下是可以不写消抖语句的9 W9 m, ~  p- L) `
               {. Y( `! ]- x. x# Y( ^5 U
                    tl=freq[jie[0]*2]; //装初值
8 P$ F4 N' |+ \5 Z# A. \) @8 K                    th=freq[jie[0]*2+1];5 H" x4 X4 v5 C+ O5 Z0 N
                    TR0=1;    //启动定时器0
2 W8 g5 ]& V! l9 h8 D& }; D                    for(i=1000;i>0;i--); //延时
% j  _, _% s- t* A9 e               }8 ]" ^) t4 p! i3 u5 D( K
               if(P3==0xb0)( ?. K- d; q0 J5 R
               {" i$ t8 L: L0 O6 v  C! k, G/ S5 Q) `
                    tl=freq[jie[1]*2];
, P; v$ G1 ^: z7 ?4 j; C1 {                    th=freq[jie[1]*2+1];
2 r# C, u$ M9 W                    TR0=1;9 w, \7 F+ V* l0 y* a8 |9 g' L/ Z
                    for(i=1000;i>0;i--);
1 d( Y+ w0 e' E$ j               }; o1 F) C+ P) N
               if(P3==0xd0)
6 m' t2 G8 v' e* P4 ~/ E               {0 W7 W/ N( o  W% A# _
                    tl=freq[jie[2]*2];
- U: E( D8 e4 @. l' z, z6 |! Z                    th=freq[jie[2]*2+1];
/ r! M+ f- l# a( ?/ R7 Z                    TR0=1;
! R+ x, P$ A0 D% i9 r                    for(i=1000;i>0;i--);
- D9 f' |9 o$ T& V" u               }' A5 L* I7 G4 G8 v
               if(P3==0xe0)! I& i: ?! ?% b0 }
               {
1 c2 s7 K2 Q% Z/ I2 B/ a* |                    tl=freq[jie[3]*2];
6 D& i$ V8 Q" i* B( j0 w6 \                    th=freq[jie[3]*2+1];# g7 t* v0 c6 g+ v6 B4 N
                    TR0=1;
+ I" V8 |: s+ X% U$ }                    for(i=1000;i>0;i--);   
  a4 F; p- o- L( m" S1 s& D. C% S3 a               }  
  w6 ~# ?; t" C5 r+ _" l4 S          }  " M7 V7 Z8 E. K4 s% U% E
          TR0=0;//关闭定时器0 : u  @. N) M; O
     }
8 n6 R# T6 R; I% o0 o0 R}2 k4 p% @. m/ `* b6 E
void time0() interrupt 1   //用于产生唱歌的频率, q5 r8 I" c, k4 x) t
{8 S$ ~: H/ p) g. J
     TH0=th;   //装初值/ l8 [5 F; ^# R! w6 J. A% J/ |  m
+ x6 o6 A+ P/ I  B& H1 D4 g3 S" M
- Q( ~& j( F5 J' X6 J1 w+ y. w+ q
…………限于本文篇幅 余下代码请从论坛下载附件…………- N: C( F( i/ k1 g; E! @0 x
电子按键音乐器c.rar (9.97 KB, 下载次数: 0)
, Y& i* z; ]0 y3 z- }7 S3 T$ X5 n7 ^
  _% A1 P' {# x* E( T1 l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-2 23:15 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表