|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue
/ a9 y: ~6 d# i2 `; n, ?主程序第一行,不明白为什么会错,咋改,很急,求解
+ o ?3 I: ^2 u* s
7 p) E* Q! Y3 [ #include //调用单片机头文件
1 Z5 z/ A. n2 j& n/ U4 U#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255' J% Q' V9 S5 G! y, B
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
/ v$ ]" v5 X3 C: }( c
6 S0 y" e+ t/ {5 n& I- g, k- z1 f% r- f! O4 J1 r' z# I
***it beep = P1^5; //蜂鸣器定义+ Q" g; Q6 q& c5 b: X, j1 |: U
% M, N t; X7 r! D( b5 K( K+ i, R% ^: P' ?% l7 O
***it K1=P3^2;//音乐播放按键
. {/ h: `' a8 R, Quchar flag_en = 0; //开始放歌3 W `0 Q1 c6 K& ]- m5 |' k! A+ E* N
uchar flag_i = 0;/ v @6 O8 m! O, _
% x$ K0 {+ Q, h
. T7 l W2 T7 ~" Kuchar num=0;//初始化num,用于控制数1码管显示的字符1 e* \- ^+ L9 s0 U2 Y7 e
9 @. W0 G* f5 x3 ^( l6 v
" _0 `4 b+ d$ C//数码管段选定义 0 1 2 3 4 5 6 7 8 9 & h* N' Z$ T, `
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,
3 }4 R+ E8 ~! Y, ~1 ]0 J) D// A B C D E F 不显示0 ]" ~9 H5 V" }& N8 h
0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码
% U1 Q' x% y& @% h
5 H# L+ |7 ~' ], q j
: O1 `/ A- j" H9 c+ ^$ n6 U* l* D$ f' C5 D" E' r' |6 s5 `( n3 ~
uchar m,n; 7 l" S8 U2 ]8 w) {" p( M# i
uchar code T[49][2]={{0,0},& ^+ }$ c9 t ?5 z
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},
. \/ \: T0 l; K! Z2 U{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB}," Y* E' p# z4 q8 ?/ j
{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},) [9 }; O7 Z! C s6 f0 I2 L5 m
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
l- H0 q7 g( J1 U) K2 a! O( p4 v{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},6 S2 R4 m; W1 F# b
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}3 n4 `5 J* ?! n O2 B2 ?
};
. ^) |1 ~2 H' W' b- y3 Quchar code music1[][2]={{0,4}, //两只蝴蝶
7 H& C% r4 E4 c. b: A$ k{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}," W- T; R5 s# N# S. H* `: p
{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}, J( z/ D6 W: W) f0 P
; F2 ^% M2 Q; V; T" y1 j8 M1 D
8 X+ O5 N# d- B( @+ E, A{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},) P8 @4 r; a. b; ?
{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 F+ h" M: M" z; c; I
{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},8 H9 P; D( `+ c0 @# c
{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},
5 E! z; \0 ~. Z2 O3 `{0xFF,0xFF}};0 ^9 D. Q* F- n8 u
, S; ]; P- w2 a( r# C( G
7 N) ~6 c# _% q3 b. o8 e9 J
$ @8 i+ n8 X( O) S: N0 \; l
5 }: `, q; Z9 ^- ]# {. O$ juchar code music2[][2]={{0,4}, //生日快乐
- |. W6 T; t3 d: j: X; i/ V{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
7 R0 F9 B- b/ 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},
2 m+ ^$ u7 Y% H o$ y% x+ k{0xFF,0xFF}};
8 H! Q/ y `; ^% c" J6 e+ V$ x) W- U$ K* E% u
. [8 k g+ X1 n0 L9 i% S6 ]) A2 D. K
uchar code music3[][2]={{0,4}, //爱情买卖
& c5 b, |) Y( y1 | F{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
, O! L- ~/ _' f/ U9 g9 G# j3 I{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
5 Z* W; f7 K, b! I. d% | b* y{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
' G" k" G/ K$ F- x7 W" q. V; f# @{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},9 g! W/ D2 o! p) u( v" r
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
d/ v2 \3 v, Q% [+ u{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
% n' W, R5 w* z+ r/ z7 r& W, K{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
( p# n0 x+ C1 q( r. M% e: O{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12}, h! c, A$ c9 j, }& X
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},5 E% v {2 |- h. N
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
- L3 S: p3 O9 x) K7 W( J4 }# T{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},; n2 z8 u4 F/ ~- O) M+ N! w
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
+ B# S% n @( O, r{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},3 V" k% G- y- v: D4 i% ?5 d
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
$ h- r" I) b1 |+ A{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},; x- Q/ q% x" I1 k9 @& ~' _4 `
{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
) k7 @' C- s: {) ?! ?: o{0xFF,0xFF}};- u8 }9 `" i+ e. r$ x
void delay(uchar p)" v' N; D! c$ V7 V/ R4 V, }
{: z8 m2 \1 C+ K. L
uchar i,j;
; k) | O. l; _7 O0 V! r$ l for(;p>0;p--)" B9 ?. ]. T7 A7 ?! w N
for(i=181;i>0;i--)
9 g& h" g1 q9 p' Y- L( ? for(j=181;j>0;j--);
% |8 L) D3 C% Q% g) z/ s}
' ~* a$ ~4 }* C. f% _
% \( T) g& [. u+ f7 @; w
) m" I0 x2 n2 N. ~, y( Jvoid pause()
/ j# n6 P8 M& N# P& f! D3 y' G{) y ~ R. `3 K; J/ N- I; M
uchar i,j;5 e7 c2 ]8 ]2 [( @( ?: f
for(i=150;i>0;i--)* I* o* d# ?2 T- r6 M
for(j=150;j>0;j--);
0 ?) D" t, G7 Q9 Q8 d; ]}5 z7 D' Q7 h" d
% N! ?9 \4 A E5 {! N# R
0 t4 f" W2 ~+ D7 _/ K" }
3 j$ i- }( ?. J4 {3 {1 }$ `5 f+ T# Y1 {9 g
/***********************1ms延时函数*****************************/8 @' l) p( c+ t
void delay_1ms(uint q)
) T: }4 k$ E7 J" D5 u{
8 Z4 T( B. n. q uint i,j;$ P4 I: P" N' b
for(i=0;i! D* D2 P3 u7 M/ ^" E
for(j=0;j<120;j++);
# g& t( v m, u6 V$ T* n8 ?}
9 [9 ~" L9 _! f0 N8 T S3 I: Z+ h' K- c2 Z
& V B/ v8 C% l( L" f
/******************按键程序*************************/
4 N. d$ ?8 P3 K9 [2 V Guchar key_can; //按键值! N3 a6 x* J: T+ q' i: h+ i
* W. R5 F8 M V! ivoid key() //独立按键程序% Z+ D6 M( D( d& K. r
{4 g6 Y, I. m3 Z: F3 O
static uchar key_new = 0, key_l;
- p& T$ O: n8 [ a% b1 ~! `' E key_can = 20; //按键值还原/ P" y2 T" M8 D" N7 |& k3 ?5 Z, S, J
P1 = 0x0f;8 p1 b' ?7 e3 q
if((P1 & 0x0f) != 0x0f) //按键按下1 i Q- O8 p7 W2 c8 c
{3 [ j+ Y# m/ Z: }# P7 J. O
delay_1ms(1); //按键消抖动
& Q; C5 C& S$ m6 D if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
2 X. d) g1 o+ k# t+ ?3 O { //确认是按键按下" M" ?; Q9 ]1 Y5 |; g& I
key_new = 0;
& S- c9 h5 o& h1 N2 Q& ] key_l = (P1 | 0x0f); //矩阵键盘扫描0 X- E! D# c! A" H$ o( v, s3 U2 B! B
P1 = key_l;
7 ~7 A- F8 z: t6 E switch(P1). _: v" p$ ?( A9 X) H
{
! }7 L; O/ X" z O/ \1 | K6 W6 l case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器
4 a' ]+ U6 L1 P* T8 n+ S( V, w, ^ case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值
; R0 i7 k& v' |# ] case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 $ {1 p4 h3 t" j1 i7 T
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
+ e7 {9 m% F( K" P0 | # c* Z) b1 W( V
case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
7 Q5 ?) e, k8 \6 b$ S5 U( x case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
# j& @* P* N: i+ Q2 c! m4 y case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值
0 b" G7 e8 e. \0 K+ Y case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 5 F! l' N" q$ R+ ?" o8 l/ h
( e+ t3 j3 w2 z: |
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 % J! d2 j" }$ A' g2 F
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值 ! K4 R% X1 c* D
case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 7 O7 a- f: ?. A, j. F: g
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值 4 o' }4 O" R# `
, c. o9 T$ |! V8 R+ I: C
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
( K* e5 v9 h* h. _- S case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值
5 o Q/ }0 Z7 A4 u+ Z2 Q4 D case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 ; q, K) b* P4 |+ g* C
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
! b, m$ h7 y! O, C1 _ } : |2 ]/ q% H+ I! Z5 c0 @
P0 = smg_du[key_can]; //显示
5 f# u y( m; v2 E: G- U6 v: t) x while(P1 != 0x0f)
* @( i5 D7 _: u0 c4 g, K P1 = 0x0f;$ n- y, m8 E' a2 z/ ~
TR0 = 0; //关闭定时器
% r8 E. l- U# H }
1 L" @3 D8 i) e6 }' J) v }- j: V' e! L. L4 @: W$ f) `
else //按键松开
" G: ^3 [* X( g9 b7 s& N0 g) H2 P7 P" J {5 O% w% L; E# R1 J. [" {0 @
P0 = 0xdf; //显示小数点
1 @) D' L I5 `; B* F key_new = 1; 2 I8 O/ u% k' a) a% F1 f W
}" r" M9 I o& r% U. m- N1 g' M% @0 W+ h
9 n) Y+ @4 z* Z; c$ L: N9 T2 V
; U! p& Y* O% t4 P6 }/*********************歌曲播放*********************/# F# L4 N- V% }7 J6 G
K1=1 ;( G6 C; o% }# j; V$ H" c
if(K1==0)
h6 m" |5 v) z; f! o {
4 ^* ^8 ^ P; \9 R delay_1ms(10); //按键去抖动. B5 d- H8 H) I; r) a
if(K1==0)
% O1 q" ~* @) @0 S' k- x5 V {
; g, {( x; F% H& H8 e z. V num=8;
5 J4 i! `+ Z6 f4 G' F6 P2 P7 L// P1=smg_du[num];//使数码管显示该音调的字符+ t" K X' u0 I) }
flag_en ++;1 \; K0 N9 n$ y3 _7 u( K
flag_i = 0;
; `; k o9 F: v# u" `4 r if(flag_en > 3) s+ ~( c" Q, U* w0 h+ t, H6 c
{+ ?! W; J9 @1 |1 `
flag_en = 0; : l! p; D7 |1 \" Q6 @" b% r
TR0 = 0;
) u/ O& V1 K' I. c }
1 `+ j" c/ z5 P: ]4 p' Z while(!K1)
T6 @3 d8 N3 X {
0 S7 O1 {# o7 Q, f& i }//使蜂鸣器发出相应频率的声音;6 W5 \4 K. i4 q) C9 S
}2 B3 L) I0 D: V: u0 J, X- J* ]0 X
}
% _7 N# C, Y2 c3 d' D2 }}
2 L2 t- C" G" ]. E' D
8 V) I6 N5 O A' S, o+ g- J( N# M {- X! V
7 A4 ^9 ^. g" l! j1 M: q+ d$ P
* t+ p1 n% g f5 J. B" ?* L$ W
/******************主程序**********************/ ( F% c: e5 [9 s+ J% X
void main()
$ Y; w8 X+ I; r, V7 v9 a- |{ 5*++++++++++++++++/ e/ g8 |) K- h2 O3 n* I
P0=P3=P2=P1=0xff;; _" p7 |% S, z. {0 N
4 s4 O# l; y) L- E; e' ^
TMOD=0x01; EA=1; ET0=1; //定时器0初始化8 T9 C+ l T Y' d w4 q* ^3 S
while(1)/ J( p! T# g2 W5 C, u) m
{
: ^7 ~! @% w: q8 }, ]; e9 c: G# T& i P0 = 0xdf; //显示小数点* h( j7 \3 o$ Q" d p' L( T
key(); //按键程序
" i4 ]$ H9 {+ \ s: r8 ~ if(flag_en == 1) //爱情买卖5 Q% Q4 L! [- H) S0 }/ M
{
0 M k5 |' ? j* T8 q) l m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
* {$ |0 N a8 L0 S5 j+ M. G" { P0 = smg_du[m % 16]; //显示, ]3 O7 m/ V9 V9 A6 _6 T1 B
if(m==0x00)
) c! `1 u! x) z% |2 v% [* e' N4 I1 [3 j {6 v! a2 b/ @- \7 S& z- {" P
TR0=0;4 Y0 k& r& a. D# t7 p
beep = 1;
5 X9 Y0 j" H: T# W) t6 O# g delay(n);
9 d# w- x5 ?0 D! C: J flag_i++;
% o8 x/ u k6 O) P }
7 m. ]: V: I- T2 t7 [ else if(m==0xFF) //放歌结束
* c# l. d& e" H$ ? {7 ]0 K t' C% b
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
! V+ J9 S- B) C& S8 N w else if(m==music1[flag_i+1][0])
, V1 r+ F& `$ ~) J7 x {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
. v( E3 i5 _5 _$ l0 E else ' ^; D+ I2 D2 S+ w, n# O) }6 S, a
{TR0=1;delay(n);flag_i++;}; _5 j3 `% z! B/ R- r1 f( U; m6 W
}
4 F9 J4 x6 L4 G4 ~# O/ z c else 7 B% B% u- g$ Q) v4 j5 y
beep = 1 ;
5 @+ D" e% C$ x1 ^& s+ t- A- ?- R7 y# r# q* q% p
( A4 t" x$ i7 B8 _( x- c: ]9 E
if(flag_en == 2) //生日歌
' i2 U2 Z p' y* D# ~% ~+ F* v {( A/ c; O2 Y: [
m=music2[flag_i][0];n=music2[flag_i][1]; //放歌
7 I2 K; f: O' [8 z5 b, h P0 = smg_du[m % 16]; //显示
/ L" G" }, y: z& M if(m==0x00)* ?2 N4 v- g" ?
{
. j' I7 N& N6 D2 O, U TR0=0;7 T2 s/ R$ Y- `1 ]0 M7 n z5 D
beep = 1;
; x$ r; q& O6 |7 C delay(n);* M* q& H( l# n4 O% e
flag_i++;
/ a! K4 @1 |, U2 C* c- ?* K }
' r2 I5 G0 i" i else if(m==0xFF) //放歌结束) ^& x- O e- B% R
{
3 P) Q% F9 a1 J TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
5 t" L) @& g, R: ~. | else if(m==music2[flag_i+1][0])
# K$ ~ G9 U. e' l" J' p+ G {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
% W) w: w1 |8 b, f5 V, j7 W, K$ m else9 s" s: ~4 Y2 G% p: M4 U
{TR0=1;delay(n);flag_i++;}) f( t7 X2 b' a: A
}# {. j0 c7 M( u, P8 Y
else
1 ?8 g& V2 k' `5 m P/ I1 a) O2 W beep = 1 ;
; Z Z7 {- {/ r' P
' D3 b# m$ t2 a& P7 M5 d
3 ~# |) T0 w& M; _) L$ T& ] if(flag_en == 3) //新年好; x; W$ n' s5 [2 M
{
& ~& `3 i0 \: \/ o8 J: Y m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 * Y4 K, a, Z% C
P0 = smg_du[m % 16]; //显示# H5 M0 M( @9 _ B* e
if(m==0x00)! Y% c% x/ T; b! x+ {( c9 z* l+ `6 ]
{8 Y6 V4 Z5 p5 P" Q; O8 @, P# u, f
TR0=0;
# a/ e" T6 V$ K# R0 ~. c$ l; W beep = 1;3 Z3 O8 d! B |7 d
delay(n);
* U( v5 Y7 ~- {5 a& F+ n0 c; P2 d6 x flag_i++;* f& {) d0 {) u1 I
} 0 H3 Z2 Z& _9 y& _) }3 [
else if(m==0xFF) //放歌结束
3 K) v5 b9 r& d1 H {7 b- E6 r7 R/ o) f7 E
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
" v3 z, x# h, M8 P else if(m==music3[flag_i+1][0]) 5 T& |2 G3 g3 O
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
- O" p6 B: n: x- D& @ else) G5 x6 X0 | X+ n p2 {2 j
{TR0=1;delay(n);flag_i++;} U/ g3 t: V) }5 m3 g% z
}
/ {0 f* ?! o3 z, _ else 9 ]# @3 b7 D' X2 r! T
beep = 1 ;
3 R' Q; ?# L! C7 Y* P& Z2 s$ Q4 L1 A }- W( C2 j [7 Y: l4 C
}
& G- u9 O2 f0 j& [6 {3 o; k. I$ ]. l8 B" T( c$ C$ }' Z
" }( A! k L' L& a3 ^9 ~/*****************定时器0中断*********************/ * \: D e2 |% x0 _6 Q }! t# A: C
void T0_int() interrupt 11 u8 M; I- N1 K3 x4 B1 N
{
( G* \5 D( {' p, r8 t beep=!beep;
1 ?% H7 v, I! Z1 Y$ k TH0=T[m][0];
# M8 Y0 q) v/ O. g TL0=T[m][1];
# B3 W/ N" y1 f5 Y4 g}
" H- M% M- v2 s3 B$ G% P |
|