|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue
* K$ U, d$ h4 j+ W. E主程序第一行,不明白为什么会错,咋改,很急,求解) k, T& R5 [% ]% A' j1 @9 ^
3 d5 H0 x2 d! l0 Y n% D
#include //调用单片机头文件
h! ^( A2 ]0 U: r, I I3 L#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255- a$ \, |! l$ l& e- U9 R6 s
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
, p3 L- H# u, [0 U% O7 s Q `0 Z+ b) F7 s) H- }
4 ~% B1 L' E% t! q# ]) i' O***it beep = P1^5; //蜂鸣器定义 Q- c e. T6 |2 W3 R
( d0 G/ a1 g4 n8 d& L& u! }5 p
* k/ Q& m- |* K# Y* O3 Y
***it K1=P3^2;//音乐播放按键
3 V- a$ h, p' t9 U( Uuchar flag_en = 0; //开始放歌
& S8 H+ ^7 S& Z" Q! z) e" W) }uchar flag_i = 0;
$ r; Y! ?- G: J5 r% R3 n- G' Q$ }5 N$ W
& X% ~1 @# _% `* ]7 R/ L4 g4 |0 Tuchar num=0;//初始化num,用于控制数1码管显示的字符
4 R! \# k% `/ R! U! g6 {. U
1 r# ]) _! F I' d( o! S' s* g" i# e5 f- S) K4 e* R* {
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 ( S) K( V" g1 j# g6 \5 [% I5 }( U
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,
/ y5 Q9 @+ T5 K. W) T// A B C D E F 不显示
) V1 J8 T6 M8 _. u+ K 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码
( j h7 Q3 N4 @4 i" d
, h$ E& s: ?/ _# K/ M% v( W
$ R6 _% H% j6 @* ^% D' _9 d) Q% G* a; c2 n6 t5 x+ d
uchar m,n;
% R9 E7 Q1 w, ` V6 {0 iuchar code T[49][2]={{0,0},
- f. J7 M( l8 T- C. ?. k{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},
5 l8 q) W: _$ ]: |{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},' C# I- l- c9 L5 |" S
{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},. ~, p$ \: d' M7 ?9 Y2 B" i# x# Z3 m
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
; L: f5 y& u) M- T{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},8 f. B4 |8 u2 m. q* R$ |4 c9 g
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}) T( S8 ?- s1 @8 ?9 X* ?
};
5 {; k$ e- P, S ?8 Tuchar code music1[][2]={{0,4}, //两只蝴蝶 * K" R% m& U1 o3 h, P, 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},
1 }( a& r0 m8 l0 f8 n/ u{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},
0 O7 C( Y/ {# R- K1 {- K) _3 l& o; o. d5 ]; G$ ~) { Y
3 M; j4 b1 u% J' E' X* M/ e, |- f
{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},
8 g% _( ?$ u! Y. ]{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},
9 k, [& z0 {# e{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},$ V- T% k) A# g8 F* ^8 m$ a
{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 v: n/ D5 f/ C) a{0xFF,0xFF}};
$ l. h4 v# s7 @, S- b9 J
& T- Z$ ?. x+ F
4 r3 ?+ q0 j& E1 I) V6 I
- u! d# t( A/ X3 k. B6 p& ~3 U' l0 {
; V5 A3 ^: `7 e- O2 v: [uchar code music2[][2]={{0,4}, //生日快乐
; H, e# O- I' m" u{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},0 T2 |, O- K( G: _3 \+ u
{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},
4 H# L, {( g* s- ?7 O& t% G$ J: v{0xFF,0xFF}};
) h" f0 m3 M( b2 ^) N# D8 @6 w2 p) p! \. c0 W" i/ ?5 Q, s( \
; \/ J$ B3 @& l7 n0 c9 ^uchar code music3[][2]={{0,4}, //爱情买卖$ M2 D! E( l) {, I$ Z
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},9 O2 F3 u" x/ @7 x& x7 i j
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
/ a; W4 ^: M- m8 `{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},/ m. @: H/ S) q: g
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},+ @5 I. A! X' i1 u
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
8 z, S+ r6 i9 U9 c3 q }, V{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},& {9 }; G0 n4 h5 u2 T
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
3 s, s2 R& q1 \" q; T# l3 z) J{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
; O6 O8 \" @: D p- n, }6 p{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},+ O! p5 l7 E j' Y1 D d
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},) h7 n9 V: P8 ~2 g$ a6 l
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
/ B; o5 T, c _. W. L0 t% }8 G7 y9 f{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},% }1 h$ o% X4 k7 {0 W) L
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
" p# |6 T+ Z$ o6 `3 n* i{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},/ U; k# ^- `7 m: ^' l. H5 R9 K& ]
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
) ^/ t1 ~) b6 r. w- l{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
9 n! l y3 }: S& J5 ~5 K5 z{0xFF,0xFF}};2 S0 t& s F1 h
void delay(uchar p) ~7 b; u7 a0 A
{# p: g; b/ l4 } W$ e+ ~, w
uchar i,j;
! P s, Z; K: `5 d9 a for(;p>0;p--). @# {* ?) J( T
for(i=181;i>0;i--)9 B& g. h* a* G+ Q; v
for(j=181;j>0;j--);
9 }' A Q5 E1 h6 n- v' R}6 _) r/ L' ^9 [% w- P Z; K( G
+ s! @' A) A) c4 r7 |7 G; z5 h* a9 B h! T! q5 T2 Q
void pause()" c% R3 _0 D' t5 U! q# d9 M e
{$ h/ m% h. b7 E7 K W6 Z
uchar i,j;, Y1 Q& ~8 K" n/ c1 T
for(i=150;i>0;i--)
) I: S1 v, e& F3 g9 r5 I for(j=150;j>0;j--);
8 u3 b6 W1 @% P}
8 v. Y! \) \# V% ]' U n
* F; q% e/ O" m* ^9 Y) d5 V; J' I
- | g- ] B# i& U5 C1 @
/ E3 D1 [7 e" x& S- L2 y# G$ @. V; C+ q$ {+ v6 z) c
/***********************1ms延时函数*****************************/. h8 X6 K- s8 P B
void delay_1ms(uint q)# }3 M; I) k g. z) _: a5 t# S0 l$ T; r
{ [: k, _+ G8 N. Q
uint i,j;
) Z0 {" ^1 m! e0 M, b for(i=0;i" B( o+ ~& Q( D4 A2 ~2 J
for(j=0;j<120;j++);
4 T9 K r4 S4 U6 n}. e8 @% E* ]3 M" W* ~3 F, `
1 z0 J9 V v' x8 x$ E A5 v4 [
* o) K* J Z# f, E: e) L
/******************按键程序*************************/
A$ V7 a, e" @6 v5 m, S6 P4 O4 Kuchar key_can; //按键值
- x" j0 k+ l) T, w4 Q* l 2 B& I: Q$ @) I# v8 I
void key() //独立按键程序
. o- l+ y( a3 g; X{
( B7 V s2 v N8 T/ u static uchar key_new = 0, key_l;
* @- ` L. l% A key_can = 20; //按键值还原: ?8 W. G! L' U3 g F1 {7 k) y
P1 = 0x0f;
* j5 i' t% e2 P if((P1 & 0x0f) != 0x0f) //按键按下# I6 ^, v) A0 L. c3 y7 g
{; B! b1 F* j+ D( ]4 [
delay_1ms(1); //按键消抖动
0 ~+ u1 h) l. l& h; L if(((P1 & 0x0f) != 0x0f) && (key_new == 1))6 H' F: ^1 p& N) {' q
{ //确认是按键按下3 k4 [7 [9 r8 {! T5 c
key_new = 0;
- R6 ]1 U/ Z j4 J7 u! c key_l = (P1 | 0x0f); //矩阵键盘扫描 l. n6 C+ y4 m& X
P1 = key_l;
0 a* H) _& A" ]: x switch(P1)
) C; ]) _, p& q: T: _ { i( D5 I/ e) c. o8 m, l
case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 0 S% q* [: b, i) B4 }8 w/ I7 O
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值
P$ A$ l& q. x" P) g case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 $ U- d5 K1 n2 W- b& z
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值 ! @4 n. T( j( I. o2 \
- Y& @0 \* U2 @9 _( ~
case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值 8 d0 ` v; p' R4 q
case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
+ R& P+ E, j+ K$ ]6 [9 q/ B' {# G case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值
3 a6 W: v8 ?( E case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 4 w' s' w" w& M$ [% \
6 _: I t; e4 z5 j
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 : E$ u! s/ C* H3 }! y9 T
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
+ R6 \# {! v" |. b' }; Z s- g1 L case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值
5 O3 q# ~! S0 S' P case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值 : l) c$ i, {8 t( r/ `
. R& U9 A4 ]! e: [8 R case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
0 h- V3 b' Y- U7 ] case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值
! ~4 o Q V3 M7 Q7 x# X case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值
4 Q9 \. j" G- c0 Y case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
4 g* x7 Q5 V/ T6 ^' p- P: K } % n2 E! u- @/ V/ D
P0 = smg_du[key_can]; //显示
, w' S3 |( Q E( v3 w while(P1 != 0x0f)
, F$ b# f# x! R( ~ P1 = 0x0f; n' Q; S6 ^% o0 x- [& L" U' J/ L
TR0 = 0; //关闭定时器# E2 h7 ~! W2 D* [# X; S
}
7 u: v% G3 M% T2 D }( H7 b1 l' }; w
else //按键松开. s9 a+ e5 |. G
{. K2 ^1 D2 w; Q3 {
P0 = 0xdf; //显示小数点+ ^' M" |7 ]3 u9 s, c) n
key_new = 1; R; A: [5 W. F7 s
}/ K/ _8 ~8 Y h6 l/ G; N
. M$ M9 l1 V0 N S0 q
; a3 @% R$ E. A6 c% H3 l( [/*********************歌曲播放*********************/
4 F6 \4 J5 c0 Z9 R- {& |+ |3 D K1=1 ;
1 C& h+ N, y- s! @ if(K1==0)
6 Q: |" w7 h4 ~9 I8 m) @; t {
1 V8 W) \4 u7 D+ a/ o/ N* V7 J delay_1ms(10); //按键去抖动+ X" Q" T3 O0 w
if(K1==0)# }# w6 o6 f" K5 H
{% Q" j6 `% E, m% a! V
num=8;
: l% ]. E2 u, J% J( v. h+ K// P1=smg_du[num];//使数码管显示该音调的字符
& `$ x: U5 ]* H) H, Z8 g+ x2 ^, ]8 ^/ J flag_en ++;. S2 h) K0 {, u$ O
flag_i = 0;
% q* {+ x" ?2 y" ` if(flag_en > 3) m4 F9 ?: e( t
{+ r7 B, \/ x o3 Z9 e7 P
flag_en = 0; . K% k: D5 _ z8 b! s4 ^
TR0 = 0;
- W, ]/ W( l4 g4 M" d }
/ e; T, g7 B4 d2 F Z5 Q7 k h2 u$ R# { while(!K1)
* J6 G0 P% A. V3 W {
! i( m) C, F2 c x8 j( w _* A# D }//使蜂鸣器发出相应频率的声音;
5 M5 ^- L! z+ X: n# F }
9 w1 ]. [3 A2 B+ v. O }
( i; d; g7 W4 Q8 \- C! k! E4 u}. y$ }$ Q8 W" l D* Y( V
6 t! b- b: K7 C2 o2 H
, v; p& F% E7 f9 z
3 X, z# ^6 ^* Y* @* Z
; |: f/ v u& u- ]/ E6 |- y0 S/******************主程序**********************/ ! q( q+ g% [0 U
void main()7 v2 [, G+ U" b
{ 5*++++++++++++++++
4 H9 W, C9 K j8 { P0=P3=P2=P1=0xff;
/ r @8 X0 \: |4 M9 E 2 a- {: D Z# B0 N+ D2 E ~
TMOD=0x01; EA=1; ET0=1; //定时器0初始化, q" ]" R7 S" _, C$ _
while(1)
8 u# g) V6 v+ X {
5 M9 \9 w9 W0 T9 I9 y5 N P0 = 0xdf; //显示小数点
6 O" S0 \% G+ m key(); //按键程序5 E1 j6 L W$ Y; m: n9 h2 y8 D
if(flag_en == 1) //爱情买卖
! u' {2 V1 _/ j1 v2 c5 Z$ ?4 ] {5 p, r: e. F7 p5 w0 K
m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
" H0 V5 p9 ~6 e6 e- G( L/ q P0 = smg_du[m % 16]; //显示) }1 {' ~+ R6 d9 b! o" m' W
if(m==0x00)- @/ \) z& N- T% X8 D; F
{( \; ]/ f- T$ `( u9 p( u; R, l% O* s
TR0=0;
) \2 n3 \: }$ b+ b: f. w( m beep = 1;
% g' t( [" _! r p( q delay(n);
3 i2 n/ q4 }% w flag_i++;
/ }1 {1 f' [ S }
- y4 K% B5 u$ Q7 t else if(m==0xFF) //放歌结束8 I' U2 H4 i1 U
{
& R3 n+ S5 F7 A3 j TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} # y7 n+ D+ p& L3 R D! P
else if(m==music1[flag_i+1][0])
$ y/ r3 g; \1 ?) ~" X" ~8 C! \ {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
4 s9 p% e7 W, J$ G2 S else 7 i8 w1 q5 v. j' {, l& i [8 V
{TR0=1;delay(n);flag_i++;}
) g" S4 b! Q2 h! }. H: ^ }( V+ |7 b' W: j
else ' A# s6 Q4 F+ y6 q7 k
beep = 1 ;
' j r' j, c! D |8 X
: a1 d4 @: L1 A* X
! ^1 c0 N$ i3 ` if(flag_en == 2) //生日歌. A# _ o4 Z4 ~: u" X5 [
{1 S5 I( y' |$ L
m=music2[flag_i][0];n=music2[flag_i][1]; //放歌
# v; I1 O, }' a8 ^/ I$ w: n8 l P0 = smg_du[m % 16]; //显示
( }' t( _/ d3 P5 G) c$ q if(m==0x00); H; [, o" `6 r* y; V3 m* o
{+ F+ E6 E) F; [3 n" M$ i- ~
TR0=0;1 Y1 k) j, X! U8 Q' N4 j! `5 f: D
beep = 1;# Y# N8 b. z. \- C
delay(n);9 v0 ~3 O6 n( Q* [+ \
flag_i++;
; b* H' p( }' a7 I) E8 b } - o1 o6 @; p5 p# j
else if(m==0xFF) //放歌结束
6 N3 k" C- A% T3 ] {8 K. C# e# ?9 h( L% {
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
) W2 q( V" L- o1 J& D else if(m==music2[flag_i+1][0]) 7 e5 y8 s+ [0 N+ J) z
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
M2 D4 T2 l5 h! f/ ` else
: ~6 [) j$ T& s: |! r* | {TR0=1;delay(n);flag_i++;}! P1 B/ X6 U! @8 \* J- c
}
4 g v: j2 w" P( q5 q/ {9 Z else
, Y( e4 b* f: Q beep = 1 ;
& u) L* _. F9 ^
d0 Z' b! S3 D+ n) r" a
. O+ {# \6 q8 E( `1 f if(flag_en == 3) //新年好3 h. J' h- _5 f% `5 B
{
) s5 H6 F" D5 P( x$ q8 a m=music3[flag_i][0];n=music3[flag_i][1]; //放歌
5 j7 _: P+ j4 N7 [. P P0 = smg_du[m % 16]; //显示" c+ C0 `" ^1 A) i1 M& I
if(m==0x00)! b& ?4 y* V4 P3 M$ P; c
{" |" j; I* c6 f9 C2 Y. L
TR0=0;
9 y/ q; H8 ?5 [( m beep = 1;! s' F3 U7 U, o: [5 _& Z2 L
delay(n);; r, P8 p' @- ?" }( H- F1 S1 c
flag_i++;- _7 T- k) ^- Y8 q) Y' E( e
}
X' b% s- r# J1 y4 s else if(m==0xFF) //放歌结束
" o9 ^" A* ]9 W$ k; T% ] {
4 N2 i% D$ f- K3 H& K6 T: Z TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
8 S. y. u/ R+ F! s9 J- w7 l else if(m==music3[flag_i+1][0]) ( w* R* ?: g- {! v# v
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }0 p& X+ c G7 R7 s1 ~& Z+ f* W
else1 V$ B; B! \0 P9 t8 h
{TR0=1;delay(n);flag_i++;}
$ U$ \. L! M8 G+ F) Y s }
. T2 R' O( i9 N$ n8 w# A# U" H else ( ^8 P0 q7 k4 V% [& i) F: i
beep = 1 ;
) E- [% e0 E; q }% R( [8 e L% G# i! [# \2 y
}& ~+ }2 Q* r" S
8 y: p( K2 x d9 y0 f- V
8 |/ p9 W- t% |6 [* l; `/*****************定时器0中断*********************/ 4 E2 z: j' U# [, r5 l& F( B
void T0_int() interrupt 1
. @& h/ l2 W: A7 q( p{
* p6 }3 G+ n3 x2 X" |0 v% n beep=!beep;, g$ J" X! I( m5 V; ~
TH0=T[m][0]; # o5 `2 z& F+ y
TL0=T[m][1];6 m' @3 c( I! O
}- w$ \4 F* D6 b6 C' |: |3 W# r2 r
|
|