|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue; a5 W4 d( ^! L0 T: g f' k
主程序第一行,不明白为什么会错,咋改,很急,求解
$ r+ ]3 j# c! V0 J1 J5 k$ f
% g0 d! b D4 U5 N% C2 t4 K #include //调用单片机头文件
/ Q/ R9 a D z( M6 T7 ?#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255, Z3 O8 \# T% a: S: _- y/ M
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535/ V6 P e2 ]/ I8 T/ |/ m
. F) t( o9 x) K+ M7 P( G* b% k: X6 e: r! @5 z% U9 P y& s' V
***it beep = P1^5; //蜂鸣器定义
. A* r2 j5 f& F' B( C% N: e% I+ w& `! a
$ f, @0 u, @- B3 U1 v+ Y
***it K1=P3^2;//音乐播放按键$ f5 r$ N" G) {; l8 U
uchar flag_en = 0; //开始放歌
( m" h$ x+ j) G# B6 |& Wuchar flag_i = 0;/ v! n. Q) t+ _' v! T
& \# \0 p Q1 B. u2 a
9 C7 i3 p- r( C' s- m% |uchar num=0;//初始化num,用于控制数1码管显示的字符; s" ], F0 g3 [" n4 V! r
& Z6 W8 O( o* ^. f
* r# v" F/ v; O# q& B
//数码管段选定义 0 1 2 3 4 5 6 7 8 9 + {, J0 G2 P( `* s) ^
uchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,. b8 |9 K4 w3 w
// A B C D E F 不显示
# q- g I: U, ^! C7 d3 V* l 0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码
! x* v/ h: Z9 \0 ?) Y9 U$ w- ]
) S" H o" k" f& b( `, f" d9 z g0 \2 N7 s
; M4 T; t* E: H% q/ K" E
uchar m,n; & o4 `2 M" D. s. c
uchar code T[49][2]={{0,0},5 I( ?& i# {5 ?: k6 `/ c* m" f
{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},1 Y. r0 k* C( @) k/ ^' q
{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
% W/ z7 y! [' v. S$ F{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},5 i) l8 q0 ^% X
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
+ ?2 S) O3 l- s9 Q' u{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},5 [' g5 z8 a* z' z0 p$ h" n5 N
{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}9 g! L4 V# m) `+ b+ d
};% F$ {. a4 M( r
uchar code music1[][2]={{0,4}, //两只蝴蝶 0 z& L1 Z7 U( D4 f( a/ n6 @
{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 N/ k! |5 @- H" }6 F
{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},) N K" Y" t% t8 p) c3 g! B0 A, k
, D) o' U# N6 a
' \1 F; k q0 u B* o& L{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},& r5 L( }/ B9 f& ~% |! j
{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}," W4 M& m3 z& ]0 ?
{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},- J5 T6 P* i5 y! @/ ~# [6 p7 w
{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},
* Y Q7 ^% g8 v( \6 v- N* j{0xFF,0xFF}};
# \1 U2 q" |0 w( p5 a: Q4 c+ N9 j
: x4 _3 q& Y' m. a8 y) }, _# Z T4 J0 F, W# b, k" J+ q
# V* F0 A2 j9 ]9 s$ N
9 _' f4 d. l3 b# V% O' v5 _! o& Z
uchar code music2[][2]={{0,4}, //生日快乐
, \& z/ J* |+ B! ~( {3 y' N{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},9 j. z0 L8 q% g. Q
{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},
- v h, P% Z2 P6 D' M X9 c; P5 @{0xFF,0xFF}};
2 I1 x, |9 d; M% S' R& S
/ D# M6 B5 v; c1 t6 J* E4 }+ c' f/ s! H5 E5 o# Q: s( ^: f9 T
uchar code music3[][2]={{0,4}, //爱情买卖
1 e. O) S( D& {3 ?8 V n6 x{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
2 z: [0 ?8 R' \+ a{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},# Z7 n" b" b. v+ y! G/ N
{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
5 i1 a- W$ ^; H0 f: U$ V+ f{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
, L3 r2 J1 [9 Q, n# E8 P{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
/ M% ~0 H, V; X6 _{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},
- L5 F; C; O! S( h{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},6 g: o2 S( i! e* i+ a4 {
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},
- o7 ^6 g; M: z/ ]* r9 [4 n, M{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},) C& t! g/ h& b I9 q
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},+ q; K3 k, n1 Q- R0 e# [
{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},
' u1 _% b2 p1 s9 h" f5 W1 \ w0 l1 g{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},
% R3 N4 B" O0 e V4 |{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
$ ?- X3 b# f, C7 k{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
5 z" y" c! q) M, P( A* I{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},3 T3 e0 n4 c6 q9 m% K0 h Y
{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},! F2 _6 L: d i- x3 c2 t2 n
{0xFF,0xFF}};4 O" e. M v5 n9 k% O8 _6 H
void delay(uchar p)
- x, ]! b {- V% L" E{
6 ^, h4 J! R5 q- a uchar i,j; 3 R* F, E& D+ n# J
for(;p>0;p--)
* q; N4 K. m: \8 q' E for(i=181;i>0;i--)' p7 e4 r2 b& S2 r! T& {! G
for(j=181;j>0;j--);
( ^. O$ C9 f+ D! o o0 N) C}
5 r- O/ |$ i% O0 Z9 J( ]" W' s6 Q$ C; t
; c: B* m Y/ U! F, J9 R) H+ u
void pause()
+ Z2 e" a0 M% B' \/ X{) i$ ~& d1 {6 z) T/ y# h- {( k9 B& d
uchar i,j;: z' @% u; N8 q3 T2 o
for(i=150;i>0;i--)
& c0 M" A7 X& G" R# M3 G for(j=150;j>0;j--);
4 V) ^- n+ G* f! |1 G9 ~/ S}
# |- P- x; s' S6 J+ ~' E) g! W
: J% C* ?& R' S" ^. |' t% g3 [' ~
( R8 m0 o" K7 M) T4 P2 ~9 b
! Z" c3 O$ U& o& z0 f0 H
* K# A8 ]) u2 y8 ?* ^3 W/***********************1ms延时函数*****************************/
$ D4 _6 [5 N) C2 ^void delay_1ms(uint q)
- Y. c9 d# s# j# v+ a{
8 L: A+ l& g( C1 G5 N2 c/ R uint i,j;% Y* p7 [- @% Y8 S1 W% A3 i
for(i=0;i" m3 r$ g: M: E2 x2 j, F7 \( Y
for(j=0;j<120;j++);1 f. w8 T* l# K6 B
}9 v! j' e6 b. |3 | e* F
9 |- u7 D+ }2 J# c# C% j
2 M6 c& P+ O, m/******************按键程序*************************/
% o9 ]5 O* z) Q: y1 b R0 Y4 Wuchar key_can; //按键值( }6 M7 }# I; R7 e% A9 e: J* s
/ j* K2 c+ [/ W7 W5 Y6 b( [
void key() //独立按键程序) d/ S. x" G$ y: f% a9 e2 e
{
0 q. ^1 d0 u4 m2 O- j static uchar key_new = 0, key_l;
0 d. M1 Q6 `" C+ s key_can = 20; //按键值还原
; r0 |* d# I: j5 X" Z P1 = 0x0f;
p( r3 O0 P; v1 U( ?# U if((P1 & 0x0f) != 0x0f) //按键按下$ j5 \0 @8 k2 B& s
{
5 _7 |: W8 e$ R' d# P) K( M delay_1ms(1); //按键消抖动' X# O" i8 n( z9 S
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
9 _% k3 ]6 t; ]/ W { //确认是按键按下8 y, l: ?; A& v* S8 ]6 \
key_new = 0;
& I C# z, i$ I' Y: }4 O0 @+ D% h& ~: z key_l = (P1 | 0x0f); //矩阵键盘扫描
6 |2 \4 u8 ^5 W+ K& A: E, K+ K2 a( s P1 = key_l;6 V* e& n6 g0 N5 J$ @" @0 H% X
switch(P1)! u3 I, Q+ x2 a+ h& Q9 E4 y
{ 1 L9 p5 e, F) m' |/ w) E. N" A4 ]9 X
case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 5 `" _1 K8 ~6 t Y
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值
& Q! b7 s7 q3 J# D0 W3 e case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 / y. \' A! n/ V, q
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
3 p! n3 D3 h" O9 }
. w- C0 \1 ]$ r* O5 f. S# ^# o case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
: p$ R; Q' d) F* }% w7 K7 z8 h# I9 h; A case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值
5 @+ d( [$ y+ V, ~$ L, M case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值
: U6 T5 }1 o0 {0 W0 q8 s% e case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 : @' D" l, p' e
3 T, w0 R0 z3 s6 T6 ^, F' ^ case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值 # C% p8 X) m+ d3 }5 B# y* B' z" R
case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
. F, h7 \9 ]1 F8 u" y h case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 9 v3 h* g6 R2 m X8 L& ~
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值
4 F+ i* ]7 L1 b" |4 c! y * ^2 x( C" a, ?* J8 g% V% b
case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值 8 u+ V$ {, j) ^6 m. I6 \
case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值
6 P" A) Y( w6 P) u2 f case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 " v3 z3 g! \9 R+ ^! v1 B
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值
+ ?/ z1 C9 w& d6 e; X } ' X' S; o k3 y$ U1 A' W
P0 = smg_du[key_can]; //显示8 F" m8 r! l6 z' ` B0 r9 J
while(P1 != 0x0f)
2 Q6 h1 m$ Q$ c1 f1 c, S- Z P1 = 0x0f;8 W# m; m7 I. M" P" e+ \4 ~3 r
TR0 = 0; //关闭定时器' O+ L9 k. M& \
} " f% R' c$ M' N! B" n1 c
}9 {" I- L. ]* @' X% h0 o/ ]
else //按键松开
& m" g6 S: h3 x5 k1 z {" [ v) y) T j
P0 = 0xdf; //显示小数点 S1 s6 R6 [% R: Z9 [
key_new = 1;
$ D3 P+ j) x" W1 D! x& C6 c }
$ ]6 l! O1 L1 J
7 K/ C' \$ b8 Q; I m' [# @$ L
9 M# r( S. C! }. P9 g" q) r: T! O. d/*********************歌曲播放*********************/6 d; z* I ?% R3 h8 s; G8 J
K1=1 ;& P4 o# n* k1 `% M- ]2 `8 [
if(K1==0)
/ V/ Q0 C# K& [ {* Z. h- K3 V, ~
delay_1ms(10); //按键去抖动1 U1 u" ~: j4 w$ z1 ^$ Y
if(K1==0)
& S( k0 q8 c0 F4 R) [ {
! @) R! c( ?5 y: ~& @! x num=8;
& M) |6 d* H9 u$ X* ]// P1=smg_du[num];//使数码管显示该音调的字符
6 o! C! p" N1 e+ k" l5 D1 y flag_en ++;
( ]" Z3 _& d; g7 W! o( U$ I# l flag_i = 0;: r4 ]) q$ D) c9 w8 o3 Z
if(flag_en > 3)
2 Y+ I5 o! c F& x {9 x+ n/ ^3 S. _' i2 x" K: H
flag_en = 0; " c5 _2 J) g1 e; r
TR0 = 0;
) u* O! x2 W$ u C }
: {' ^3 B- z# R while(!K1)0 t2 K8 W5 @ p4 _# t! c1 ?
{
/ x: T' Z$ F9 B+ I6 z) T; m& {" l7 x }//使蜂鸣器发出相应频率的声音;7 q" n8 K! X$ X4 F* Q& @
}
! S: A, w# f' i }; m0 M) z. [# E, p0 \5 M( C* c! x$ P
}* q1 x r4 q5 G+ p
- Y+ @7 b1 [2 N- F: T" }' N; |, K
" V3 ~0 O9 Q7 ? f
1 v: W! {7 p: e& `% a, r+ n6 Z2 S) U. F: m4 p. T. M# m8 K
/******************主程序**********************/
! D2 W. \4 }1 C) F' Yvoid main() e" K5 f- a/ ~# ]
{ 5*++++++++++++++++8 Y$ ^" ]# O% l: `* x
P0=P3=P2=P1=0xff;2 y: N+ v* x' f% O5 U' z
3 m0 a! }6 s6 K+ S
TMOD=0x01; EA=1; ET0=1; //定时器0初始化$ j, c2 C, C. x1 ?- d( { x; t# Z
while(1)
" v9 m5 q, ?* h% D. c {" n; ]& e: R" Q" t/ M
P0 = 0xdf; //显示小数点
! c! }6 y" \. W$ p j% k/ c' ~ key(); //按键程序 j& f* X2 L8 K1 J$ F
if(flag_en == 1) //爱情买卖
2 w) J2 H6 A, Z; R2 E4 P {
- N3 x! C; T# u; i0 m m=music1[flag_i][0];n=music1[flag_i][1]; //放歌
5 ^3 e* S2 {$ f% _$ y P0 = smg_du[m % 16]; //显示
# o7 i2 e- J; D" [6 o8 ] if(m==0x00)
- l: P" q( i' n1 \+ l4 u- i {
! J! @" j* Y! K ~/ {: U( j TR0=0;, W2 i# l4 j8 S6 V/ l3 e" R: t( N
beep = 1;
' t" I' D4 m2 ?! Q; s+ G) I" C( D delay(n);: h$ h5 f1 x9 \. Y' N
flag_i++;) P5 ]; ]- }' D5 ?( a" `6 N& r
} ( P4 D' v9 b/ b+ s$ C3 z J
else if(m==0xFF) //放歌结束
$ G; f1 O" \% h; d% O7 K {0 e8 r+ w, R3 @+ U! w
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
& Q. S+ |! \7 `7 G4 U else if(m==music1[flag_i+1][0]) 6 E, X- N8 k- |9 I
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; } w6 y1 k2 ~! p- z
else
9 |/ B' {" {2 r( U8 y& } {TR0=1;delay(n);flag_i++;}' O: r3 A8 Y: P5 R7 Q* X$ S3 g4 D7 q
}; X2 ?7 L" ]3 ?; K. m4 y3 v% l. ^
else - m. m+ v% H) O5 ~. t' @
beep = 1 ;
7 H& @. c! W" V) U$ J$ A
1 q$ Z. |8 j/ F; u! R+ |
. f/ T* E) r, h- l: ~) h* G if(flag_en == 2) //生日歌
- Q m5 W" |3 c6 e* f5 v' A {
! ^& ~9 ~' @, u m=music2[flag_i][0];n=music2[flag_i][1]; //放歌 & [8 t2 x" d7 a* \$ ^2 U6 u
P0 = smg_du[m % 16]; //显示. K8 Y! G8 z# B- X- o0 W3 L
if(m==0x00)
. G/ n( \0 J9 L3 X0 a/ ?; I {: V7 H/ {$ d3 \
TR0=0;
: M% o2 H0 c1 [) G beep = 1; {& R- n$ Y# r* p ~
delay(n);
( ?0 S3 D' O+ ` flag_i++;
2 a7 `* j+ T: I8 }5 U) K2 w* t% [ }
' ?/ l# o5 V# ^ else if(m==0xFF) //放歌结束
5 A$ v8 @% I4 {" u {4 z* Q8 S4 I, k+ h
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
" D/ O k+ P5 _+ t8 C! ~1 e else if(m==music2[flag_i+1][0]) ( X* a* q# P; L9 F" {
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
( e+ M2 u& Q: r$ \% [ else
. M1 A, v2 M* m( l9 ?9 | {TR0=1;delay(n);flag_i++;}, y6 |7 ]' o, }: i
}0 w3 A5 l% D$ @( {7 B7 f7 |3 u
else 6 n' M) J* D. | x0 E& }
beep = 1 ;
! F# r. m+ x: a8 d& @( f
2 y6 Z- K- @9 v2 D: N4 `* P
& Q7 y. k. g. I# q4 `5 s if(flag_en == 3) //新年好$ c; V' U5 N& E
{
5 V* C$ p+ ]; A- Z; ~& Z m=music3[flag_i][0];n=music3[flag_i][1]; //放歌
4 s( `9 u- B2 s P0 = smg_du[m % 16]; //显示. ]5 `; M! q, Z5 i4 M% z
if(m==0x00)/ q. V; N# q9 A7 p& i1 K% _
{
* d0 x# X9 K/ i1 u5 l TR0=0;# P0 m' \7 t+ }0 i% M+ d
beep = 1;
5 n5 W: v1 f7 z2 h X- ^7 t delay(n);$ E8 V" ~( r/ ?1 u6 [) K. w
flag_i++;7 m6 U3 g2 `' m. f9 a" z' h
} 9 v0 M K7 |) m7 l
else if(m==0xFF) //放歌结束 [0 A) a' M4 ]. V ] | F
{+ k4 b) V7 a+ G: z( l7 F
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
) U7 [/ ^% l$ _- W else if(m==music3[flag_i+1][0]) & |0 f! W* h( }% G6 C
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }
) e! K! H% b7 R7 T4 M& @ else
6 ~+ | n* V9 R7 F( X {TR0=1;delay(n);flag_i++;}
; \: X$ s6 x- z% ]1 U }
8 P& k$ b( |, x" B& S else 3 O: A, ~( E) F& n3 k6 }. r
beep = 1 ;
t0 {" U4 i- m" V3 @# N6 @6 b }9 @; e8 Q+ |. r' B/ k0 h* y
}8 K8 q6 W* h) o3 z/ c
7 E# [7 q- O& W# n: j9 O
, B8 X8 t: L: M V5 I$ q
/*****************定时器0中断*********************/
0 K; C- I7 R# |* vvoid T0_int() interrupt 10 c3 I" s. [/ y* ~; {7 }! K9 w0 C
{( b6 z6 ?% D& o/ ]) a2 l
beep=!beep;
# v& o3 N6 ~0 ^4 \8 v# I) W TH0=T[m][0];
& S7 i' e- X6 m/ ?& t+ h TL0=T[m][1];
2 Y$ N, L; ~2 W* G) O" u! u}+ N6 k2 C5 x3 n3 \: M4 f, V4 u9 a
|
|