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

简易电子琴单片机源程序

[复制链接]

该用户从未签到

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

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  |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-9 00:03 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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