|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue' W9 b8 R8 U: ~) U1 _! c6 g
主程序第一行,不明白为什么会错,咋改,很急,求解
2 [8 V: K. j' }5 c1 P, ~) \" @3 n( }
- \* g* V: \# W# x+ N* J7 F& n #include //调用单片机头文件1 Q/ N* V1 \. Y, }- `
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
( `; {8 r6 f8 ?#define uint unsigned int //无符号整型 宏定义 变量范围0~65535# c0 {9 ]. j# f+ i% ^2 z# {% y
# d6 M; ^. S( O, p
" w% U' Q" j. K- X" y; A***it beep = P1^5; //蜂鸣器定义% z9 h+ x* X$ u7 h% Z2 E2 y" Q
$ F" J+ n$ J' {. ?' Z
5 ?& H# Q/ k' J8 E. M***it K1=P3^2;//音乐播放按键
; \- m# M4 y5 { n2 V# @uchar flag_en = 0; //开始放歌( M) ~' Q! L/ ~- A
uchar flag_i = 0;
' b. [( P0 |& x; ]
4 J7 E3 R: r( |7 ]8 o8 }3 G1 K
$ m, p6 S ]8 U! Huchar num=0;//初始化num,用于控制数1码管显示的字符
0 b2 ^6 d; j3 @& P5 ~( K! m) [6 f
0 T5 f$ f& E4 t" {; a T$ b% v6 F, S
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 ' i6 h) M, P( `/ K# |8 \0 e
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,& h: Y) V( [! b6 W
// A B C D E F 不显示
5 Q y- @" n3 _( C% o 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 . j8 |# b% l! T: E$ ~. {) |
3 u5 b, A. b6 x# n x
! w. }9 T. z: w5 r+ b( r3 D4 ^+ p Y' c w5 X
uchar m,n; , J& S& i9 A0 S/ z4 }+ O6 u$ \2 U
uchar code T[49][2]={{0,0},( N. w- m; d; l1 c, g. X; w
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},4 m/ F0 m0 n, P
{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
9 H2 p5 Y# w+ s- t{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},% n3 b0 n: ]$ I% u$ H
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
5 X' A( @2 n$ u& t9 i{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},( c8 \+ d. [! N2 A/ o$ y) s
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}! V2 J6 q# Q7 {0 E6 X
};
7 M T7 ^/ a: g$ _5 c$ q$ zuchar code music1[][2]={{0,4}, //两只蝴蝶 ; v- M( S, T% H6 X3 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},
( N, _& L. O7 w X+ E{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},/ K. z! ~0 o" b9 z
0 T8 q1 F: K* Q8 x: D$ [
" b3 R S# a% }* D( [$ g{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},. ~7 z2 W# ]% s g) f2 r$ q9 n
{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},+ i* d0 d. r& E: ~ B) T. E& k1 G: c
{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}," B% [, B) q/ F
{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},9 ~4 p% u+ d( E+ M
{0xFF,0xFF}};
8 }% @1 _+ u0 [+ m( [/ J: R- p- o% w1 a) L+ k
6 M4 a: s4 u3 X1 x
q; ]; h) s$ _, c* U/ f
; \! k% t$ |) m2 q9 p
uchar code music2[][2]={{0,4}, //生日快乐
1 E& a2 `+ Q: E) Q{17,6},{17,2},{19,8},{17,8},{22,8},{21,16}, X2 c1 y4 Y! A- X
{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},- R' b: l1 N# S8 K, ]" q6 M
{0xFF,0xFF}};
. f6 ?" c! Y8 \) \) ?
! D8 t" r! K F& [
; T# c# O, @ t- b$ Z. Muchar code music3[][2]={{0,4}, //爱情买卖
. J1 Q# X& }8 B, E9 B: |{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
2 }$ t/ d, [3 R7 W% Z5 [{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
- U- A# ]) s1 ~{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
% g+ [6 L9 I1 T/ k{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
; q2 J1 I# h X! Q, V{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
; a9 h" E# T/ m+ E6 ~; U' l{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},0 M6 A9 u) r- ~$ y! i& m
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
% w' g) j- o/ _( _0 w( d/ B: {{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
6 `! B# n% S! E b5 u{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},6 Q$ O: E9 A4 F! X1 e/ M% `
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
: m8 w- W: W4 K- ^ z{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
& V/ }+ {$ f7 J4 M{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},4 b9 B: S# J: d$ T$ S
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},, c# \5 y% @, z3 R4 n1 |$ i0 c$ V
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},8 [: v8 Z3 l1 \; o: U) H/ e% W9 m
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
, y! E# d/ y5 u( U# g* h{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},2 [, j+ [) W" L" J1 p
{0xFF,0xFF}};' a0 i' R' r4 p% O/ b* w
void delay(uchar p)
0 q" O. H O+ v5 s0 F{2 G+ R' n4 A1 X* X: u' i8 f* E# p
uchar i,j;
- @ D# Z0 g( v, r8 \6 s' S$ { for(;p>0;p--)
( @* Q* b \; s! F! y for(i=181;i>0;i--)
! ^6 @. H( I% H" p for(j=181;j>0;j--);/ j* M3 i' h7 m
}, C0 _/ t/ N0 Z9 g0 q4 }+ ~: A( B
: N; v% L9 `1 X* \3 b! w
8 E+ w5 h& L. H3 @1 B% F4 yvoid pause()
" ^0 _6 S9 d% I- p; Y{; [4 i) O) H/ y2 B
uchar i,j;8 e) G2 G+ t+ o
for(i=150;i>0;i--)/ g& M6 {; u, c0 K% s8 _- \
for(j=150;j>0;j--);
: z4 U7 S5 A, @, D. U, p- ~7 X}# t" n0 M/ ]- b `
- X% q6 n- Z* d' h i1 x
l4 b e. b y" w/ T9 q4 ?, s: n8 E' l; P
$ I; j5 b0 V4 Y. w) U: [" K0 Z
/***********************1ms延时函数*****************************/
5 a/ ? N- n) d1 W& Rvoid delay_1ms(uint q)4 b: x' h! e5 {$ ?1 E
{
: K* H1 K# x. `8 c uint i,j;
' R9 D1 C& S6 Y6 t' U for(i=0;i
, n8 @+ P( p6 N8 a7 j for(j=0;j<120;j++);; z7 L% t) n0 l1 W2 n2 c# N
}+ b3 h6 w% ]$ ]$ F7 ^
! u$ c& I+ R* l; a0 Y
1 u- o% P2 m5 B, `6 P. Q/******************按键程序*************************/
5 `1 f7 z0 V) U1 E2 r1 Auchar key_can; //按键值
1 N0 A8 g7 I: @/ z
) Z# }+ _* B2 U) V+ Ovoid key() //独立按键程序3 F4 ^ j9 i" o1 z* W
{
! }$ v4 q# d3 @% p, Z9 u static uchar key_new = 0, key_l;
& \& j+ J% p7 p8 m, t, ^* D key_can = 20; //按键值还原 T4 }' C! D8 E: I
P1 = 0x0f;
@8 @- w/ M, d2 j3 n2 M if((P1 & 0x0f) != 0x0f) //按键按下( s% b0 n' _& b
{5 q8 ~9 P* ~( \
delay_1ms(1); //按键消抖动' y: o. }+ u: Q5 m1 n; I0 K9 G
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))1 g3 `7 j$ [1 T2 H9 a: }
{ //确认是按键按下" z, ?6 H1 L/ l# h( q5 W
key_new = 0;
' u: V0 ^1 @9 n0 t& g D key_l = (P1 | 0x0f); //矩阵键盘扫描4 t( i" K" C! B9 i7 A
P1 = key_l;
' W) `7 O/ h3 B- M. s, [) [ switch(P1)9 u! d; `$ Q) v L: B6 ]* T( Y% P
{ & Q( g1 g8 R6 z+ R
case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 8 W1 \' ^) G" e, |
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值 ; x/ ?) P+ ?! Z8 o% c1 R" w
case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值
) V8 ^4 J: d( c! p4 j4 T case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
2 j! q) U# @! h; ?0 [ & d" R3 R) U$ f$ J" k* G
case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
; Y N( S; x% A case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
' l9 o/ h+ A, Q( _5 Q; b; u$ M case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值 6 F9 q5 v! F1 B1 w9 G3 E$ m
case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 . } R8 G) d; w3 F2 x# W
7 `) u' Z8 Q- J6 _" C8 @
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 ) ~6 |( k! c+ }: ~
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
g$ V) Z$ Y$ J; u case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 / z/ U, H p5 b7 C% `" u, p
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值
! y7 g$ d* @" N& B & L; L7 }! s) g
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
9 M8 M4 i5 G7 b- {+ y case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值
4 n7 y, x( r" @ L; V3 z case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 3 n8 ~5 @. Y, N f, O
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
4 T1 u2 I& K: M3 u0 |% L } ) I+ K6 k, G2 x( L
P0 = smg_du[key_can]; //显示
7 O$ \. _% d3 \8 S& |# p while(P1 != 0x0f)$ j" f' K D1 z' l4 n
P1 = 0x0f;
' b. \4 m1 ?6 S& O TR0 = 0; //关闭定时器9 E2 X/ c0 @! X4 [% f
} " g6 [) y' Z6 [7 s- Q% l( p
}
3 o W+ h5 n4 e! A else //按键松开
$ I: k$ \( C2 ~1 U! z L* S {, J! Y) `( I+ F9 o% b+ O6 \3 j2 I& l. T
P0 = 0xdf; //显示小数点
" u4 R; `3 g1 ]" a/ r key_new = 1; 1 u' P" U1 u& J' g0 q
}
' t) i( K: ` Y; f" z8 ]8 z6 G0 }3 T. c: D! ]9 }
3 H# ~6 X% N3 c( c2 }1 D. V/*********************歌曲播放*********************/, ]0 A$ O$ A5 F# v
K1=1 ;
& t$ C8 I; @8 a. F" r! E: U if(K1==0); d# `2 F/ d+ [" ^1 _
{
* Q! v8 E) H! W$ B" N delay_1ms(10); //按键去抖动5 i6 }: Q) M8 W, C- W1 {! {
if(K1==0). H) S+ f* W2 g
{8 A5 g, ~. f3 H6 l9 N0 R
num=8;
K o; S3 r9 _: i( _1 k// P1=smg_du[num];//使数码管显示该音调的字符4 d8 z: _& f0 w! {
flag_en ++;
: w& y7 S0 b7 N: p4 t flag_i = 0;5 s& f* v3 h2 q/ P% _) O* o8 L
if(flag_en > 3)
/ E& _. @$ N% m& y { H: q) e9 l* n8 Q3 T' f1 ~% A& _
flag_en = 0; # E8 \3 h- a# K! c
TR0 = 0;/ v4 d+ V* j( Z5 b) R5 x
}
8 e: q9 Q+ S5 ]5 G/ B' \% m while(!K1)
. v* n' W! Z$ m! c0 a$ r' I } {: V) H; o9 w3 n- c" @
}//使蜂鸣器发出相应频率的声音;6 r& M$ {0 v: ?/ p6 J, W+ P9 w
}
' K9 Y9 V6 a7 G6 y; X }! ~) m: m6 ]+ V# U# w N
}2 X: v/ O, o5 Q2 k/ E+ u
# k/ y2 i) i/ F/ \8 Z ^6 i! j
, v8 _* Y3 }$ p. V" _# R3 i( U; g* Y9 y, w0 s* @9 x0 d0 x
: t5 S$ l. q3 h/******************主程序**********************/
1 s. X$ @# U N% C! E& n0 `3 j1 Hvoid main(): W( ?8 X# E* |9 R
{ 5*++++++++++++++++! H* f3 y7 w" S m9 M# D
P0=P3=P2=P1=0xff;0 @/ n/ o+ Y& k! z7 d G
* _# E, t4 C: e' t3 B+ H$ n; ~+ L) B TMOD=0x01; EA=1; ET0=1; //定时器0初始化- K: T' m7 b9 a- _( f) w
while(1)
; `/ R$ y- R' f: w1 q4 B) l- F {8 R$ P: n1 E, ~
P0 = 0xdf; //显示小数点! |2 Z% H" i" O; u
key(); //按键程序
' ^* L- J$ L& m if(flag_en == 1) //爱情买卖
U7 o, ] s6 c0 A {
; [8 g* f+ S9 M; B- ? m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
" {+ X$ x+ l. V3 h' N+ c P0 = smg_du[m % 16]; //显示8 d7 [: L9 q) J
if(m==0x00)# f) z) O, E3 g
{+ H" d. O6 T6 S5 L1 J
TR0=0;
3 m7 ?& |. p* M2 K+ K beep = 1;
6 a1 p$ G% W# c- c ~7 I+ x! E delay(n);4 s2 E( u2 k! k: z
flag_i++;1 w" I: d( R4 H5 P. O
}
( @; H4 W( c6 Y. A% q! {5 j else if(m==0xFF) //放歌结束
, x* y! C7 m$ v$ `7 b4 d" D" X {; k* w4 R' l1 y& Y3 ~% D
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
5 n, A( z3 P/ _% i* x0 i, \7 y" y else if(m==music1[flag_i+1][0])
( A- b0 @; J5 t5 y$ D {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }/ u1 j6 ]; S" a! L
else 5 F$ Q9 t4 D. ^6 ^0 M2 [* B, O; S
{TR0=1;delay(n);flag_i++;}
8 i& k/ q. j ~* O }* ^" I N1 a( N1 ], E
else
; I: B C k6 C/ @" S beep = 1 ;) C5 f$ @; C, R) ]+ a
9 W0 K2 L( [" c: t) Z. i0 x* q
) }8 [, [$ {1 v! k
if(flag_en == 2) //生日歌
4 V& t. m* a' }9 z; D7 P @ {
5 ~* N$ {9 w) \( z) V; }1 h/ f; d m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 ( ~ g' _$ H3 z4 F" ^ D8 z
P0 = smg_du[m % 16]; //显示' ]) q# o. h# b8 j
if(m==0x00) n: {1 t, X% ?7 ]- Z. Y
{* u% C9 D/ f9 _+ E% L, f
TR0=0;9 o0 P9 z" H! N) L
beep = 1;
- @1 n9 c' }% m' W8 S delay(n);" S/ R+ F6 N! s! r. C7 }# g3 b
flag_i++;8 _, B" w* g8 f, y; ]
}
: U ^- v" f) A. { else if(m==0xFF) //放歌结束
# D+ z6 {! G3 f {* V# n+ B. a3 V6 N9 d
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} 4 ]3 j; u( U6 x4 E7 d
else if(m==music2[flag_i+1][0]) 9 s1 P h* E! O7 l; c9 n
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
0 U- o, Y# J4 h0 m+ j' N else
# U+ H9 h2 |: j9 a {TR0=1;delay(n);flag_i++;}0 N6 p* ^7 Y5 _. |
}
: _$ V2 ~6 I5 k+ u$ \5 @- _ else $ X- z. }0 L9 t5 Y
beep = 1 ;
$ C; `$ t: [6 F) C# v' b# X. o7 E. A& G
3 K' y) l# _; \) E5 C
if(flag_en == 3) //新年好. ^8 h9 S z& Q2 y! ]! l$ t z1 X( i
{
$ v) L4 C) z9 [ V* `# l m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 ' q) X" T4 v1 H$ U/ q$ {
P0 = smg_du[m % 16]; //显示
% c) y1 G" a& q; J$ Q; \% ^8 d: }7 ` if(m==0x00). s7 H) f# u: O" K
{, ?2 y/ }4 B/ |: ~
TR0=0;
# X: Q8 K. ^" n9 f7 g beep = 1;
# d/ k/ t, I: R3 r delay(n);
2 U7 m: H; \- w- Q flag_i++;
$ @, ~$ m! ~" ~, g/ D }
2 F0 v g& S: q+ @! V4 f else if(m==0xFF) //放歌结束) @! e% r3 b0 y
{ c! `2 O1 o& [0 S
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} 9 j% K, Q' Z) C1 x' m4 V7 {
else if(m==music3[flag_i+1][0]) $ ^: ~/ N! o0 Y, _3 g. k
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }2 N% E$ }& k# g" Q% L
else9 f) o' v9 j3 ]$ g
{TR0=1;delay(n);flag_i++;}- u' e9 w# J+ s( f
}4 M% v, q2 f( T9 }
else
! U5 t" D* ~) Y8 i) T beep = 1 ;5 f/ d N: W# g9 l& n a
}7 u8 h' q" h. c# f9 a& m- f7 J
}# Y: x, h% V- Q% i4 U% ^) B
0 ^2 G) j% j- M
* |5 I; H& x2 J2 W# ~/*****************定时器0中断*********************/ 6 e* S& B" |4 H
void T0_int() interrupt 1
6 L1 f+ y8 Q" |+ X, c ?{
s- K" I2 }- \$ T7 L8 D beep=!beep;
7 ~0 b3 k' f$ ]9 [2 d; e TH0=T[m][0]; / f" r1 ?1 o5 p% i" ?
TL0=T[m][1];) ]3 L) B1 @0 c) o ^! I. g- |
}
4 F4 L( j( T3 q$ g2 Q( ^ |
|