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

简易电子琴单片机源程序

[复制链接]

该用户从未签到

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

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 04:13 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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