|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue' d9 z: _% v/ q; X/ K& F: C% }
主程序第一行,不明白为什么会错,咋改,很急,求解/ e; E) [2 u* c9 ~6 i4 y8 d
5 Y( d% p/ C7 X8 `
#include //调用单片机头文件7 q( t) ^, [1 ~9 G. p
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
3 T$ z( c7 B! Y/ M& R7 c7 M6 p#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
# J v5 G1 W7 u! [0 x9 f
/ Y* q# o) G3 u8 f/ T" K6 P- m- z$ r7 f
***it beep = P1^5; //蜂鸣器定义
$ [9 j7 _$ x, z* |7 _
% Z1 O0 g2 Z5 s$ J/ `( O' c# W7 W2 ?7 ]0 f0 _
***it K1=P3^2;//音乐播放按键
9 a+ R- z0 R9 @uchar flag_en = 0; //开始放歌
, Y0 K' f' R3 J% \+ ^uchar flag_i = 0;
$ {: J( `: \% T* A, [2 Q5 I
& I# X% }" i4 g& S
9 r" d% L; V. m" @* y# y- Kuchar num=0;//初始化num,用于控制数1码管显示的字符
9 m% I! `; S* H+ J* S: Y2 J
4 k' W5 H- E8 E: U$ s7 g1 f/ F8 n" H8 a5 ~$ i4 |% a
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 / Y4 L7 \, a) i7 ~% j
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,
, K" j( z! R$ ]. J// A B C D E F 不显示7 }, @) g% o3 o* B
0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 8 H0 N" _, P* N0 ]
: k, W7 h9 e+ [) o' a) ?! i- g4 O& P. \" c3 j- S, i n% T
6 N J+ ^/ v$ Y, v- n3 y+ ~0 t, D
uchar m,n; 7 ]7 u7 Z4 H- A; n; s6 J' N
uchar code T[49][2]={{0,0},# g8 p/ V% h$ w- R9 W9 ?5 D
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},
! C6 j0 ?9 D7 c4 C1 Z; g' q{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
' G& X! i: G: Y% j6 }{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
+ I" K* n6 D) \; X. Z: a, o{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
" D/ _! I6 a0 Z( J{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},
- c9 ]) [- r- x6 A5 s: x{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}' U" K+ j9 _9 d) O; k9 v
};) q. y/ b+ b- l. G1 b
uchar code music1[][2]={{0,4}, //两只蝴蝶
( y* k5 U9 H! Y: V' T{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},' ?; ?! w6 ?4 K. `& Q! ~* {8 z/ G9 ~
{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},; p0 R, B, Q: G; ~1 z6 t
% c) z$ T) I2 k( y* O+ p% n
0 Q8 r% ~1 i. T8 q5 G0 U% p{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},
0 d9 c1 B9 M; S* }{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},0 l$ y A& a; n
{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},
; ~: F% D" o: W5 Z/ \+ \$ @" g{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},
1 |# }9 `: p- H. q1 ]: v$ i1 P{0xFF,0xFF}};
# @5 |8 Z- T1 S3 M+ a) B' Z& N3 g, W& f4 `% ~3 R/ _" y
* n) I& D1 L& D8 w+ } N# X. h
1 T. b5 ?6 i# d0 k4 X' A
8 L. @% g7 P* g) Guchar code music2[][2]={{0,4}, //生日快乐6 h; J' F3 [1 x5 x/ i0 O# o
{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
2 [ {3 {6 }- U i{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},
- [8 y5 V; {; P{0xFF,0xFF}};4 l. I+ Z, ~( b: M9 k' M/ K
' y4 D( P9 w6 `3 H
9 S6 F. e6 ]" d0 E! X( Xuchar code music3[][2]={{0,4}, //爱情买卖
+ T1 K4 x$ `2 v( l. [6 X% y& _$ b) u{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
" Z# C7 e) I6 E0 @+ \{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},# P, _& ^# \2 u9 r8 Z5 M& p
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},/ u3 O; l. ]: V. n7 ^
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},2 D& W4 ?" `0 l- d: ?# C0 K
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
3 J% B! M' |7 G& X0 X. L# f{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12}," g0 V' B9 Y/ A* I# H
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},( L3 V7 z8 |' Z) u" {( h4 S
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
' W' I d# X8 t+ v{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},% c! Z" `# J7 @$ N3 R v: \
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},! Y' |. @+ \" t, }
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
C9 P% T: ?) n# |- C% `1 E{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},8 b5 b d4 n$ q: w0 E% `+ _
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
6 E+ ^1 j( ?' p{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},0 c: a& c2 H# N- @
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
I# ]' F3 w6 k% c' b& H6 n{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
$ ]1 P" h2 C) Q" I! u. `& m/ N{0xFF,0xFF}};# e. ]* _! }' v0 y" H: ~; x C
void delay(uchar p)6 p" x+ x: c$ z }2 ~- E
{5 ~; F k4 U3 G
uchar i,j; / {7 M3 q+ U! n+ ]( h1 b& h/ L- a
for(;p>0;p--)3 c/ v; Q! F+ P x T! a
for(i=181;i>0;i--)
9 X. E3 N5 H! c: I for(j=181;j>0;j--);; c8 e- w' h4 l
}
, }: o6 v* m* t. Y) @2 x
6 h: x a! Y* q0 `& u5 B+ g9 k4 a5 O2 k5 }% }
void pause()4 [7 p- W2 m! |; ^' `2 E- K+ H& `# l) l
{
9 U( V+ s1 J! t: T% k uchar i,j;
1 G5 \3 i% _0 r7 I% P' C for(i=150;i>0;i--)
8 n, K* m- |& U for(j=150;j>0;j--);$ J" o6 V5 [) B4 h X/ S/ a
}- ~" F% ?! P: w8 a& [6 m' b
+ B; }- C) @& N1 G) w! e* I! U0 W8 Q& A1 n8 k, Q
) T* k8 `# b" L5 r0 H
$ u, G# }) L; N) o7 |8 S: f6 w. e/***********************1ms延时函数*****************************/
) [& B3 D# F# C9 gvoid delay_1ms(uint q)
[8 a1 P) J D/ F{" Y- k+ Y1 N: X" z
uint i,j;
" u+ f9 n. `8 A, r5 f; v for(i=0;i
0 O2 u8 V0 Z+ } for(j=0;j<120;j++);7 \* H$ H2 @0 X8 y# t# h$ F
}6 i1 h0 V- g/ o3 a4 i/ o
8 U# C5 D o8 l7 l$ j
2 }6 K5 g: b" {3 M/ @/******************按键程序*************************/1 P( Z/ `8 b% z7 a8 v, A; z/ ]
uchar key_can; //按键值
- @ B. N# [- T8 Q5 s4 w9 R
/ V9 Y& h& f# `; P4 Yvoid key() //独立按键程序0 i* s, G+ i9 M1 T+ A
{
+ Q+ T8 _1 @' }/ _ R- n; W9 b static uchar key_new = 0, key_l;1 H4 r+ s9 }7 ]% b- \3 o- g
key_can = 20; //按键值还原
! t* p; f9 g2 c P1 = 0x0f;
" S; Z3 s8 d- n* d if((P1 & 0x0f) != 0x0f) //按键按下% q1 G! f; R( C
{! P( n3 G7 t. E, @1 q! }6 X* ~& T
delay_1ms(1); //按键消抖动0 A2 t, c5 R7 R2 A+ r
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
2 o* j. s9 Z& W5 A$ \ { //确认是按键按下0 I2 z6 J2 {. ~/ t% x# I D# q
key_new = 0;- _* x# C1 o3 A: S" E/ }2 d
key_l = (P1 | 0x0f); //矩阵键盘扫描
% j0 j$ h9 e' b# |3 B* R P1 = key_l;
$ a V0 U5 o9 h0 O7 l& }3 b switch(P1); p, P& b* b6 H1 x) z3 o+ }$ q( H0 F% A
{
0 V, @9 b! J( @ case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器
3 Q3 m. M3 D; J3 U _ case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值 ; y5 P; M# v* W& H8 W0 d
case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 4 _4 o( b3 N1 k
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
. @, s4 G9 ?% \/ T3 H& H
7 w3 y0 I. P" S# k- y' { case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值 2 Q. F4 F- Q6 F2 t5 s" [: M
case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
7 O, R! d* H. O4 j1 s case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值 : b7 L9 S* V6 U" i" E8 p
case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值
( o( X- N/ p0 N- H" T/ w% f $ ~# a0 g" c: G2 r; t8 R. ~ o
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 " K# ~- o* J7 S& m- w3 ~! W
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值 , ]6 o, Z( H# z& h
case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 + p \/ q' j$ o% P3 H
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值 e, Q% x" t7 Z0 k
; N5 @1 u6 f' o
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
+ @# {/ y& j! L0 Y. E1 n case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值
6 S$ B) z7 O5 V8 v$ Y9 @ ` case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值
4 D$ Q) G/ V3 C* E0 ^ case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值 ' K* p9 H# @) @, ~6 Y3 D
} + ^/ s6 G0 x* G/ X Z# h
P0 = smg_du[key_can]; //显示2 l! v' y6 X9 ^, ~. v% P
while(P1 != 0x0f)
l) r; n; i* _) ?0 x4 ^, d P1 = 0x0f;
, v; H; l5 p4 ?& ~, ~ TR0 = 0; //关闭定时器
& `* r8 \& V- J" Q6 T9 c9 ^ } ' x4 e* y- v' b# d
} ~ S; o A$ T
else //按键松开9 m4 d9 F: A6 p z
{
3 ~; l! C4 T$ X' Q. C P0 = 0xdf; //显示小数点
" g/ w" t! o) c5 X key_new = 1; 0 s; f' y1 B# j* g
}
# v; ?' ~" ]/ H2 v# b6 l( s. H) Y
" o- E3 L; \3 o7 n0 r* b
$ i+ Q; c% o" U1 s/*********************歌曲播放*********************/
! Z) p6 y) {8 o* m+ q K1=1 ;
1 A# B* l! Q; D. f9 Q: u% q' q if(K1==0)
, B% A6 ]$ i3 K) w; j% T {( p, Z: y D' ^2 H# B+ V2 L
delay_1ms(10); //按键去抖动% y0 ~4 f" T# E u
if(K1==0)# S. _5 ?, ]9 N6 ?- E( T
{
4 ` h" g3 @9 I( H% T& ~5 b" j num=8;/ n2 M' N6 U' j3 b, P' k
// P1=smg_du[num];//使数码管显示该音调的字符5 S; s; x# `7 t& [
flag_en ++;) D! k/ B2 D# M: \8 q$ ^7 B: L
flag_i = 0;5 z, e1 H6 }% I$ m4 u4 o5 L
if(flag_en > 3)
9 @7 u) W- B' w" _1 z+ @- S2 Q {* P* q6 g: \# \4 ~9 u0 ?7 E
flag_en = 0;
! D) k' H5 g$ _: ]8 R TR0 = 0;
: D/ Y/ q- F# }7 q% O- C }
+ R, Q+ F7 l2 P7 e. ~, ~) m9 g7 e0 ?6 f while(!K1)
4 o! K. u5 V A$ d6 Q' e8 m {
9 O4 Q B7 c3 j0 n( Z }//使蜂鸣器发出相应频率的声音;
: [2 B2 O& e4 j) g1 F }
1 p9 k; {) I3 P# N/ C6 ] }
: U9 R# P& J4 M" ~! I}4 c; \" v& Y$ U" c
4 e- l n: l' G( r. h5 E
# Z, n9 h2 ?7 Y9 h8 }: a
$ _: M( y. U5 W4 ?* P: ~
N& R1 H! V! m) V# j, O1 y9 C/******************主程序**********************/
0 |0 d* g1 J- b s$ B9 @! s" w8 }& Dvoid main()) [' c W$ [) H$ P
{ 5*++++++++++++++++. j7 J3 \2 z3 e9 O4 Y w' g' m- x! r
P0=P3=P2=P1=0xff;' p' b6 U6 s' ?
/ Z. n, J+ b$ g/ e7 K' Q3 Y* U. P1 T TMOD=0x01; EA=1; ET0=1; //定时器0初始化
' Q( q- D$ d8 l# ` while(1)7 n0 k$ L k# b: k6 G! Y) e' h: A2 D
{/ T+ n( a. m( V$ P; f
P0 = 0xdf; //显示小数点
$ z9 I( H7 i! M; M# S key(); //按键程序
' |- [; f2 Z1 ~+ } if(flag_en == 1) //爱情买卖) U+ u: C3 v( M9 v" P! j x
{* q# @& q/ b' V
m=music1[flag_i][0];n=music1[flag_i][1]; //放歌 ; ?: v* d4 \. q% k" Z
P0 = smg_du[m % 16]; //显示
0 d. |1 k/ y" B3 { if(m==0x00)) @8 O6 A/ F6 c: V
{$ D3 ~5 F! n7 \. q# T
TR0=0;6 y- c6 H- W! ~ w
beep = 1;( d4 {- Z2 ?$ _/ @; r {
delay(n);
9 k: H Y, d2 h5 z1 I( r flag_i++;
: i7 ?5 O) ~3 T& N }
8 V! p( T- Q" T. Q, k7 r else if(m==0xFF) //放歌结束
. ?( Y Y9 w3 C {
4 u, A0 b4 E2 E0 s4 u/ M TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} ) D+ u; F% }, u* D+ h* Q
else if(m==music1[flag_i+1][0]) ; | X* ^5 c8 Q( s( o
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; } I: V& c, r, j8 e' m) p Q) f
else
2 N' R! S8 P. G& x) n {TR0=1;delay(n);flag_i++;}
5 O4 N& }6 `3 s6 u- v- N }
( P4 @' w/ j! ]" x: p* j else
3 p0 m, Y# q2 v$ F( |# e! M& Q( s beep = 1 ;3 i* p! u8 f. `' |; k/ b; j6 c4 Y
6 F+ Y1 T, k/ t
& J' ?: K# v9 d4 H! j9 ^ if(flag_en == 2) //生日歌3 n1 N$ R& g( E) K" r3 Q% o
{
5 Q* i- d# X& m) ] m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 B8 e0 Q! d: B ^. D
P0 = smg_du[m % 16]; //显示
4 A8 u2 v2 H. R, B- a4 ^& K1 N if(m==0x00)# y5 }. J+ Y' A, X+ y4 }
{( U7 q- ]" r5 l7 M( ]9 L
TR0=0;
4 K1 R# H/ x% a9 _/ w/ P beep = 1;9 r& }, w5 q2 x1 E8 M) K1 {' X2 d
delay(n);
2 B/ n9 I4 z# s I flag_i++;
4 Y6 i: }& u, I4 X8 d }
7 W$ ] n/ T p6 t, j- F5 Y else if(m==0xFF) //放歌结束 s0 T, c" }: @
{
+ B) M0 s6 o0 k TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
) e) k- R% ~5 Z$ B Y7 S else if(m==music2[flag_i+1][0])
2 `, m: c G2 q/ }6 J8 j {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }2 d- x( ^; A/ k* f
else$ q! H+ H- f/ H3 b' R, H0 {
{TR0=1;delay(n);flag_i++;}
) f; ]+ n& \; M: t }
7 \/ q8 H. Q5 i d- P% { else
) c) r1 Y) T4 |* Y+ r; c beep = 1 ;% q* d, l$ e8 t4 m" i
0 C3 H" m7 V [# }% ]8 X. e0 T
) s2 _0 }5 n- n* V
if(flag_en == 3) //新年好
, B! `# g3 b' ~' {3 A {6 k t- F4 N' I4 a" H- C u4 ^
m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 4 t( m9 M, W8 n; F3 ^0 O
P0 = smg_du[m % 16]; //显示
6 H8 F c" F" P if(m==0x00): Q# ]9 M& {2 P
{
8 P1 r m& v: e) \! e7 K5 E) w TR0=0;
+ O; m0 z, P2 i% h3 ? beep = 1;6 A7 A/ t' D: x5 D
delay(n);
7 d. Y: W7 \3 M9 X flag_i++;8 E3 E g& T; { P5 M
} + g: I' b0 G/ y1 X5 o/ b
else if(m==0xFF) //放歌结束
3 F" o. ~. }6 {5 p; ]2 H6 u {
{& x& k. P9 u& q0 o TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} , N+ M2 A1 j! Y) Q# S2 J4 C
else if(m==music3[flag_i+1][0])
$ U5 x H9 ?- O. M) i8 D {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }) V1 s9 j3 X- N" |! ^4 B
else
2 P @$ m% o- x+ r2 J3 b {TR0=1;delay(n);flag_i++;}
/ @( K' G+ m9 X' {4 I; x }
' [7 n4 @$ E2 `/ L! k' n* d* R else 3 \- U t# H% ^# ]1 I- E; E9 ]
beep = 1 ;0 P& I2 a- P6 o6 {; L- U
}0 j' i% f/ T0 \/ v5 v, W9 I
}$ K+ h. E3 s- r7 a U8 c
! C: O$ u6 z" a3 Y/ U' `$ t& ?
' j4 d9 L6 o- W4 t T7 L/*****************定时器0中断*********************/ 6 M% V& @+ J* o" {8 [* ~3 i! |7 A
void T0_int() interrupt 1
6 `2 P6 w& x7 X6 a{2 i4 V! E- K8 z& u& ^1 s* ?
beep=!beep;2 W* t3 o7 _) ^; j. |
TH0=T[m][0]; 8 u9 d: R& E- ?
TL0=T[m][1];4 {- B$ ?" p. [, n7 H# a( Q; d
}
' z/ A- P9 D7 L& y- k |
|