|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue
8 O. H. o7 `4 f0 q* l, ]7 I$ A主程序第一行,不明白为什么会错,咋改,很急,求解
: }7 }. n" H5 e; {, i, w- Z5 n/ j: f- y) M* O- o
#include //调用单片机头文件
2 z2 R! R1 x3 \5 F#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
* o; y: t, ~) y2 X#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
1 i, U( V- t J/ _
; F' s# y I# ~ A. m8 T5 n4 e/ f' c4 ~9 G9 ]
***it beep = P1^5; //蜂鸣器定义
+ y u4 x5 J% O: z* g/ @5 V* g) t) m" {- S5 F M
% X t4 u$ L; [$ ]. Q
***it K1=P3^2;//音乐播放按键1 K" Y. w& u' N% q" W7 [7 C
uchar flag_en = 0; //开始放歌- W# J8 N" c( t4 L8 P
uchar flag_i = 0;" K% C9 @' d/ I1 M
5 W3 s0 E+ l6 \" x, v( M
1 _2 K+ \- p1 u6 [uchar num=0;//初始化num,用于控制数1码管显示的字符4 d1 U9 S# I$ v% j5 `
6 ` a0 c. E% U. a
, c' f$ F: {/ s3 @% a+ G9 i8 x/ g
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 8 M; j$ \5 l: H" u! }9 ]" F
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,( h2 S, h+ K" _$ A& }
// A B C D E F 不显示
% @$ n: [! a8 J* A1 ]# k. |7 v 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 , T* ^8 ^' f+ [& S: W- _
& Q5 m% Y+ l! e. t# C' b
% c, v4 p+ n/ M5 {7 X
: K- ]( g# c2 Q8 v% Vuchar m,n; / F& j# K' \ E. @; z
uchar code T[49][2]={{0,0},
v- n# h5 F) C0 f: _& V{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},- H5 Y) @ v( J8 x: S9 F: l! b% b/ Z
{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
/ N" R3 Z+ d5 ~! Z- D+ w0 e{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
) s! M8 Q4 _. q7 P9 B3 ~{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},! {5 p h- G x
{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},
" l E; t; y" U3 t5 ?" H- P; `# D{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}* f/ {7 F+ @% [1 R, y6 i
};! h' ?( I8 @/ U5 F
uchar code music1[][2]={{0,4}, //两只蝴蝶
2 S$ ]- K2 W% Y" k. ]$ K9 J{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},! v- t* Q, h9 Y, _0 H
{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},. w7 z$ Z& Q( ?/ B/ h$ z4 ?
: W0 L. L- }; N, Q3 G) z
8 v5 d/ r# l7 g5 g8 p7 H{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},
9 _ d# Y3 I" e ^( M" ^{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},- J& o$ ]* M4 [" W3 {1 p
{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}, K( H; _& P, g1 m, Z+ l5 x! d
{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},+ l; ?" Y" ?$ ^
{0xFF,0xFF}};, S7 O: o& Y9 u8 o2 S% S& ~0 D+ e
/ l3 u" X3 J0 f
" N- ^4 ]. P/ h* \
& l3 ^& l9 k$ ]4 O
]& ]( N4 t* g+ d4 \$ J, Uuchar code music2[][2]={{0,4}, //生日快乐
0 D7 O* R ^$ n3 Q% X: Q{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
6 Y) Q2 m( s4 ]7 ~{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},! n3 t8 a3 j M: h( C6 l
{0xFF,0xFF}};
2 b7 Y6 l6 ^) c. h5 Z" _% r: y% B
3 c( ^+ [( V8 x9 y
5 C" f; L7 J4 |- Fuchar code music3[][2]={{0,4}, //爱情买卖2 S1 L3 m7 V" K
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},/ c/ k: D) W$ O2 V! M. H
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
0 W$ d" g$ K1 _{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},, p8 R$ ^2 L" _2 D; O
{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},# S8 v8 |. D3 n8 A: D
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},6 H+ ]' `) B1 t
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
7 F) Z& ?& R& o0 B{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},
9 z6 G1 s( d' f* l7 A% h{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
( g H' r! }: r* e# V- e{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8}," h7 w) D3 F$ s
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
% k) J6 E# ?7 B9 n3 ~3 f( k5 @{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
5 C4 P% C* k# h) {2 `7 C{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
& A8 M5 j6 }( W7 O: x{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8}," S7 R6 c+ x! r. w: ]; b
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},. m7 z, n" V$ P0 S6 Y
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
0 P, E+ s4 B- G( `4 u{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
/ `8 h$ V' g, G1 F9 a{0xFF,0xFF}};
0 p- | F! Q0 J e& Dvoid delay(uchar p): v( g7 c( S9 E# X" S
{
/ k- p0 y8 S6 D! o( R, w0 F" l& ~ uchar i,j;
& R& M- j* P# U* a8 n for(;p>0;p--)
U# V" T0 K6 l8 D. A8 | for(i=181;i>0;i--)
" {. l5 m1 B% D9 E# J# p! z for(j=181;j>0;j--);. C- k ]. T" j! H7 D7 g# M! J
}
# q4 M2 N5 \5 [' G7 x% k0 V" a& k
9 ^& E. X6 ^& d. o/ \. e% m
# J0 O9 w: W5 J7 L* q$ G$ p4 n" F3 Svoid pause()
7 g: e& t4 h" W{
5 r: m4 Y+ |/ ~9 \% j5 s0 x5 I uchar i,j;
! ?% l/ x- h) N+ |( }; r for(i=150;i>0;i--); @2 M0 P ~0 h5 w6 ~' I- R
for(j=150;j>0;j--);
3 m8 x& O3 N: ~2 x# m4 b; ?* M}2 Z h# m* W q! @9 h
n, f( J9 D- a, K
* p( m1 \: ^! |2 U/ W" ] p. X
& e# ?3 n4 b9 x7 \- n
; h z2 }5 J- B7 t8 V/***********************1ms延时函数*****************************/
+ v. W' G3 @! Svoid delay_1ms(uint q)2 @( @! i& p, |8 N
{. r8 O9 k4 D& ^, u' |2 U/ d2 t
uint i,j;
9 s8 m! i4 ]5 R: K8 f' W for(i=0;i0 f/ o8 `/ m8 V+ _& ?. ~$ t3 p
for(j=0;j<120;j++);* x2 Z4 ]' d& l2 y* U! B
}
, P1 W6 Q0 Y! S3 y! y D$ P; M9 p( O5 \. }
! M% M. v: V/ x. S. s1 [/******************按键程序*************************/- u/ N) }8 l# }
uchar key_can; //按键值
) H) z9 {' u8 x ! u6 r0 n8 B& f8 h: U
void key() //独立按键程序2 l0 W2 i8 O/ r$ O& D3 a8 M/ k
{+ _+ }1 G5 ?/ ~! O" A3 G" p
static uchar key_new = 0, key_l;
. f9 I1 s9 N1 ?6 o4 l3 G! u# f! B key_can = 20; //按键值还原$ ]) b) E/ ]5 _+ t
P1 = 0x0f;
0 e1 F' E2 s# [8 m/ G$ a if((P1 & 0x0f) != 0x0f) //按键按下
! q2 o' @$ a D o+ N {* Y K) o8 K* G/ w) G
delay_1ms(1); //按键消抖动9 m7 n* n% U. X
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
( I. ?) ^; G; b! W3 H0 Q { //确认是按键按下
. a7 F$ N5 P& v; k5 Q3 Q) r X& v' w key_new = 0;
0 D- D N; h$ {2 W5 F2 ` key_l = (P1 | 0x0f); //矩阵键盘扫描
0 \+ K$ C0 n: V( n/ j1 P P1 = key_l;
' e2 ]5 I+ B, ^4 x, T switch(P1)3 b: ^" |, M- \& k( b
{
0 T" @& G0 |6 V( |1 } case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 : ^0 h @, ]' |9 c5 u, p7 t
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值 9 v. K3 d! P" J1 k
case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值
1 A0 k( D2 Q- D! Y8 ^/ _" H; Y1 I2 r case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值 ! J- [6 x2 S3 K7 y$ Z7 O9 ~; {2 g
8 Y# z# F$ i9 `' h ?9 A case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
; H$ M' A) }+ K case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
7 N, s0 ~) F8 W case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值
* o3 u" ~0 L+ q. I4 p# w3 C case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值
! D$ Q- X1 p `& `, g
6 n' }; U/ m' n5 } case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值
8 |, a% Y7 j W$ O case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
) c" m. {7 |7 R case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值
- w/ E+ [$ u- H D case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值 . R- O+ x }, O$ E5 R3 Q
" @5 O/ Y& F: [% u3 R4 S/ F
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值
0 v6 R5 N/ H' q7 G" y% V5 k case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值 5 \ d8 [& U/ U
case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值
( {2 t5 F1 }" H+ x4 R case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
& ?. s* S, G6 @% ]5 N) [0 i6 k }
. p, d+ B3 n8 ~% o P0 = smg_du[key_can]; //显示' C# m. Y, \) Q4 @3 Y& n
while(P1 != 0x0f)/ n4 @5 s6 l W( l# b9 _
P1 = 0x0f;" r# W1 r6 l, Y$ ~ t; U$ d+ L1 R, d) j
TR0 = 0; //关闭定时器
+ Z6 m9 U% q$ j2 n a) }' _, J2 f }
% s4 h" T' \; j1 {% _7 f }
: S9 d* e# @4 {7 @% [/ t! j* } else //按键松开1 X- O) n: v9 n7 Y7 K& u0 Z
{: f0 f7 O! S- W1 \6 G
P0 = 0xdf; //显示小数点
4 V; j$ J3 @6 X key_new = 1; 9 K5 n4 a0 w+ }7 @- d- G* q
}
3 r6 Q: k B7 ]& p* B) w" P3 ^; E4 P' R. W( \& d% W% U( _
% M+ N: k! \6 `. z- s/*********************歌曲播放*********************/
' u8 b/ X- g: o0 C K1=1 ;
$ t8 x$ G" J1 v5 ` if(K1==0)- j% ^5 {, B8 S L* y$ a& b3 @
{2 ]+ t* k) n2 a1 F+ Q
delay_1ms(10); //按键去抖动( {; N; T6 E" I1 ^: Z2 B% ^
if(K1==0)
% Y' K* O f& o# d& M W$ | {
) F3 y$ A8 X5 S num=8;
% g7 B: D! O& a! K: x3 c# F// P1=smg_du[num];//使数码管显示该音调的字符+ m3 Y5 D, Y) V; |; t# k9 Y9 F/ k
flag_en ++;& m( w1 e3 ~$ m1 L8 k
flag_i = 0;
, C2 O" o* @ z: Z if(flag_en > 3)
$ ^- D* M5 n8 s4 R: k {$ C h5 I5 y3 |% l* ^
flag_en = 0;
5 i) s+ Y- ]/ g2 \ TR0 = 0;
8 E) o6 R: h' P }
U) D1 G0 F' U6 q% y6 r while(!K1). N1 E/ r9 }5 ~9 M9 Q/ e! T3 Y- h
{
4 e' Y7 u& O7 C G) w& T }//使蜂鸣器发出相应频率的声音;4 L1 c. `, @( C, O+ E
}. q4 V; C0 R! d2 v+ T9 r/ \' S
}
2 g6 B! M7 N/ R/ \5 p& U* X}
0 I- {2 i% j* C7 Y/ ?; Y. @; x- F
& Q0 |5 @4 g5 t! `
# J+ n7 o" x! ?9 N0 S
; }1 a6 E r$ q' N- E. I/ d& M/******************主程序**********************/ ; p' ~9 G; |( x: x& Q. G' x
void main()
3 o; c9 L& k2 z/ P{ 5*++++++++++++++++
' v5 b: {" i3 I4 m! E k P0=P3=P2=P1=0xff;
3 f% N/ m' d" B0 v0 g2 n" e% b " `0 v# n4 @- [, d
TMOD=0x01; EA=1; ET0=1; //定时器0初始化& R8 f0 w; _7 ]* ?- d6 g
while(1)/ a( N9 W( l A9 u
{
/ ^5 B3 V. @- e6 A# ?; ^ Q" X1 J P0 = 0xdf; //显示小数点4 a* q1 p* ?& d M
key(); //按键程序3 L6 W, I. C% h
if(flag_en == 1) //爱情买卖& a% u, k# E( S, P3 X
{: f1 a4 b/ d- c0 s, z: T9 Z
m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
+ a. J5 a% a$ ]% N P0 = smg_du[m % 16]; //显示( O% @8 ~5 h: M5 \$ ~* |. \* ?5 Y
if(m==0x00)6 ^8 I; ]8 ~$ S: ~% s: N) W
{
4 W( d7 S' F$ Y# J. n# Z TR0=0;
! {( [! @( F2 |4 L: }$ x5 h beep = 1; a0 f# q: t* r3 X: o' w; |
delay(n);) \ L- U+ |+ V* b* N0 f" k y2 H
flag_i++;
4 C: i9 v* B# C( e, @5 m }
4 n- a& f" F5 r0 w5 @" j else if(m==0xFF) //放歌结束+ `1 r. c7 E) L4 i2 ]- }- b/ s
{2 D9 s' Y2 K* w6 Z
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} . Y. R9 S0 \& i2 C7 ?# b1 `
else if(m==music1[flag_i+1][0]) 6 ~; }1 Q3 V- r" z8 w. k" A% b
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
( E6 n6 n- ]' V3 b3 P' y else ; ?: L+ _2 r: R" h% e/ h- n
{TR0=1;delay(n);flag_i++;}
/ w5 o4 E2 I& R# t; a" U }
; o0 {: @; U+ o+ A7 u7 R) o else 1 b( {7 c+ U4 @8 B
beep = 1 ;
" {8 a/ b1 A6 I& i; {
( y' m2 U/ s9 l0 a1 ?8 B" T! D9 m
( ^& @2 I* W T0 t if(flag_en == 2) //生日歌
1 F' V/ J3 e& Q* t {
" {% s% X: {! }' J2 ?: [& d7 | m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 ' b6 S2 a& k8 `
P0 = smg_du[m % 16]; //显示8 l8 q* r. _' w
if(m==0x00)
! Y4 U& O0 Z' ~. y7 H) D9 z {6 |$ Q1 d) o9 j1 t
TR0=0;
- @( a$ f% \1 \ beep = 1;. p' a l* l4 `6 u5 }% {8 t Q. v5 |
delay(n);& E3 j7 t. w( h2 ?, q u
flag_i++;
7 _! C. D6 }; p( K. f3 \% ?, K+ u }
* ]- a) Z9 M& n/ Y9 ~, K else if(m==0xFF) //放歌结束. e* y# {5 p/ X% x, V. @) N% e
{
( s$ o8 W( X, v TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} ' V# @$ F. X7 m6 K
else if(m==music2[flag_i+1][0])
* h" l2 r( o0 K4 W4 R9 m# U {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; } ^( t& e- Z% K( \. X- K
else
4 @3 @+ C( h: V4 v: S; J {TR0=1;delay(n);flag_i++;}
& g" ]+ L/ S; _+ s& ]% f }2 o( x4 K) x3 }1 A4 J3 z
else
- i1 X. v, U: P6 \3 _1 q beep = 1 ;, ^% G9 v/ m0 u/ y3 `6 z; h2 f
' ?. T* `" o- ?. N
" _5 _* j( z' U) W4 o1 S Y3 W if(flag_en == 3) //新年好
" g- k. C* U# V9 f {/ Z9 N" {2 ]9 O/ L5 r, R
m=music3[flag_i][0];n=music3[flag_i][1]; //放歌
2 i% S' o e9 t% m2 v# [ P0 = smg_du[m % 16]; //显示
7 x8 P! J; ~" S& [& I+ G- A2 R' \ if(m==0x00)+ d* g8 Z5 v n
{9 \+ {9 R* \3 I7 C {
TR0=0;8 O. s4 q( S3 N$ o+ g( n
beep = 1;' l6 m. T7 R/ ~4 {0 Y% H% w) b
delay(n);
- I6 b+ f" A* v3 q9 \5 k* c flag_i++;* l. [+ P/ x- T% `8 j4 n2 z
} ; s& n* D$ X' H4 ^
else if(m==0xFF) //放歌结束) A% y! x1 \% t3 `% i
{
6 U; U* w3 i# w) y1 ~2 ?) K TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
( k0 ~, l1 p- z- { else if(m==music3[flag_i+1][0])
0 e! K! F* V, W7 o0 y4 [ {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
7 V: p/ ^8 L1 z else8 V1 a1 V6 a6 F0 A! Q' q3 A! n# b
{TR0=1;delay(n);flag_i++;}
! G; g% R' x5 q( d1 B }
. f7 o, I( ~) e- S, f else ! N9 D5 S- I! d
beep = 1 ;/ G# U# W% Q# G6 z
}, X. c4 ~( n/ `
}
2 b2 e& Y. F% v y+ g
7 q& Q" `0 y6 V; t; N
: `3 l5 z9 U/ i9 k9 S/*****************定时器0中断*********************/
4 f1 x# Z9 r' q" }void T0_int() interrupt 1
& v7 Q }" Z7 M a{; v- Y1 q; v v7 T. \6 w
beep=!beep;
7 E8 n: L; y* U. b% X TH0=T[m][0]; % x& M+ l% G0 f! W9 Z( @
TL0=T[m][1];" w! m# ]$ r8 Z6 x( I) Y
}
; X/ L) _. O2 Q3 D" \' q( t1 f( | |
|