|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue
1 T, z0 ?: b |# A主程序第一行,不明白为什么会错,咋改,很急,求解! c( g1 p/ \) ~, h2 e& `1 u6 H
. s, g/ x, k' E! [ #include //调用单片机头文件& ~4 b* J3 y* ^% P! v
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255% C, B. E& ^; S$ V
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
: R) C! U( F0 {' I
) P' k, O/ Q8 B4 h( l
' u0 e& d2 Q0 {1 V1 |9 a+ T/ s# Z***it beep = P1^5; //蜂鸣器定义6 c L& ?$ I& d5 k$ b4 L
* k$ t. O% k: u, ~, D1 n: x
( ^- L% v- N! c# T* |2 V***it K1=P3^2;//音乐播放按键
7 e ]6 z4 t2 I4 Huchar flag_en = 0; //开始放歌5 H, j: [) W8 p6 ?- p
uchar flag_i = 0;
) O. O- j! m9 K. C# V
# A% P; s& h0 w: ]% n: ]6 k/ t) {" b# t3 S# ^
uchar num=0;//初始化num,用于控制数1码管显示的字符
; [$ B$ c" e0 B5 q; R/ L8 z) b9 M% Y6 K0 c4 ]# n/ m( Z" B9 v
) Z4 |0 v" M! p/ g7 B9 L
//数码管段选定义 0 1 2 3 4 5 6 7 8 9
$ m0 J. L: F* h$ @8 C1 ^1 T& Luchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,: Q1 f8 a4 z. H& N
// A B C D E F 不显示
* {( y f/ |6 s) G8 Y+ j 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 8 g! O7 v# B0 M! Z% m
( p7 z% d! N1 c6 \+ C' S
# m( p; q7 {' f
j6 Y- r/ l8 M- g8 x# U+ ^) R- C) |
uchar m,n;
# s6 z; w) I& O: a0 x1 s* `uchar code T[49][2]={{0,0},/ g! B5 T: \+ k0 h9 c) K9 M8 z$ x
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},1 x5 f. d1 r" K
{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},- g! I0 j: G, ] e
{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},6 c; L) e/ a4 |- Y
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
8 P) ~: \, w6 l{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},
5 W$ k2 }! o) r7 R0 l: c{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}5 L8 a3 c0 W9 @+ d7 Q6 Q/ W
};! f7 j4 C# S1 r" G$ v- i# B
uchar code music1[][2]={{0,4}, //两只蝴蝶 9 J, ]1 R, G `, V) C+ 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},
# p. G' A) M& c! \8 r6 `{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},
; w. J1 _+ W# B3 [3 D
- r4 F* @% ~# ^% x A' _0 P- ?, b% `8 C1 T4 o9 Y( t3 f! k" w
{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}," ^, x' h1 i0 z$ h0 \
{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},) e* U9 ?5 }; c6 @ U
{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& p) }' l6 `3 \
{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},
4 t3 [) P: r, ~/ ^" _9 q. y! K- J7 d& d{0xFF,0xFF}};
4 a3 d8 l h! `* S) a5 s/ e
& ^& F5 Q/ J$ p* `1 h0 ~* n! x6 b f3 {! h7 [
8 G$ \7 }" P+ ~- z. ~! t) @" y
; u" D N2 v# \3 a$ F4 Vuchar code music2[][2]={{0,4}, //生日快乐5 H$ g# r3 z, o+ S P
{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},6 F) E' n9 C8 ~; P/ V
{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}," Y9 L1 h/ X6 T6 C$ u- ~
{0xFF,0xFF}};0 \/ Q7 F5 w X$ [1 A' \6 d9 i0 Q
" G0 C4 @( ?" L+ A ]9 d" T% o& U+ {
uchar code music3[][2]={{0,4}, //爱情买卖
* E/ r y8 B4 A# Q, g- J0 M{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},( ^$ R# F. r. i3 W$ Z! O, K( R+ n
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},& ?% i0 f2 u5 R, {3 U9 o
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},1 s) r: E' L, ?# y |0 x9 T. T. z* |
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},- f' f) \0 C$ Q& s4 X$ B1 u
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},0 ~: w6 N; Y! M. \2 y' Z- s8 R% E
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
" Z# ?' a) E" e/ O{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
, h4 `' y; e- C1 |- B& }{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},& g0 F8 J' G& M5 m) s M
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},4 N/ B7 z3 }& K$ k& B" e) \
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},8 v( `7 @& o- `, R; _( N5 `
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},( Y1 D: ?% f# E
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12}, `/ ]' v( n2 \; g& c- q) r
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},) E S P4 \1 d& \ P8 ]
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},. w( i+ i% I1 Z( ~
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
5 E8 K* ?$ D4 V3 l{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},! f( f# v2 k; X) v1 c: }
{0xFF,0xFF}};
3 T8 T8 e, N! ovoid delay(uchar p)% m+ K! Z& g# u# o% @2 _# z
{
% p3 Y& h0 g& `! o3 W+ f( C! Q uchar i,j; ! D# A- C: B2 w* A; E# L+ _
for(;p>0;p--)2 N- j5 L) a; x* D7 b
for(i=181;i>0;i--)
, R, v4 h7 j Z for(j=181;j>0;j--);1 i' m4 l% X( \8 V$ [1 y$ x
}
# y) P* s# I2 K3 g7 @7 f7 d/ A! a! G: [4 u! B" I. b/ K1 R
9 O) i- B) I* C
void pause()9 L8 l2 p( z M' c2 T
{
! G' r9 q H+ V5 N8 F- o8 h uchar i,j;8 D1 f$ e: y) Y3 r/ U; f
for(i=150;i>0;i--)
. H: p" ~' Z6 ]+ W: [ for(j=150;j>0;j--);
: J5 x% ?% x) q$ h# x7 k}8 @- U' N) a4 n( p4 H& W
0 i. d6 r+ L! _! ^; p1 y' z
- Q" a3 C6 n8 U, l" X6 e4 X
; J: u& w, U5 J3 P0 }4 @ X* Z' U0 B" o) r9 b
/***********************1ms延时函数*****************************/
8 O! F) {. F6 L( D0 |& `void delay_1ms(uint q)
: B" P$ P; b3 ~, [6 H{
" M1 P7 L: d; r: a6 j+ I- W1 T uint i,j;! r5 w4 J3 ?: [% x
for(i=0;i
0 q$ o& b/ c' v$ _- K8 F4 q' J' Y for(j=0;j<120;j++);8 E6 g- g* Y" V+ \8 Y/ S! [
}, q q! s, E3 {; ~8 q. j0 [; G
! w7 L/ L7 X" |5 y+ [6 H( g/ \, R+ ?7 g
/******************按键程序*************************/0 K1 C7 D/ ^2 t* b9 s( B4 Y" E
uchar key_can; //按键值; m F9 t6 d) O, M# M
" C: C- i- `5 o& F
void key() //独立按键程序$ X1 O) G1 F/ k/ A7 G
{
5 e1 C$ q; J# f: U6 c1 w static uchar key_new = 0, key_l;
) F* X: p/ d- u$ O1 N& P3 W key_can = 20; //按键值还原
/ y5 C) x% `: c P1 = 0x0f;- }& x, m; @8 A/ v/ U. z
if((P1 & 0x0f) != 0x0f) //按键按下7 w$ d* v, r" H7 v
{5 F& R7 W2 D# n( P" c. [
delay_1ms(1); //按键消抖动
8 K4 I. s$ j6 B$ l. u6 a if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
7 O3 o3 v5 r7 |) K { //确认是按键按下
v% X3 d+ N/ Z, T* M2 _# e7 R$ N key_new = 0;% D# f3 A4 r# d4 Z
key_l = (P1 | 0x0f); //矩阵键盘扫描! _( ]; Q6 M& W7 `3 n" F
P1 = key_l;
9 {6 I8 K; k7 x- K. M4 z switch(P1)
* H; z% ~4 h5 _$ L {
1 t0 L: C3 X9 O3 O1 ?0 R3 k! }% ~# c case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器
+ i9 _! L) z& j5 ?9 | case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值 # _) r {& Q8 h3 e/ _% ~% M
case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值
5 t6 \& j" |5 O5 r! G/ s, c case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值 & k6 ^- A9 O0 p2 Y1 s0 Q5 Y+ j
0 q F2 }1 W) F' y4 ?) V/ X# v
case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值 / }9 v+ n* c* w7 X. I# _
case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
! D0 J7 {# }: l. Y* Y* } case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值 9 B1 \ q' Q3 g6 @1 q
case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 1 l. | A* u+ I/ s/ l
+ q* N3 i% O% @2 [3 G1 X: Q case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 ( O# l p2 i* [! E1 d
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值 3 A% m: {! P4 i& p2 R
case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 ; Q: P, `8 n4 J: _. n! K
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值
* w4 H" \" Z3 I7 A. I/ R
7 k9 Z" e, {9 C5 f( d$ p case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
+ p. p: b/ }" J! U case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值 7 ]9 H/ h) ?2 W% X
case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 . y/ {, Z6 m i
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
: F: k- |% s! R0 e7 _ } . l+ W' l5 l5 c6 Y% t
P0 = smg_du[key_can]; //显示
# u7 z4 p* n y' v' U while(P1 != 0x0f)
- n) i& w H# |4 D2 U0 ^/ C P1 = 0x0f;/ H- _; u+ B" F
TR0 = 0; //关闭定时器/ v8 D3 t( D# R5 x2 X# ]
}
- \3 P& v8 ]: i }) V6 M. a7 `4 `* t
else //按键松开$ W0 R' }; q$ z: T" w
{3 S; f I- j2 [1 T9 }
P0 = 0xdf; //显示小数点
: H l, Z1 Y L4 N' l Q) N" [0 K) Q key_new = 1; 5 Y' S$ u l8 j* H6 l
}& j8 n+ W% b6 w+ Z/ c! P
' g/ X/ @: ?9 [ [8 i$ L! t8 O
/ D$ H- x5 U' g/*********************歌曲播放*********************/7 {: N5 x* k- C6 h' B
K1=1 ;# d2 f( J# v) k
if(K1==0)- d7 t- Q- |- |3 j$ j! e
{
6 v, r# @* K- j8 { delay_1ms(10); //按键去抖动
+ Y7 R# `3 @$ j1 N9 l. A if(K1==0)
0 J3 q* o7 V4 r/ |9 o" G {; i; {5 A: i0 E2 l6 j
num=8;
( n& r+ b+ f: A, Y _! i0 G// P1=smg_du[num];//使数码管显示该音调的字符, [6 _7 b) T# B4 T
flag_en ++;
/ S2 g4 ^: a+ M# Z) q8 V& P1 x* G# } flag_i = 0;
2 y6 y4 s4 ?. y) } if(flag_en > 3)
, z4 [2 @9 J+ `* I {4 |4 R9 e3 R' d5 r: d
flag_en = 0; * i+ p: x9 w1 H
TR0 = 0;
8 r% N) ^$ L' H! C }
+ s9 s& P! T8 l1 D3 w' ^ while(!K1)
7 L9 Y* }* F2 a {2 U- k' ?) C# V6 z/ t2 C
}//使蜂鸣器发出相应频率的声音;% l. y+ Y( A0 h2 f
}
+ A3 p$ Y+ d! p+ J j8 C }# \. E! ]) K) ^
}4 R& D% u4 ~2 [4 H# A
8 b" J) ]$ p; c6 f, A; g5 w" E' `. w/ ]
' k/ I* ^: W1 o8 a
& H. G( r8 D+ Q2 `+ p, D/******************主程序**********************/
0 ?7 D$ _$ p# kvoid main()
1 i1 V) F/ r6 u- D{ 5*++++++++++++++++# G2 V* \0 a- S/ r8 ]& r$ h
P0=P3=P2=P1=0xff;3 i7 S% S+ `$ S! v
3 {8 N8 P6 c! ]/ q TMOD=0x01; EA=1; ET0=1; //定时器0初始化
+ |$ O( c/ Z& m4 P1 }4 r1 T while(1)& A0 m6 a. t( F
{' e0 s' C/ M& |2 N' C
P0 = 0xdf; //显示小数点
6 R6 B6 u. M. r( G2 ~6 k0 s1 X$ l' t key(); //按键程序) P( f7 ~5 Q0 ~9 p7 n
if(flag_en == 1) //爱情买卖
) `/ V- S- Z9 w {
5 `) a3 H3 G A4 l1 K7 z m=music1[flag_i][0];n=music1[flag_i][1]; //放歌 _0 p% t: h z% L! t: ~: h
P0 = smg_du[m % 16]; //显示
% I- h T" o* p4 v' P3 B if(m==0x00)
* K; G& P$ Z. T: M' u/ |: j3 w! ^ {0 J9 ^, C5 z, n+ a+ T2 v8 N2 X* m2 u
TR0=0;# i1 V0 C+ n4 X/ F3 S
beep = 1;, z8 s: ?# R1 Q/ a1 \9 ~
delay(n);
& D( q. H* t1 o3 I+ f0 g/ Q% [ flag_i++; w5 j6 v! _9 [; k. h% W
} 7 b' J: v! { u- l
else if(m==0xFF) //放歌结束
4 n* K9 e/ G% K- M {
5 x/ z$ U( h& h* ^( i TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} ( S/ H) Y8 _4 G- o7 r6 t
else if(m==music1[flag_i+1][0]) ; b5 D9 c% `: h/ K- b
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
& ]* m! Q$ d# G# B1 @$ k' [ else
b+ v3 i* B! n7 H8 C- |' B {TR0=1;delay(n);flag_i++;}2 P+ n' y" z) v% F' d! C
}- j7 P6 D1 k/ O k2 ?0 g: z3 P
else
- Y4 Z" D$ t4 h* O& l beep = 1 ;
+ |+ O L/ ~3 G7 a" ]3 n. y8 l7 G f% Q$ G2 G
m) D* u6 \& A/ f if(flag_en == 2) //生日歌5 P' H6 Z+ L: O( v# _# H
{. z3 { w* k) {
m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 # X% G- c) R8 V0 s7 a/ J8 h
P0 = smg_du[m % 16]; //显示
3 y( j3 a0 F% A2 l9 Y8 G [ if(m==0x00)
. J* e8 ~; ^8 e, f0 ] {
) I- \; x5 j8 }/ _5 U! _+ Q TR0=0;
* T" i' }5 N' p ?9 v+ T# ^5 l4 o9 M beep = 1;
$ J4 S: k2 K& B$ s delay(n);
& c" ^2 j: |0 ]7 J flag_i++;. W, w" k0 s' ?2 \, Q
} $ o3 L6 ^2 [/ B- r' D/ F) j0 e
else if(m==0xFF) //放歌结束; _8 p5 K+ q: L+ y$ n% N6 b8 X
{
5 D0 }6 ^1 h8 ~, ~- y: m, | TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
3 N6 e3 J$ d9 U( C$ D& K" d else if(m==music2[flag_i+1][0]) 8 P7 b. p$ P: y* g+ w+ q1 i
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
% @) M3 z- a6 a8 P5 n9 k; U w else
* W$ y! G n+ b9 e) z {TR0=1;delay(n);flag_i++;}. d4 ?7 ]8 c- q
}
& n+ A- f" o4 q; c7 y else
: S: r+ O& ]; y, i3 R, G7 I. D beep = 1 ;6 i* u4 c; r* ~4 ]0 d9 y& t: a6 z8 J
" h8 q" v+ O/ b, I
: _' y( o2 w& M( Y if(flag_en == 3) //新年好
5 i% d e( {* s6 _5 j/ O/ P } {
0 m9 e5 T/ w6 k$ X1 K4 A m=music3[flag_i][0];n=music3[flag_i][1]; //放歌
9 i) R2 y% c: T9 L( w* y P0 = smg_du[m % 16]; //显示
$ y6 {+ m4 |& F+ S if(m==0x00)
& P1 k9 v: [0 [2 l, J( d" b {, b( r/ S/ ~. }$ A+ J: L6 W
TR0=0;
0 m I. e+ t) Z% x0 b( T& }) H3 p, N beep = 1;% s: E/ r* u6 P7 L% R
delay(n);3 S# L, o3 u2 U4 H
flag_i++;+ k) o# j* D/ T, v
}
0 [& x7 d5 w2 b2 ?% n; G' r. G4 @ else if(m==0xFF) //放歌结束
B9 E$ A6 Q- X {' ^' y+ B5 Y, m! |3 r" B
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
% V D; b) A% ^. L6 Q- q3 L1 d else if(m==music3[flag_i+1][0]) . k( E7 U/ v+ n+ H1 c5 a
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }1 }8 J5 S! k8 F% ?0 q: i
else
: c" D: v5 d7 V& Y {TR0=1;delay(n);flag_i++;}9 p' G `# E4 e8 y a0 O0 [
}
* \1 f7 _; y" Y, f. A else
5 H1 P' ?8 a$ q" C" H beep = 1 ;" x0 Q, V4 V" o+ R# |: Y
}
7 p* I& ?7 v1 P- ?, e}
& G( ]0 T3 U8 _# G2 y, a" X4 c3 I; O% G: W7 r
& O* T+ @: p6 \& w) L9 }
/*****************定时器0中断*********************/
* ~$ S2 E% \! |* J4 Y) W5 bvoid T0_int() interrupt 1
. ^* [, J9 N1 Y% a- V3 V4 r{
3 ]3 N. O/ E2 X beep=!beep;
6 l. g7 Y/ |) W$ m0 G6 d, X TH0=T[m][0];
q% M6 ^4 \* |0 s9 j, L0 u TL0=T[m][1];
- W; q& {$ I+ B3 ^1 e8 G. m}0 S |" n0 ^5 w# Z0 |7 \
|
|