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

简易电子琴单片机源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
简易电子琴单片机源程序5 Q4 j; k4 v$ V" x3 R) f* A+ v

3 A1 \7 T! E0 Y
# f1 g  z& N9 S  I% `# D( K- b
电子琴按键音乐器:/ }- U( Z* J( F2 a5 D" ~
/*8 s3 m6 H0 |6 ~
跳线设置:默认跳线位. ~& k& q: \$ w: p& q
程序效果:用按键T0 S4 S5控制音符的输出
4 v/ m+ Y* f5 q3 W8 c*/
0 {& i+ ]" F8 c+ Q3 f+ _#include<reg52.h> //头文件
6 W, r( u# f8 }#define uchar unsigned char //宏定义! F. S* D2 S( C8 a( S
#define uint  unsigned int! G+ ~4 B& s1 l& D6 e9 K
sbit fmq=P2^2; //定义蜂鸣器的引脚
% b9 N7 \2 f+ z3 p3 i3 s& r3 q) yuchar code freq[36*2]={   //这些音乐频率我也不懂,关键是我不懂音律
4 R0 C. Y- f6 B3 m3 \  C 0xA9,0xEF,//00220HZ ,1  //0   + g0 J: u/ ?( Q; J& w# m  o
0x93,0xF0,//00233HZ ,1#
  ]7 K+ R5 @1 h5 M/ V2 N7 p 0x73,0xF1,//00247HZ ,2
5 A% {% m: m6 E% ~1 v7 A, w 0x49,0xF2,//00262HZ ,2#
; s- Y& E* Z. L5 K: w/ A 0x07,0xF3,//00277HZ ,3
) }4 G! N5 Y% S% B, P% f; ` 0xC8,0xF3,//00294HZ ,4" y& P7 t; Q& M/ J7 @4 q; z
0x73,0xF4,//00311HZ ,4#
$ _3 g$ g6 g0 j; |- A 0x1E,0xF5,//00330HZ ,5
) \+ }4 K/ }* Y: X0 w8 Q' e, K 0xB6,0xF5,//00349HZ ,5#" t( r" r& [2 O& r9 a  I2 w" ^
0x4C,0xF6,//00370HZ ,6
9 F: {! o: D/ p# V 0xD7,0xF6,//00392HZ ,6#  _# I- @+ J7 I. Y0 u- u
0x5A,0xF7,//00415HZ ,7   
* e( P' J& ]/ y% l) ^# C 0xD8,0xF7,//00440HZ 1     //12
; S, a4 ^/ l0 B) T 0x4D,0xF8,//00466HZ 1#    //13
" p2 [2 ?% A4 }3 a' z3 j 0xBD,0xF8,//00494HZ 2     //145 k' B' Q' U1 t6 o& W* K. b
0x24,0xF9,//00523HZ 2#    //15
0 y, P; C8 N1 \5 t! X 0x87,0xF9,//00554HZ 3     //16
8 E2 a5 P6 ?7 i5 A4 \8 D 0xE4,0xF9,//00587HZ 4     //17( a, W+ a% I  k6 ^& A; E
0x3D,0xFA,//00622HZ 4#    //18, J" }9 {6 w+ G$ g% g( v
0x90,0xFA,//00659HZ 5     //198 x3 U! A: v4 S% v+ R& D
0xDE,0xFA,//00698HZ 5#    //207 m% X- u' w! B, T% B
0x29,0xFB,//00740HZ 6     //21  K8 O- K/ @- l- }1 ]
0x6F,0xFB,//00784HZ 6#    //227 W- d) w% J. v& P/ O' e4 W& y
0xB1,0xFB,//00831HZ 7     //23
! M% T. O$ V# i0 u9 o2 f7 w; I 0xEF,0xFB,//00880HZ `1/ @- J( \) [+ U5 S  w
0x2A,0xFC,//00932HZ `1#1 E5 v7 o) ?! x% b
0x62,0xFC,//00988HZ `2: A; G0 K7 q8 v0 n  W' ]
0x95,0xFC,//01046HZ `2#
9 |" n7 D, x* R1 t9 k& Q 0xC7,0xFC,//01109HZ `3; T3 r# _9 E/ r
0xF6,0xFC,//01175HZ `4# F% g6 I- t' n8 I" W0 y9 Y
0x22,0xFD,//01244HZ  `4#
9 m# O' `5 l4 x6 d7 o4 r7 u 0x4B,0xFD,//01318HZ `5
' Y/ I9 x( d" {+ I6 E, P5 H 0x73,0xFD,//01397HZ `5#
- w6 C8 ~2 h- I' t' l 0x98,0xFD,//01480HZ `6
+ i, \* q$ y! I2 u/ x 0xBB,0xFD,//01568HZ `6#
/ Z* G# E4 F. F: f 0xDC,0xFD,//01661HZ `7    //35; p, B! J; S7 t, D/ p! @" ~
};
) P6 U+ `2 Z0 |8 huchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置6 i, I# U" X8 E
uchar th,tl; //分别装载T0值得高低位
  @; H  v' M3 m0 u1 I1 t8 N4 _" xvoid main()9 N6 t' N% I& Q
{
; D5 N) I# H( U: n4 _. {# X     uint i;  //延时变量
" M. M, {  E  c1 S1 H5 Q& g4 ]+ B+ W1 D& W4 u     EA=1; //打开总中断4 n' I2 U! ]' Z- X# e
     ET0=1; //打开定时器0
' {2 ^6 K3 W2 |/ W* }& p- k5 O0 |     TR0=1; //启动定时器0
3 @! {( E3 y: A* B     P3=0xf0;//判断按键是否按下的标志' [) a& m/ O, X! K7 L
     while(1)
, O, x8 ?3 N# l9 }. m: ?     {5 v  [$ T+ U. @$ z7 _$ }
          fmq=1;//关闭蜂鸣器6 [1 m3 P+ p$ g; f* Q4 a  p" @
          if((P3&0xf0)!=0xf0)//判断按键是否俺按下- \! t: n0 p- ^5 k
          {     //在这我并没有延时消抖,有经验的人 就知道,$ b: u. j0 D, f
               if(P3==0x70)   //在要求严不格的情况下是可以不写消抖语句的
* ^  ^! `) ^4 H4 `# J, d               {
5 L- a* ~; y; ^0 m                    tl=freq[jie[0]*2]; //装初值
" _" H+ r3 G! V/ U. [! S                    th=freq[jie[0]*2+1];0 I7 p# N* d$ [6 ~/ G4 L, u# k, Y+ G
                    TR0=1;    //启动定时器0
2 [1 h* b: r* G( i6 c                    for(i=1000;i>0;i--); //延时$ D9 P4 @  Z! k
               }
7 ^% d0 b/ [  y2 p: K               if(P3==0xb0)
; K" @% T+ m! {# J, W+ Z               {
0 B! s; L% H' v- D7 M: l4 {                    tl=freq[jie[1]*2];
5 i1 j9 D9 y+ a) P- Y( p                    th=freq[jie[1]*2+1];/ u9 [  D$ }% Z  u2 _( H
                    TR0=1;
% Q8 w8 _! J1 l4 w. B                    for(i=1000;i>0;i--);, C6 l  C5 |2 |5 ?; C
               }7 L  r' T0 B0 W/ e0 s8 s
               if(P3==0xd0)1 k+ j9 J! t  P' X5 d1 w% K
               {
* \7 ^! y. |5 N2 F. P                    tl=freq[jie[2]*2];
: G6 S$ p5 [* P* v* B/ g7 e1 H                    th=freq[jie[2]*2+1];6 i1 S) O. j9 X- J4 q; [1 o% w  P
                    TR0=1;& f6 _7 X6 K+ Q' r% K0 W
                    for(i=1000;i>0;i--);
( W! O9 c& j& i1 \9 Q               }0 A# k( ^( X$ d
               if(P3==0xe0)
, x8 s2 }& z1 v2 c+ _               {( d* d. d- {: K0 ~- P1 V5 z0 `, F0 [
                    tl=freq[jie[3]*2];3 J! A. V8 T- r$ ?5 H
                    th=freq[jie[3]*2+1];: e% \+ s3 \% Z1 ]- a" Q
                    TR0=1;- \+ e* P& Q3 w( |5 O) T3 o7 i3 u/ L
                    for(i=1000;i>0;i--);   " |, R2 q6 g9 T7 A
               }  
2 _* o' _. L& L) |" @) ~          }  
; z# s1 L7 Q9 w- a2 z5 \8 b; e( E6 B% ^          TR0=0;//关闭定时器0 8 n6 m; M  S, {9 }. Z( j
     }+ v' T: q  E# R3 ^5 h+ n4 @8 f( T
}
; j/ ^3 }$ R: avoid time0() interrupt 1   //用于产生唱歌的频率; y' \9 D6 l; Z6 F- T
{
5 j& g3 P  }  }: S* Y     TH0=th;   //装初值
& A5 O5 }# `3 z- C; G! k$ ?+ X# |$ ]9 H
# W# N8 v& T" G7 i& q' \" v  c
…………限于本文篇幅 余下代码请从论坛下载附件…………
4 n+ H- _+ _) Z8 _9 F$ [) L" i 电子按键音乐器c.rar (9.97 KB, 下载次数: 0)
2 {# o& R. f* X8 I5 _9 W- G2 z6 B' T  I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 17:33 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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