|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
电子琴2.C(163): error C187: not an lvalue4 Q( g8 \( ^) ^& H+ ?8 U
主程序第一行,不明白为什么会错,咋改,很急,求解
- n7 ]3 {; O0 V! L* z, E r5 n1 a" _. I; G! f
#include //调用单片机头文件
( M( G2 v# s) |0 K6 \3 t#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
) Y% c6 \1 w6 J2 |8 j; b0 t) ~#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
% {7 X; l3 Y8 g
" q2 P7 e, v% q* K
/ y( l0 i* E; T$ u***it beep = P1^5; //蜂鸣器定义0 ^, n$ _* s# L% D
# W# k% s2 @& o$ m0 X% D% K$ }8 R
o7 I. H$ `- L. H! O. z7 v8 e' C***it K1=P3^2;//音乐播放按键: A0 G. i& {- e5 C
uchar flag_en = 0; //开始放歌: \* a2 f+ r. g* s, e+ ?
uchar flag_i = 0;
. x6 I: E1 F! t
% ^" l5 P5 ?( y p8 i2 o, S0 }1 G& ^% P1 }1 Z0 S" E
uchar num=0;//初始化num,用于控制数1码管显示的字符* G5 B0 U8 L" P5 B
6 A( Y ~" O! q1 }2 G
; Z' n+ _& y/ ~2 C* X
//数码管段选定义 0 1 2 3 4 5 6 7 8 9
9 _, C2 s0 N3 \ V& suchar code smg_du[]={0x28,0xee,0x34,0xa4,0xe2,0xa1,0x21,0xec,0x20,0xa0,
) s6 ?& A% e+ t// A B C D E F 不显示8 ]1 d( A# T+ P; d# w9 x
0x60,0x23,0x39,0x26,0x31,0x71,0xbf}; //断码
4 I1 M0 n& g4 m% |$ E2 u* N) t
+ I7 @+ M3 n' |! O9 C! z0 \
' g; m* T2 }6 W8 k: { X9 E5 ^! j. R, G. Z- M
uchar m,n;
- v! ]" {: B# U8 \" |( n! T- ]- ^" m2 Huchar code T[49][2]={{0,0},
+ \- i3 _: K' Y" w# i; p r* V{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},
; t" y C0 Z/ e3 ?7 I2 I" v{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},
0 @! j" v2 q0 c. f{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},. ~4 H( X, [2 N/ u6 Z; T% o( W
{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},
( i0 ?; R, u# |1 C{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},
6 t! s6 j8 m# q# W# U3 a# D5 A{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}3 ?0 T8 |* D- x; K( v! m& P4 r7 D
};) K- Z4 J' r: J/ a) S. i
uchar code music1[][2]={{0,4}, //两只蝴蝶 ' _, P6 S. M! J7 w8 {+ ~
{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},
* x7 m. p2 a4 b) P! n' @) b{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},
' x0 _4 w. s C9 b p' m6 G
' L, q8 B5 b( u& A& u* Z+ `) ~
% b7 D6 Z n+ f: y$ c) b/ N{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 C4 x; B; V' F* W6 b6 U& Q& 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},6 g" t" V. l$ T& M/ T, d4 }0 T+ ~
{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 e; b* B" P1 j+ j
{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},
3 |1 o. x# T& x6 L{0xFF,0xFF}};
, |' X+ ]+ w5 I6 o3 C R6 g, t$ P* P
, ]8 |- H7 E$ a8 J$ Y
7 M$ g- Z# B* }: v9 u. d
' X* T4 }* D; ^) v: C
: E0 H! g* O, i( O8 _uchar code music2[][2]={{0,4}, //生日快乐
v& S% S1 P# n, g) t' o{17,6},{17,2},{19,8},{17,8},{22,8},{21,16},
/ _( x$ U$ N/ F1 o' k# 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},
: }- g7 ?! C! v. u Y{0xFF,0xFF}};
6 K+ C) S- Y) n$ k" }
% s5 M+ v5 l# }3 i$ {
2 M S" H* Y0 R4 Z: Zuchar code music3[][2]={{0,4}, //爱情买卖4 z) u5 r% p2 f: t5 Q4 }, b4 Q% B
{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},
4 ~6 j7 y. A9 L& j. d# ^{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},
; u" b, H [2 \/ r/ F b# e |{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},
, g ^2 f& m7 h G3 a" o9 J4 L' ?{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},
( @/ K0 @: M. R7 Z5 {- }* h{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},8 x# s* O0 ]) m2 r+ K7 b
{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},) K1 A9 g5 O( R! L6 q9 E* B
{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},: N! S, K8 [- }* R
{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},- ]9 C d' ^; l |8 b) K& X
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},. }4 ~3 Z& G) i
{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},
' G9 T5 Q4 }9 P{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},+ o- K. h* x" d% M! X
{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},+ n8 V. A" @! ?9 C
{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},
( o$ D% q; A1 F6 ~8 s9 N{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},
) k2 c! J, E; o9 T. J& V{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},8 ?* g" d3 I+ q G6 ]
{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},
/ u3 ^+ y) P5 C& C% Q* B- _+ K{0xFF,0xFF}};% R# z$ ?( w3 G( @7 t0 o- F6 Y6 x
void delay(uchar p)
. T; x0 L2 b- @: `- }4 F* H1 f{! [4 T$ S, i- f0 X" ~* V+ A
uchar i,j; 4 Z' s3 B" v! T$ h! Y9 @
for(;p>0;p--)
" }. T7 H" Z6 A( W& o3 v for(i=181;i>0;i--)
' Z, [' @0 U3 m3 n! S- D for(j=181;j>0;j--);1 {# v) Y/ L x: U- b# S
}
& `. j9 Q$ N+ \/ t( c+ b
* j: Y# C W3 H* L/ d2 r, j! t8 A0 Q- }+ t% l4 L
void pause()
: s. A0 x. f; J- ?{. n& z' Y: ~$ f
uchar i,j;
! P5 ~' ?% a5 o2 p% t4 K* Z+ u- k" Y9 J for(i=150;i>0;i--)% J2 h9 U: H2 p: V
for(j=150;j>0;j--);
0 @; E0 Z. c! m( e V8 J} l* J8 e! g L7 I
4 z& j- r4 N9 N
* g. }, [5 a% h* d+ l) s& ?# ]& b2 j
5 w# ~9 o2 H$ k/ X7 Y0 \" ]! S7 P2 f$ N& {7 S) K- @; R5 S% w, E O
/***********************1ms延时函数*****************************/0 F3 f/ Y) |- d
void delay_1ms(uint q)
$ J# r" V5 J0 l" H{# y6 Q9 a! U2 P3 h/ T
uint i,j;
) O+ H% z' k, [7 O$ Y+ e: Z) }/ D, m for(i=0;i2 y7 r' W4 P6 A/ v% T7 `, w2 P. q
for(j=0;j<120;j++);2 R! x' {( L g. Z" T, ^" ?
}+ D$ Q' d- H4 ?2 }
& E9 \. y; Y2 N2 t5 ?0 G, |8 ] h4 p4 k' _ Q) Z
/******************按键程序*************************/
+ ?3 |! D" e) I7 Juchar key_can; //按键值
# D h3 N4 n- E, p# c 6 j, _, I: @! f2 ?+ R, i1 O- ^5 l
void key() //独立按键程序
" g) U" @ Z9 S. G# V{) _2 A/ ^: f& @
static uchar key_new = 0, key_l;% k$ _& P" T1 K( b5 |. q- B; Z2 P
key_can = 20; //按键值还原
4 R& Y% r8 L( q: f& N! x! B P1 = 0x0f;
( U+ l0 \! }4 @; q5 F if((P1 & 0x0f) != 0x0f) //按键按下' \& {' ], Y4 H+ Y* K
{, I. u& l7 A+ f, W, a( v+ H
delay_1ms(1); //按键消抖动
6 a; i8 c1 U$ }3 l9 U if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
0 R" N, s/ r7 w, A2 g6 b# R { //确认是按键按下
+ [1 c6 P9 w. A key_new = 0;
7 G7 K8 Y- E7 a; y key_l = (P1 | 0x0f); //矩阵键盘扫描' x. `3 l+ {. o' _+ Z
P1 = key_l;" w2 P$ a! `3 o% b. k. m5 m& b2 H. j
switch(P1)
$ c1 n7 s! J! R# h0 _! S { C. x- `: ?, A; x3 R. z1 f) e6 U
case 0xee: key_can = 0; m = 8; TR0 = 1; break; //得到按键值 //打开定时器 5 q( Q, m8 W9 C
case 0xde: key_can = 1; m = 9; TR0 = 1; break; //得到按键值 2 |0 M1 D G' W1 \! g
case 0xbe: key_can = 2; m = 10; TR0 = 1; break; //得到按键值 ' _; z6 u7 e- t4 i9 Z$ T( i O& [
case 0x7e: key_can = 3; m = 11; TR0 = 1; break; //得到按键值
+ X+ X4 |( O& R. B6 P
3 g0 D5 x, @. m6 i# v/ E' @5 [ case 0xed: key_can = 4; m = 12; TR0 = 1; break; //得到按键值
- V1 O6 P* o- K7 p9 ~ case 0xdd: key_can = 5; m = 13; TR0 = 1; break; //得到按键值 + w4 j0 c _, a- e a% U3 F Q
case 0xbd: key_can = 6; m = 14; TR0 = 1; break; //得到按键值 / k) M5 C' h6 h2 _& C
case 0x7d: key_can = 7; m = 15; TR0 = 1; break; //得到按键值 " y) t) y1 b' A! w4 y0 k' ^
, Z; O; D" X* p( B case 0xeb: key_can = 8; m = 16; TR0 = 1; break; //得到按键值
6 h9 E" i) M9 A# F case 0xdb: key_can = 9; m = 17; TR0 = 1; break; //得到按键值
: D7 C+ f* g6 w" o, I, V case 0xbb: key_can = 10; m = 18; TR0 = 1; break; //得到按键值 U( W* N( C& Q
case 0x7b: key_can = 11; m = 19; TR0 = 1; break; //得到按键值
$ S1 c$ W2 Q. a+ }
/ q8 W- |7 t( `; ] x7 Y# j+ ^6 j9 D4 k case 0xe7: key_can = 12; m = 20; TR0 = 1; break; //得到按键值 V9 b4 l4 I2 _+ Z+ i# A
case 0xd7: key_can = 13; m = 21; TR0 = 1; break; //得到按键值 ) v6 ^+ f9 ~* ]2 [9 E! V g2 d5 G, X
case 0xb7: key_can = 14; m = 22; TR0 = 1; break; //得到按键值 # J: ]7 ?& l& V+ t! K N
case 0x77: key_can = 15; m = 23; TR0 = 1; break; //得到按键值 : B# _- k8 e) A
}
: ~% o# a5 }/ l) o$ I( w. {) a2 j2 p P0 = smg_du[key_can]; //显示, ]6 }+ Q. h! |/ Z3 H! e# A* N5 W2 ?
while(P1 != 0x0f)
2 j, o4 ^% M4 n5 C P1 = 0x0f;
: r' l3 h$ s( | TR0 = 0; //关闭定时器
6 r m- A U2 w+ e" ?$ a } 4 e0 I2 l1 M% n; g
}
) x( M8 s. N; _# \, v& U else //按键松开' Y+ r! T: ^* _- N5 ~) v( l: c
{
9 `5 s) y U ?! G$ {: k9 ? P0 = 0xdf; //显示小数点
1 N2 }) J* a4 U$ l5 M: O key_new = 1;
( m7 E' I* J- K2 \1 j$ r2 @6 j }. s3 ?4 n' z' k" v
4 i3 Z4 f+ P7 I( e/ X
( }0 [3 z) Z- r& d* p9 n& C
/*********************歌曲播放*********************// M( `" }' V3 @# }8 R
K1=1 ;
. D, L8 M6 ]9 Z7 e$ V if(K1==0)
3 U% Z, ?! u) X {
% `' @2 ~% w8 t# N7 Y) G6 Q: N; e delay_1ms(10); //按键去抖动' P+ q; \4 z+ V4 i& H8 Z. Z( f- N( z
if(K1==0)
/ \1 _ K7 s" [# _# f5 F5 C {
: ^: U* d0 K4 A num=8;
6 B, }5 b! `. w: B* ^2 R// P1=smg_du[num];//使数码管显示该音调的字符
; w& M3 ?. L4 T flag_en ++;2 u. P" c. s& G, `6 P# i: r& J
flag_i = 0;# r9 i5 ]9 P Q/ f# e$ }* l
if(flag_en > 3)* ~/ P. D8 Z) T9 {# t0 R) U: q1 I
{
8 n0 [) T; l2 a& W4 k: _ flag_en = 0;
+ b' W c J4 l" j TR0 = 0;
+ j; ~5 c9 X6 _5 h* {% ]" X }
4 ?0 J4 P! N% H while(!K1)4 d0 B, `9 O: y: q& p% d
{, C% `% Y) o: q) E' s
}//使蜂鸣器发出相应频率的声音;
4 V$ [" j0 {1 K }; G, D# D3 V) G4 m
}
: g* j- V/ D8 g$ R( g) X}+ |! P6 W- w: g5 I! l W% n
7 C/ e4 T$ D; B/ k& G9 g0 Z0 G
" b" |' T7 ^. t6 U4 C9 T g
?+ ]) A3 u) P( ~$ P
5 c; s+ Q) {4 ~! c# ^. G1 i/******************主程序**********************/ 6 q% u% M2 H, Z" _" Y
void main()
7 W6 r# g! c) q; o& g/ `{ 5*++++++++++++++++' P, Z. ? u8 ~8 ^& e7 M/ |
P0=P3=P2=P1=0xff;+ p% B& r& j* `2 e
9 m( a+ k1 f$ c TMOD=0x01; EA=1; ET0=1; //定时器0初始化
2 |4 x) B2 [ {+ ?3 N4 \$ n* d while(1). f4 b1 f+ ]$ K1 Q: `% A
{+ E3 w/ e# N: [9 O
P0 = 0xdf; //显示小数点; V+ |) h- c- h$ `+ z J
key(); //按键程序! q3 n$ q! s4 y4 a* P
if(flag_en == 1) //爱情买卖) S3 p" _' ^$ Y4 ^% Z
{
5 Z% i- K2 [" F3 b6 f {7 h m=music1[flag_i][0];n=music1[flag_i][1]; //放歌 6 B4 b5 d" ?. E% I: b. q
P0 = smg_du[m % 16]; //显示
2 U- }6 V3 z- M, d8 z3 U& @* q8 Q if(m==0x00)
9 l+ u4 d7 m+ f4 n {6 x& ?; q+ r- E! v9 @! z5 g+ H
TR0=0;
% r- ?8 R* Z, R beep = 1;& B% {7 b0 w. J* r4 m3 ^1 k
delay(n);) c; b# y9 a7 k9 S8 T
flag_i++;
0 B0 P5 H5 F8 u }
% \8 L- H+ q2 b# ]8 h3 }9 D- e else if(m==0xFF) //放歌结束
- V/ O9 J' o% ?! ]$ @5 G# p* F {$ q3 T' D* v9 `9 K* t8 m
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;}
3 N6 s7 g8 q; f else if(m==music1[flag_i+1][0]) % }: ~' b) _8 t# s/ E
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }+ p; T( A) O/ ~; E" J }
else / z% l: v& e. D& u3 y9 w. B
{TR0=1;delay(n);flag_i++;}
. ~5 ]( B, `( z; _7 J( m }/ `8 ?5 `5 \5 x
else
9 m% J: t8 z# k9 w- p+ I p. H beep = 1 ;
) i! P( t2 N8 l' L. t: q% f
Z3 g9 U4 s9 i& w( ]5 z" r! u, ?) P! b" h+ G% P: z; T
if(flag_en == 2) //生日歌+ R4 Z. L+ F: F8 A7 ^
{
+ e% e" i$ R* m m=music2[flag_i][0];n=music2[flag_i][1]; //放歌
- Y7 w# h* D5 P* Q5 } { P0 = smg_du[m % 16]; //显示8 |4 n2 B0 V Z
if(m==0x00)
A9 S$ A: L- w2 W1 X" d4 A {
* X. V2 T0 l. i2 v TR0=0;* @3 w. m) [& c
beep = 1;$ I" ^( f/ e( s' q4 S
delay(n);9 S% V- q3 u; `. z6 A0 f) d
flag_i++;8 J# Y# B' x1 {6 Y; Y$ t
}
: Q9 ]: L7 {! Q. V' }! N else if(m==0xFF) //放歌结束
( E8 |& w) b ?; _: O s, Q8 ?$ C! n {
; \: `( l# Y0 j TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} / {. v( {& s U( H
else if(m==music2[flag_i+1][0]) 5 l( t0 j- z4 S* a, a. f+ V
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }2 H5 [6 E) t& `
else
' r D* R% n6 t+ i8 [ {TR0=1;delay(n);flag_i++;}
' U! ~% Q0 S3 m/ f% E }$ N+ u; c, y k6 _1 f5 G {
else
1 S" j V4 G! x5 `. G- E3 ? beep = 1 ;- Q$ n2 x1 i1 F1 r% n3 Q
_" Y( B( ~' D b# V2 X, z( ~+ M* T! m' B& O) ], h0 B; n# y
if(flag_en == 3) //新年好5 E+ J# _% T* u' @: U* g
{
9 w0 w/ S% [# H m=music3[flag_i][0];n=music3[flag_i][1]; //放歌 0 N5 N( _$ n% U# R
P0 = smg_du[m % 16]; //显示
- G( a4 E9 G+ k4 ~0 ?5 e+ \% h7 x) _ if(m==0x00)1 C" t2 p. \. }5 v% m1 \+ Z+ D
{
* R, e# l+ p; E TR0=0;
6 p! z* w8 Q1 _+ Y" u; e4 e beep = 1;% ^3 o) i5 x% ^" ~
delay(n);" ?5 C( F" `' ~
flag_i++;' v: [! n) }( S! ~7 r
}
# C6 T$ V4 x" Y else if(m==0xFF) //放歌结束. A C* b3 {$ [5 e
{% n) g; \. J/ |8 c% h8 o% w
TR0=0;beep = 1;delay(30);flag_i=0;flag_en = 0;} ( o6 c! m6 j7 ~. x! P9 t$ p' u
else if(m==music3[flag_i+1][0]) ' R1 G$ U4 v; @. U {
{TR0=1;delay(n);TR0=0;beep = 1;pause();flag_i++; }1 n2 ]5 `* y$ d( o( c9 |' b
else4 x4 r! \: D B; f
{TR0=1;delay(n);flag_i++;}& b1 V- C- n2 L# N5 X( Q
}1 W* z" N ?! g- v/ Q' R# c+ J
else 2 B/ L2 d, j/ _0 v
beep = 1 ;
2 \& ^9 V( i, q8 K8 t }, z2 f- q3 `& _. A
}4 a$ G8 a- a, ~; R$ } A( Y
" H: g, C; ]9 }4 [3 e t2 J1 o0 z/ B% @' B) l
/*****************定时器0中断*********************/
/ ?+ S( K* Z G& z3 Svoid T0_int() interrupt 1
9 E- F4 R c1 C& M ]5 B$ Q0 L{
3 b M. [7 r; d( Y3 C. ?5 j" e beep=!beep;; o ?8 r6 j; U& Q& b* K# B
TH0=T[m][0]; 4 U, X" k! T$ y) f1 X p
TL0=T[m][1];/ e. U8 O; \- C/ U/ j
}
7 w! e, T$ c( \# m) ~ |
|