|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue* ?1 |" m \4 ?# \& i9 n. @
主程序第一行,不明白为什么会错,咋改,很急,求解
* F2 A% b- C f. k) Y
/ j* F. {& }: ^/ F/ X) B7 K/ N4 c; J #include //调用单片机头文件' q, @! o' u, n7 R* a+ u. n
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255( o/ V$ x# G: P) G4 c* }, ?
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535, n3 |6 t7 \7 I: ^; y: F$ J
4 L9 D+ K) ^% @2 C/ D
6 |( |+ F$ r" C+ E5 U, g***it beep = P1^5; //蜂鸣器定义
$ }' N6 [+ F' W
) {7 U2 R& H- g6 w/ X" ]
1 Q2 c, H% {& \# o1 `( u+ N***it K1=P3^2;//音乐播放按键0 M& Y/ s. T, r6 ~, `2 q% u9 j
uchar flag_en = 0; //开始放歌
9 H3 Q2 v3 p) u4 buchar flag_i = 0;
! U- g4 l- U/ g9 `" l. ^. s8 I1 q0 Y6 |9 r$ B' @- M, O0 d: A, m
7 _9 n W! O/ H
uchar num=0;//初始化num,用于控制数1码管显示的字符 Z: H) Y- d; r6 d, t! s3 l/ J
, t2 m, z; k5 l
1 t, G f# M: h* O% F+ _+ `//数码管段选定义 0 1 2 3 4 5 6 7 8 9 * G1 I) Y1 a) @7 j$ i+ L5 A
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,7 n9 {; }$ |- d" s" s+ R: g7 H
// A B C D E F 不显示
( a- y& O7 a+ ? 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 " M$ ?5 D) ? S
$ v' h+ ~; J! H/ G: c' |
; O6 k7 d2 |' X1 e
: ]. Q. g# n9 f5 X7 fuchar m,n;
9 C; K4 I3 `5 v3 n( Muchar code T[49][2]={{0,0},
4 Y) S+ q( r% P. b2 a H; a4 g{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},! I) |5 H. N0 @( ~8 L* ?( q
{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
# c' X+ m8 _: D% {. h% g{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},4 A; j3 w. C' F9 X$ @
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
0 G' v( z$ L2 A+ C, H" V{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36}," P, |2 }5 Y6 A* g; d7 p" `
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}/ {) e" ~: q, q
};' d& C; z% Z; E# c* i C
uchar code music1[][2]={{0,4}, //两只蝴蝶
* c% `4 Y& E/ m+ O& i{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},
; V$ _) c2 F' p# s{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,24},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{21,24},5 K: z, W. t' [, j0 ^
' G5 |" E/ C: z6 N8 Z1 c" b
' T4 S# z$ l; Q, R{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},
1 ~: R; F P- ^4 Z{23,4},{26,4},{26,16},{26,4},{28,4},{26,4},{23,24},{21,4},{23,4},{21,8},{21,4},{23,4},{21,4},{19,4},{16,4},{16,2},{19,2},{19,24},{0,20},' V3 N, I( q* |# O% m: C, g! h8 P8 X
{26,4},{26,4},{28,4},{31,4},{30,4},{30,4},{28,4},{23,4},{21,4},{21,4},{23,16},{0,4},{23,4},{23,4},{26,4},{28,8},{28,12},{16,4},{23,4},{21,4},
1 U4 X4 f. D- M9 [1 X{21,24},{23,4},{26,4},{26,4},{23,4},{26,8},{0,4},{31,8},{30,4},{28,4},{30,4},{23,8},{0,4},{28,4},{28,4},{30,4},{28,4},{26,4},{23,4},{21,8},{23,4},{21,4},{23,4},{26,16},
- P. t9 z$ y+ w3 E& N{0xFF,0xFF}};
! U* s7 N5 w- k
, S; W/ L f9 r+ M0 @: E/ D" T x( I# h5 m1 l% m' T
0 E1 ]1 l! g: K" I% j7 k2 |. o" j. e' r; ^! O: o
uchar code music2[][2]={{0,4}, //生日快乐" {; Q* M4 ]+ e. n" ^6 _( Q1 x9 n% ]
{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},, F* j8 Y7 _% A2 s
{17,6},{17,2},{19,8},{17,8},{24,8},{22,16},{17,6},{17,2},{29,8},{26,8},{22,8},{21,8},{19,8},{27,6},{27,2},{26,8},{22,8},{24,8},{22,16}, G$ h, C) r- |$ h3 F" v
{0xFF,0xFF}};
1 s5 n5 r2 a" o7 Q$ v% k* _) M% z, U- W% E+ B' q2 t
: p" f, P* [6 u suchar code music3[][2]={{0,4}, //爱情买卖$ E4 b. d6 x/ u
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},3 P" V2 R/ p% n4 O0 u
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},: s3 u2 Z9 e7 }2 d2 _, E
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},5 [& Y$ B! Y( \1 c' C ]
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},8 B, @4 A. }: A2 m- ?1 p1 U& Y+ S) n
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
' \' J, f5 N6 e" s" c1 k! `{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},2 ]+ D/ E- f+ R4 a P) P
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
1 V; T/ `" i5 |& n8 q8 K{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
7 P+ K/ H& k" r* \: P{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},8 z( O" u1 Z3 P
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
% Z. I: @" s! |# `8 z. [' N) \{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},% R) m- |( n+ |1 I0 g
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},: C8 i& F5 \+ k3 F% e1 g6 E
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},! O" I* I; a6 } y9 u: B4 @
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
+ |) X' g H2 O6 n{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},6 b1 ]' h2 J p0 G+ a- C
{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},; D+ ]# x; ~" W7 F8 |; C5 U. B1 E
{0xFF,0xFF}}; C. i; E( N9 M$ _! y6 L, B/ q
void delay(uchar p)
' J& S% I2 {6 t' g{/ T" I$ Y. ~# s0 M k9 U, ~: Q
uchar i,j; ( p/ a, }& _0 B, P
for(;p>0;p--)
! K0 [$ N3 w* B0 ~; @ for(i=181;i>0;i--)0 i6 X% @+ J/ K# o" ~
for(j=181;j>0;j--);! ^, r/ z* n' \7 f" W, g; h3 j
}) Y; I0 q& I2 ? N' Z) z3 Z5 t) O1 Z
3 N$ w5 b N F. p" ~& I
5 f* b5 W6 ]' Kvoid pause()
" \6 S/ {/ j8 K5 L' { C, Q; H{
" O" a- i+ I [ uchar i,j;$ d. O6 c4 x: \+ d
for(i=150;i>0;i--)% f6 ^9 f0 x: p
for(j=150;j>0;j--);* N9 k: }0 j( _1 K& s1 `
}. I! k: l5 \! ?- s# @# \
# g2 i4 U' X8 e5 N2 Y% [/ I: D3 F
+ e1 A5 l: s7 A4 o# A+ [) K8 I5 @
6 G* x+ x1 C) _0 e
/***********************1ms延时函数*****************************/
( q+ e8 a5 ]% g. Nvoid delay_1ms(uint q)
2 E) e- e, }8 M& r) L{
2 v6 [' t( U, Z0 w: U+ v u# R/ s) S3 [ uint i,j;
" i: f! S& ^, |( P for(i=0;i! E, ]% K- P2 L( G9 y
for(j=0;j<120;j++);4 D5 _ {! P+ ~
}0 Y ~5 o! P4 T! z" n# ~& ?0 H
/ n+ e1 u" F/ S* A$ \+ f
4 {3 s; E+ e E. W; b% t6 X
/******************按键程序*************************/
: O4 ?0 K$ z) L9 j6 C$ {uchar key_can; //按键值
' \; O0 ]( e, A2 `9 k
, W* |) c/ o* g/ i4 evoid key() //独立按键程序
( l# @8 }& G: q2 J1 H/ b{* X2 b# Z3 T4 }+ c
static uchar key_new = 0, key_l;0 y5 j" A H2 d& G3 ]
key_can = 20; //按键值还原) C, W. m* h# r* O! Y
P1 = 0x0f;
$ x. i, H4 `; q, \ if((P1 & 0x0f) != 0x0f) //按键按下+ I+ R4 w/ Z) }6 Z8 p
{
1 K" n0 b* x" t7 H delay_1ms(1); //按键消抖动+ Z0 \& S* w" M# M; z4 u
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
' x5 e/ o0 ?, z { //确认是按键按下. h+ t8 S- f' t$ e& a; [/ e
key_new = 0;/ v# ~+ ^8 s. F
key_l = (P1 | 0x0f); //矩阵键盘扫描
$ z! ?2 h5 Y- h: B1 k( @4 W$ i P1 = key_l;6 c1 _. \- O% R9 v: S A1 P. Y
switch(P1)
; q: S9 ~! V3 a {
% h3 O! |# k2 ^& i1 y& [" r case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器
9 D6 E( O. _: o; w$ a case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值
/ A0 t& x* d# e$ C. ?! s; v case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 l0 d0 L% n, ]7 a7 ]/ v) U
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
# V: f: X0 n5 G! O6 {
$ n/ ]' P+ Q8 s' X case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
9 L/ K! p+ ~" D case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值 , g9 B% w5 U0 A6 l X1 y( ^
case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值
5 Z% a2 `, P# P* h& B& n case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值
* L% T7 I% p4 d3 q4 N # |9 I- G" @. Y8 i: W$ R p8 V
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 ) J, u# x0 E% P$ i/ Z' H7 @
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
: W K" W7 @' p+ W C9 q/ D case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值
$ w5 }; p3 a4 i" B; P8 i% s5 q2 j: B8 K case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值 ! `- v% [9 A1 b v9 U; z3 R7 d
0 H# c* L/ ~; Z6 t5 w case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值 8 {8 v0 X3 k8 }/ h" `& k- C
case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值 " Z2 W# S" r, _3 ^4 N! g
case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值
6 u, x! a5 |: o case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
. D# z8 U* w/ [! i' B g } % }, g! t6 c. E5 U+ I5 G
P0 = smg_du[key_can]; //显示6 v) k& H. U, `; D$ }8 i: y
while(P1 != 0x0f)
. a% W, c+ A) G: n5 f0 g. H3 Y P1 = 0x0f;
/ \ E; x+ A" R2 C- M$ _ C TR0 = 0; //关闭定时器
) l: W7 t& J4 {' |2 @ } / y. N# R/ D" K# P! d& V, P- w
}6 q3 O) b2 e$ X o) P
else //按键松开9 s5 M5 f& D0 t/ R Q4 l* w4 Z Y
{
0 ^9 W( t d0 `* @ P0 = 0xdf; //显示小数点
. o7 G4 b0 s' s$ \- E0 V3 m key_new = 1; % T* `7 w2 R/ `3 c
}
$ N& S# B! z, O+ |7 M5 |5 l- W2 s0 s5 @$ d, Y
t3 ~# d& ]! `3 j/*********************歌曲播放*********************/
, K2 g+ J! Z+ @( y% Q9 N& X; c K1=1 ;. ~5 b" X9 y" n/ i+ ^
if(K1==0)
* l4 V; g9 |% c( q3 \% P {" g, U' _% _( |" O( \
delay_1ms(10); //按键去抖动
" G/ l' D! p; k2 K if(K1==0)
6 \) l8 F4 y% N M5 f, e- c$ r {5 ]: e4 [2 q6 B
num=8;
, n- t- |. [+ U! f) Q// P1=smg_du[num];//使数码管显示该音调的字符
# h$ p6 R/ |+ G+ Y# q) h, @& F$ c flag_en ++;5 z6 y$ I$ j& e& L, U \
flag_i = 0;
3 p1 C2 l# x" J: l; Y! s) l/ ]" A- f8 O if(flag_en > 3)" D8 {8 @; J" p. n! [
{
6 Q4 A' q8 u! _0 F( ` flag_en = 0;
9 v" j3 W/ j" f, R3 j TR0 = 0;8 b4 n: ~* q; Q! a
}
# s, d6 R% U* Y( d3 j# A5 X while(!K1)
0 H F( h% Z' |5 n {: v* a. l/ d0 n
}//使蜂鸣器发出相应频率的声音;: D* h, ]( C: ]6 y" S& j
}
* ^: r; c. x3 x l* Y: C1 p }8 p, G5 B. A' G( v' d0 y
}
K" h: w( f; ~ B; D- Q# i. e+ ^0 ^8 G4 \1 _6 e
1 {% U9 T$ L6 ]$ r% Y
1 x* P8 M1 \" ~/ s( c5 m# N
* p) R4 o& [4 y/******************主程序**********************/
7 k4 [% q- g( Y# q$ ~& C# v6 xvoid main()
% J8 r" s, z7 H7 c{ 5*++++++++++++++++
- A) @/ J/ n( V* y; I# J P0=P3=P2=P1=0xff;) [# E* F! K- N
5 u1 P/ c- o2 w- J; G) H
TMOD=0x01; EA=1; ET0=1; //定时器0初始化% ?% V( h+ H' q9 E
while(1)0 l2 v! v! W4 b8 f) n
{! l! _- z0 q5 Y
P0 = 0xdf; //显示小数点2 J, z3 ?9 l9 q4 D) m/ r5 r
key(); //按键程序
5 s2 u; k3 C* u+ D' G if(flag_en == 1) //爱情买卖8 C! @- m5 S1 F8 T3 x1 c( a# b
{
/ q, S( {4 S, F, w9 a! h9 h7 U# i m=music1[flag_i][0];n=music1[flag_i][1]; //放歌 + c- F0 _4 a% H1 r
P0 = smg_du[m % 16]; //显示
& ?6 E" c# I2 {" ?' h0 i' p if(m==0x00)! N0 A- j3 A3 i& C. s, T% h
{% R* ^" O" R/ F2 h: L
TR0=0;
0 ?& g$ p# s; j: @/ r6 c1 [ beep = 1;
. Q% c+ ]) D/ ~2 | delay(n);
0 Q! L. ?% |# D3 e* x flag_i++;
! h# `( k8 {( z; R- J0 ~ }
; w* ^$ n4 S4 w2 U9 n1 v( J" J else if(m==0xFF) //放歌结束
3 l2 d6 n9 X, L4 Z: e, L {+ T3 k( z0 j$ z C# j' B# O
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
' C. \2 q3 S8 y( f# k8 E4 H else if(m==music1[flag_i+1][0]) + |0 B9 ?9 T. x2 N
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }' K A7 s" M+ j. _9 _
else
" ~9 h1 u8 X* Z& Z7 Y {TR0=1;delay(n);flag_i++;}' e" u- u9 e! k% r# }
}
$ V2 ^2 b- M+ L! s: W else $ A2 ]# V6 f- o% o* @% z6 c
beep = 1 ;
6 R0 Z$ O& N* [. d/ i7 J& k
8 E5 N2 x* v: I1 \
8 D. P7 e- Z1 F if(flag_en == 2) //生日歌
5 j4 R ]6 L6 ^ p0 b3 D {: Z5 f* N2 }+ q* c: ?
m=music2[flag_i][0];n=music2[flag_i][1]; //放歌
) }' O4 Y2 Z5 J) H9 g" }9 I P0 = smg_du[m % 16]; //显示' B: V5 X# T# Y$ M }
if(m==0x00)" r. ?+ t2 H/ ?- S/ a1 G( ]- y
{
1 p; ], U8 V. q, m$ I) q+ [* P TR0=0;: l0 y8 h) j3 W0 Q. K! a+ S
beep = 1;
) Z# y1 G8 p0 w9 k& r! l* j/ b delay(n);
/ x$ ~1 Y! G" ~ flag_i++;7 I4 O+ {+ @0 C1 S& T1 w1 S! [* d( x; i
} + A6 _/ ]) d2 \& C
else if(m==0xFF) //放歌结束) \% Y2 `! z' h$ O9 w, z
{: M! w: ]& ?' R; t( o
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} ( k9 P3 b( z0 \' X8 \) s4 z; H
else if(m==music2[flag_i+1][0]) 7 U- m) q( v; p% d$ v: [& } ~
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
: J$ ]+ ]0 V6 W$ G# ~+ H else
' a, T# B, b2 A- J5 X% q {TR0=1;delay(n);flag_i++;}; P$ S6 j. z' h8 i( S$ K/ ~
}
: w5 ~) a" {8 y* b j else * V @" l1 I% `- K( ?, S
beep = 1 ;8 }' `/ _9 r) j6 Q1 r+ k. ]
0 W2 e* V y, o& n7 h9 ]
5 C* a& r Y6 N* i2 `% } if(flag_en == 3) //新年好
4 ^ Q9 E' M, ~" Q2 H: N {2 a7 o; k0 h S9 h/ T- _
m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 / Q: h/ M$ P- C7 n) H. U
P0 = smg_du[m % 16]; //显示. t9 x, g# ~$ {, D
if(m==0x00)
; Z/ i) l: b) s! m% Z" `7 R: d- P; a {+ X$ R& J. D9 h: A P. x
TR0=0;
0 J& |8 ^& W2 G0 ? beep = 1;
# p* Y& A1 Y6 C; b5 V delay(n);; l4 \# t. w% @1 }
flag_i++;
8 W) Z) q; p4 } M1 k, Q } $ J: T8 ]6 S1 d9 o2 l2 w+ I& i
else if(m==0xFF) //放歌结束% T0 E$ ^# C7 e8 C
{
$ @# n" @$ o- X8 A! w5 T TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} G/ v- W4 _9 f! ?% X
else if(m==music3[flag_i+1][0])
# N" n" \ B( s0 ] {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }1 Y! [2 M+ N& G, v% a
else
- f) m# _- x+ g8 @( ~/ U( w {TR0=1;delay(n);flag_i++;}1 ]* E; D7 R$ Q! I' J2 h
}
& H5 f Z$ L! ~ \! a h else
" N/ A% D4 j& e9 n/ C beep = 1 ;% O) K) I9 D1 H, m
}
. \2 x! n6 ]! \% Z}
& b! ^9 @9 H; d& d4 ^) B' Z! F c, T- |. m$ a! p* ~0 a
) u. @1 w; q# w% o$ v1 `* {+ ]; L; }
/*****************定时器0中断*********************/ * v9 K. C, [8 m3 r a
void T0_int() interrupt 13 P T- _2 M t/ }& o" W8 r* I2 V# k
{( j! v/ w1 }$ ^- M( H0 @- `8 W
beep=!beep;
) p( [' Z# L0 s( M TH0=T[m][0];
. W/ u" s6 w! p$ |( i' t4 T TL0=T[m][1];$ L# @* h6 I& ^5 ?. E& y7 D1 L
}0 u7 f0 R5 T1 V& L1 O. A) ]
|
|