|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue/ E& Z9 b/ e* c& U, N% p7 \- l
主程序第一行,不明白为什么会错,咋改,很急,求解
. p7 C' ^; Y+ A+ k3 U2 H2 n2 \8 y/ [1 h1 _* Q7 ]# Z! u
#include //调用单片机头文件
" Z9 P6 J5 u7 ?#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 _# [8 ?, s7 @, U3 [% O
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
* }! g2 H. D& [+ [6 W
( P, S9 `; ]0 x# b
& p7 u+ V* N7 U) P7 K# F% G, b' X* U***it beep = P1^5; //蜂鸣器定义6 B0 G: b9 R* e
, y" L; @- D; z2 ^& a
" p" c& T+ S; t: H' Z1 u***it K1=P3^2;//音乐播放按键# n9 l# H1 k s/ a0 v4 u8 _) m
uchar flag_en = 0; //开始放歌$ e5 B& d% l, K) j2 [/ H" U3 L
uchar flag_i = 0;. X; p! }1 W/ d9 ^: Z3 |
. ~2 a z, f" v5 M. L& D" K
9 v; {2 h# Y+ l
uchar num=0;//初始化num,用于控制数1码管显示的字符! z+ J9 D' F0 v! Y/ I' w
& |7 Y5 U9 d( i0 H0 L) L( R3 n. b8 _2 y6 C
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 8 q$ L- K5 i i [& S* g9 B/ R
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,
" F/ j3 g |" M7 W: P; n// A B C D E F 不显示: R( r" f; L: T/ M$ y6 k
0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码 / v+ E1 W( z. y$ B/ u7 a) L# ^
5 @/ v" r2 n4 K& l+ I* H! t. d7 u8 v, D8 }
, _% {6 f: b% W& T# |: u7 ]* Suchar m,n; . G% |) q. G3 G: v. ^9 H: L$ S0 i" b
uchar code T[49][2]={{0,0},* j+ h+ }0 {9 @1 l$ L7 w: x
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},
$ }4 L5 R2 A6 P0 u7 l{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
# I/ Q" d; F4 Q: L{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},
0 b+ P7 O! w" r$ E7 H4 g{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
6 z( a6 _% F1 z$ Y6 Z{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36}, {! T1 \" p5 z7 M
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}+ x. T$ }! A2 J$ P3 c2 I* I; o
};4 x; N+ A& k" o$ d
uchar code music1[][2]={{0,4}, //两只蝴蝶 ; z1 M: n6 T3 o, S, 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},! E: ~/ |3 o4 |; |
{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},
; y9 _5 R$ F, w6 X& z" m5 ~1 y, j: c* q1 {+ r- E& D+ z6 y
; v1 z, w7 p0 Y# _
{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},) d. Q$ [$ |/ z3 e7 D/ {! \/ v8 |8 H7 i
{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},5 W% i: U- ^ f, _
{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},
# n: R8 N- Z" B5 a& V{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},& N" o: Z4 c8 L, p: q$ a$ i7 [
{0xFF,0xFF}};2 u- B) O% \; W% {! E/ K
" p. I6 w' K7 F5 R( p1 V
: |6 X, M, X3 C/ N( z- D4 B9 F
3 ], ~* o9 ^9 E' P$ ^- a/ j1 d: R+ Y) y+ m. p
uchar code music2[][2]={{0,4}, //生日快乐% L6 y/ W3 X! g$ f. J
{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
! Z7 B i" ?+ C2 ]+ y{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},
0 u0 w# q- j% z, ^& ], [{0xFF,0xFF}};3 N6 l a/ h+ S* X
3 {2 n' w) Q2 j; }% L7 _
4 K: U/ ^! @1 \/ b" p; a0 K$ X
uchar code music3[][2]={{0,4}, //爱情买卖
$ P$ ~1 t1 [4 M( v7 }" U{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},* x( v3 @5 ^ U; g! U' `
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4}," e1 q; O U! H
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
& Y0 K8 X4 {* m* y{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},* o* y, ?* P* a
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},/ `2 D6 A5 d, L5 a& g
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
: E. [7 c1 w0 `$ N) {- H{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},, i5 W# i' y8 e' f0 @
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
O3 p n. U K/ k! m{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},: E1 c' P3 N# z+ F, }
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
, o% m% F5 o( E( _9 K$ e{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
1 C/ F6 [" c* m{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},0 n+ S- y% m, b* T
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},' N0 p8 P4 i4 x
{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},* T( t' t7 k, T1 V8 X Q
{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},
# z1 O' @! J, T{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},4 J% {+ e: L% V9 b. v3 {8 r
{0xFF,0xFF}};
+ X/ K P! u x5 g; lvoid delay(uchar p)
' j2 O# I$ q4 ]6 X{
0 Y3 k( y7 R) O s2 \ uchar i,j; * o r) w/ k. e! u" `. T- _: ?
for(;p>0;p--)
% A, V. p8 Y) `0 r! v7 z for(i=181;i>0;i--)
) _' R9 u; @7 m& C for(j=181;j>0;j--);. T/ Z4 H% a8 }$ q: L) j6 Y* s" f
}
5 E$ ` W" `5 m6 \% C8 u" I3 \
2 E7 _5 U( G8 P4 i1 S; R
6 D7 L# h* k M9 F3 jvoid pause()2 V, h) i2 F# G
{( l2 N, _* j1 u5 K/ h7 n8 |
uchar i,j;
7 ^+ U* o8 r: r for(i=150;i>0;i--)
, K% K+ z+ z, ?9 Y2 J0 m, T. @6 ~0 ] for(j=150;j>0;j--);2 [5 m, H X6 G
}* c0 _% Y% i5 x
3 W+ l# s; d0 d6 M5 G3 u v4 H5 y6 ^# s4 s4 z
! r" ^( t! Y' `9 I3 o. ?$ Y
: D+ o- \( O& D$ N
/***********************1ms延时函数*****************************/
5 Z: q$ ~; ^& k8 f7 v- c$ ~; v: qvoid delay_1ms(uint q)' r6 X n' ]4 ^2 C) m' j
{
/ J/ c% `- {) F, g! a# v8 k uint i,j;
. m4 Q2 |1 e+ k: C3 d for(i=0;i. Y' t8 H' `' j! I* o; P- X
for(j=0;j<120;j++);
+ M# J/ f h( c) b. @}. b- B& g& ?$ N
: L% ^* ^1 m% s% ]! t
& h+ n$ f& \. F' }" e3 b. S/******************按键程序*************************/
. e& Z4 s6 L" u0 w0 _) j3 Duchar key_can; //按键值; E) {0 r7 P' H! i; c# V% \/ Z
7 M* j4 A( g" S( E! tvoid key() //独立按键程序. C. g: \" t9 J1 J
{
9 t' {3 y( ~& n: q' k static uchar key_new = 0, key_l;: O m$ a8 W) ]- u- r, `
key_can = 20; //按键值还原1 {$ w, Z5 h6 [7 X: a- r
P1 = 0x0f;- e6 m% h( G) X$ W( W, n% `5 [ S
if((P1 & 0x0f) != 0x0f) //按键按下* f/ C% [, u& p) e
{: x) v! j0 v% q, B. N
delay_1ms(1); //按键消抖动4 O i' n6 }2 ]- l2 }
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))/ q( Z. Z& y$ t' w
{ //确认是按键按下
: w' m& Z4 V' P- [$ a) C key_new = 0;# j1 s$ T" b1 R! a& i3 f8 e
key_l = (P1 | 0x0f); //矩阵键盘扫描/ [4 ^0 `; F/ J- R6 o2 d3 n
P1 = key_l;5 F+ }! M% s2 g
switch(P1)" {: S+ B, `* {2 R
{ " g( u4 P" Q+ m1 C7 y+ A
case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 ( f% t7 L. R. t# x- h; Q
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值
[# D4 A( ~( R- D case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 ) |% J$ y6 N( G7 `) d
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
0 [/ Y& T, ~2 j& D J9 b' C& M& {! ?9 U! d& {/ P
case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值 , s8 o4 v0 G; ^ I& ~- {
case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值 1 [- f5 }. x; d7 P
case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值 - T N0 t5 S Z" T
case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值
8 x. ~% ^% y! i1 R3 q& o . t) \- W. @& k+ c* v0 e
case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值
' H6 d6 K6 }1 V case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
: |( c2 l& j( D" r case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值
/ s. `* n6 l" O4 t$ o4 Q( T case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值
6 s& H5 |' C3 Q W& y1 b+ m* h( _5 \1 y+ R2 S
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值 # D/ t- m- N, P+ c% Q7 q# W
case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值 0 j" P, a7 n8 _% m7 f2 w
case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 / g. K5 [1 b S# V+ M4 v; l. P
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值 . @+ |8 p5 v8 g% W% a7 _
}
" i5 d1 D5 d4 ]/ Q% B& R y P0 = smg_du[key_can]; //显示
% k! K& G. A2 {, D" ]5 G- }1 L3 g while(P1 != 0x0f)2 B% t) V" D8 Z, S, {$ ?0 |' X; ]
P1 = 0x0f;; z( f/ x! J% t' B5 Y, ~
TR0 = 0; //关闭定时器
5 E: S# _, a' }# i# p* _+ p }
6 @' b, U$ U3 o% L: L2 g1 z }. [' F7 e& K0 Y4 G$ c: @1 c3 j7 s
else //按键松开
. s9 G- ~' N. m& V {
4 j* k* q0 f9 j' S P0 = 0xdf; //显示小数点
- c4 S. t1 s4 d) { key_new = 1;
2 o8 f1 T- B1 `/ L' n, G }
& P4 v2 B9 ]: A5 f; b8 P
[% v8 H" p2 }2 n) k6 B, X! v; \' a/ r1 |- t! g+ ]
/*********************歌曲播放*********************/
1 Z' A# i2 u; l6 Y" R. `6 g K1=1 ;
5 m9 o {3 j, E D if(K1==0)' Z8 \. R& _. Q6 A0 s
{9 ~7 |* _+ P% ?: g
delay_1ms(10); //按键去抖动2 B- Y4 W1 ?" O" M1 J5 L
if(K1==0) g/ Q- r% U- I
{
! |' P2 G4 n1 r' V+ s num=8;6 o& K1 n# A$ e1 H$ D
// P1=smg_du[num];//使数码管显示该音调的字符1 z: z( k9 N6 M1 @4 Z/ w
flag_en ++;3 R6 {5 \+ m' a" [4 m% v* }9 ]
flag_i = 0;( ]6 j! b" V5 y3 {$ t2 M
if(flag_en > 3)
% u# }! ~7 r+ D* A( C {6 { {
# ~/ c( u+ D$ K$ Y1 w+ m+ w flag_en = 0; 4 N" [6 t q F& M+ \
TR0 = 0;
C$ w0 n( Z: K/ H }
) x- W$ H; S$ d/ G+ M: U; { while(!K1)* b- z* h( m! q& Q
{
8 i# d" U- N' o' c4 ?, @ u" j }//使蜂鸣器发出相应频率的声音;
" N2 G6 [ F/ E' J. V2 @, _2 c }2 |+ i* t) V v4 v, r" {$ D
}
$ h# t( U7 _+ C5 }( `- E; ^/ ~}, H6 [( ~* F3 \$ w. L0 _+ Y
/ ]2 k4 V% m6 f) m
1 `9 c, W' E8 H) o# \& v0 U( K- U, h4 S- o$ p9 X
; ^& s2 h) J& U; F( e
/******************主程序**********************/
# I9 r7 w" t5 `! j& ivoid main()0 `: R! J% F8 u7 g
{ 5*++++++++++++++++
9 y3 x) K9 V7 J$ }$ P6 g P0=P3=P2=P1=0xff;4 T) H- i i3 F
; W. I! R6 _% E3 ] TMOD=0x01; EA=1; ET0=1; //定时器0初始化; g9 i! O# g. n
while(1)0 H1 n# \+ q: C3 ]; D
{
S F( \& y3 D6 C" Q. C P0 = 0xdf; //显示小数点
v: T# t# y, c+ i3 ] key(); //按键程序
2 p! l% k; ?+ `, j& p if(flag_en == 1) //爱情买卖
3 L% ~3 A" h! l7 B6 v, y4 _ {2 T9 L5 g9 Q( ~" x7 u4 q
m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
* d2 t; o2 E4 h3 k P0 = smg_du[m % 16]; //显示
- x& {- \5 P0 C3 ~# l if(m==0x00)
# ~$ k' l4 X6 R) e0 p% { {
9 @& a/ i/ U4 h7 f9 P8 C TR0=0;
9 f$ y, u% S" {( T; n beep = 1;0 Z; J" H1 j0 ~* ? Z! _" {
delay(n);
0 ^5 }$ J( q0 \/ z. W, ^ flag_i++;; r1 L, }7 c3 S% ^5 M3 X; {- g, ]
} " I6 S/ J) Q# p9 t- Q& M9 o) H
else if(m==0xFF) //放歌结束
, h0 \! Q$ C' Y4 e* N {: }( G! G3 `, G" U( d5 H, N1 b' G% z
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} 0 x! Z# k! R# }: Z: \
else if(m==music1[flag_i+1][0])
+ D h2 W; ]/ @2 _3 ]5 \ {TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
4 D, {+ ? {. U else + c5 r: C8 e3 H! q3 s* W, ~
{TR0=1;delay(n);flag_i++;}8 a- V* V2 y* n( G7 z
}) }# t" S2 H$ @3 e2 E
else 3 o! E8 A4 C& P# Y. D0 F g
beep = 1 ;& f0 l7 G7 N/ [8 M5 {
9 F$ q6 i1 `$ T. x {7 ~3 E! a
! d3 Q( e" ?; h) ]
if(flag_en == 2) //生日歌5 l( m. B, I6 k3 |# K
{0 P {5 r+ _$ o, K# J+ K* P8 l
m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 3 {# [& v: p$ O- ^5 Z4 f
P0 = smg_du[m % 16]; //显示
2 ^* }5 \2 _7 J7 K3 ? if(m==0x00)
, C) h: _! v" V3 c B {' F4 [9 g8 Z' M. g# G! ]) d
TR0=0;6 `# s9 B4 ?. e* k9 P
beep = 1;: c2 A6 T, {$ i' M7 f- l
delay(n);+ _3 L. {% _4 C( o/ n
flag_i++;
9 u7 l6 v* I- D& D, A" q* i* F( z( Y }
2 E- I/ ~* _% D: d* C else if(m==0xFF) //放歌结束
- Z& A# k! F% `7 e {
0 d2 x1 F- B+ ^" s1 Z4 I TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
' a% q; Y* }$ @) M% l2 P+ K5 n else if(m==music2[flag_i+1][0]) 3 T% s' b: j1 a- ?. s, l
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }8 Z/ ^1 O( j* i" r
else" ]3 B9 g7 v1 N: q" y) @ R8 a
{TR0=1;delay(n);flag_i++;}- [ j, ]8 B s
}
) d' d" {% b, U* N4 _+ |8 V+ z% e else & e% m. I# `4 ]3 w6 Q: h$ [0 m
beep = 1 ;& K2 P }" R0 a
. m0 H7 v" N( \& o* d, f
. g# e. K- @3 X O/ ?
if(flag_en == 3) //新年好
3 N( N9 m' j: a! @ {# H8 U! @ m( n
m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 0 a% {! |, D: p! B
P0 = smg_du[m % 16]; //显示7 T4 X0 F. R8 h" ]3 |! x
if(m==0x00)
/ z0 y- R3 s; e$ ^ {
0 p- k9 m! m9 y, Y& A TR0=0;8 w# [% m% ^; A K( c y# ^8 E
beep = 1;' K. R4 F) I1 h% d$ v7 V
delay(n);0 v; J: s( I& T- s$ |) M
flag_i++;2 g, \/ g- R# I1 c& [- w. j
} : x% ^! S5 u% @
else if(m==0xFF) //放歌结束
- _9 z9 \3 I: U" n1 L" u {5 X4 r/ W/ }. o5 T3 s
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
5 R" m5 y3 C" e1 W* W! u+ ~ else if(m==music3[flag_i+1][0]) 8 n! [; P) `; w) ~; r; h! k, g* F
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
& F1 B6 R$ l8 c) w* V3 g- r" P. | else
z3 a7 I, H$ t; C. m5 i {TR0=1;delay(n);flag_i++;}
% c' y# @0 x- n5 [ }
1 G5 ^; z# e" c4 ]1 L else
3 |7 o$ X/ y- B& Y# q+ H beep = 1 ;
2 D3 `' H8 m5 q5 L2 {& | }$ M, [: J! T. w+ c
}+ g* x" y* |0 C/ V3 L
2 }# d5 H# K* h! ], L% Y
& s0 c5 p! A- b4 V2 p; X, `
/*****************定时器0中断*********************/ ; M: ?, [7 [0 A. c% O3 z3 L
void T0_int() interrupt 1! O1 v j4 n' b" o6 P! [
{; m2 t+ B7 O# W
beep=!beep;
7 A0 b/ U+ k4 K& ~1 v TH0=T[m][0];
# S: ?6 z0 v8 @1 U7 X, [/ \3 c6 b TL0=T[m][1];
( g' ]" ] O$ \9 z4 U# g' B}
# P! G5 D' ?7 p" e# t |
|