程序骨架如下 3 m% S# W1 N( u H6 @+ @1 Vwhile(1) 3 x( E6 B! E$ y9 B{ , c. P( p8 F& gkeyscan() //第一个按键返回值 2 Y% I/ ~ Y/ v+ W" Z/ G+ A7 kdelay()+ M e; h3 x, x& ? keyscan() //第二个按键返回值 4 ~/ ~ y2 u2 \2 Z- R$ D} ! c0 B3 O: V2 p: i2 H% H* ~现在遇到的问题是按下第一个键后,第二个按键返回值不能够按下,求大神给个解决办法
#include<reg51.h>
" L/ k8 U* Q# r" N" u3 k
#define GPIO_DIG P0
#define GPIO_DIG2 P23 b- M9 B- X) @6 K! O1 u3 Z
#define GPIO_KEY P1
unsigned char code DIG_CODE[17]={3 Z, V& _) `: g: P
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ% q# D# b$ x# W
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //È·¶¨ÁÐ( h. v7 T2 I- v, X% W( o
unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü
unsigned char KeyValue1; //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms(); //ÑÓʱ10ms/ E7 k# K, ]2 N- o, o* l- N" y( f- J
void KeyDown(); //¼ì²â°´¼üº¯Êý
void KeyDown1();
3 c- f3 m8 n+ v$ |9 N6 g
/*******************************************************************************# @6 J" Q& T1 k# |2 D" K0 { L
* º¯ Êý Ãû : main3 Z2 g8 Q/ L- t2 o9 n
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý0 ]4 t( c5 D& u
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void main(void)/ T3 p# {% {* y6 Z# X
{, D! I7 |" n; ^4 H% G& B+ F- i) O
int i=1;1 m; b! e- j) R' {
while(1)
{ 0 t. Q) Y4 p* |0 a- [0 G
if(i==1)
{: Q; M% l! F" e
KeyDown();) {6 N- w2 d: O3 z7 W
// if(KeyValuv<9)% B( ~3 E; }2 d, f5 l. x
GPIO_DIG=DIG_CODE[KeyValue];( _9 B( N! ^6 j
Delay10ms();$ }3 {, P$ W7 {# Q" a/ E0 J* S
}
else
{
KeyDown();
GPIO_DIG2=DIG_CODE[KeyValue];
Delay10ms();" s) U" ^# i2 Y) r# N; z4 a1 c$ n
}
i=i+1;6 X4 C9 A( S) e& M% o( ?4 q
}
}" ?, c3 |5 d7 x$ `( H
/*******************************************************************************
* º¯ Êý Ãû : KeyDown$ s- H' u' F Y& O0 A
* º¯Êý¹¦ÄÜ : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ9 v6 @, a) ?- Y+ A' U4 v3 Q
* Êä Èë : ÎÞ4 C8 b( m2 ?, `2 l0 b- I) M
* Êä ³ö : ÎÞ7 o3 X4 n9 e7 Z* {) {" h
*******************************************************************************/" c1 P' k6 P" j" M" r- ?
void KeyDown(void)
{
char a=0;2 B, j! U% W: Y
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ" R `# \; ]0 k) O- L+ H% K* Z$ n
{
Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶% F# Z* n2 i3 X4 a
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ7 p# u+ A9 X# z1 D5 n7 A
{
, z2 Z7 y+ r1 N. m1 D, {
//²âÊÔÁÐ
GPIO_KEY=0X0F;. ?1 e# z5 G g8 z6 f
switch(GPIO_KEY). V* t0 ^" V- o8 x
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;( `& W, } J. Z) v6 C0 D( L9 z
}
//²âÊÔÐÐ
GPIO_KEY=0XF0;( M* @# T* R5 ] w* }9 K% l
switch(GPIO_KEY)6 h' {" Z5 a( p
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;# X1 \: K. N; E* N! D* S, {0 p
case(0Xd0): KeyValue=KeyValue+8;break;/ K; G' }! ?3 T6 N
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â* r7 G0 L$ M- l0 X; ]2 p0 E
{
Delay10ms();
a++;! t4 V( u0 [# ~$ P; x! u9 D
}
}, Z1 l" y6 r7 s6 t% Y4 H
}
}
/*******************************************************************************
* º¯ Êý Ãû : Delay10ms
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬ÑÓʱ10ms) a9 C6 f3 B& q
* Êä Èë : ÎÞ4 u* l) G+ o9 b% S8 I+ f- B
* Êä ³ö : ÎÞ
*******************************************************************************/
void Delay10ms(void) //Îó²î 0us4 r4 Q0 F. X! K) g5 p% s2 U
{* d0 I' ^4 D3 C# P
unsigned char a,b,c;* l! s0 F6 l) i- Z
for(c=10;c>0;c--)% r5 k( O; X; A8 p) l" R
for(b=380;b>0;b--)
for(a=1300;a>0;a--);
}% D! g9 e& Q5 [& i" h* f
8 k( e6 n# J7 ~4 W) c# m; F( I) s. g8 h
- m% M5 K4 Z9 W8 h2 Z
这是程序,就是想让程序识别两次按键后再输出,求解答
#include<reg51.h>
#define GPIO_DIG P0: r1 Q p) a( C+ N9 g$ c
#define GPIO_DIG2 P2+ r" I, ~0 Y F4 c
#define GPIO_KEY P1
unsigned char code DIG_CODE[17]={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //È·¶¨ÁÐ9 [ ?* X* T) _- w; u6 P
unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü
unsigned char KeyValue1; //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms(); //ÑÓʱ10ms
void KeyDown(); //¼ì²â°´¼üº¯Êý8 b2 _, [$ {! S+ s
void KeyDown1();1 ^, W2 u* Q& k+ L8 n' J+ h n
/*******************************************************************************
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý- ^. N% x. s& l$ f
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void main(void)4 K* r+ v1 Y9 k# z! {
{2 L9 Y1 I# Y# D f& F
int i=1;$ Z8 E9 v$ u- I. d* n
while(1)6 n( S- N$ @8 T0 p3 t
{
if(i==1)
{4 h Y" d0 X D7 R* K8 L8 X( [' O
KeyDown();* n" S2 D) F/ M1 ~/ R
// if(KeyValuv<9)4 C! ]' f- g% h3 X+ B5 r- S
GPIO_DIG=DIG_CODE[KeyValue];2 X! M% Q0 |9 b- D
Delay10ms();5 a9 V# Z# e' }: k1 E/ p/ f7 W
}
else
{
KeyDown();5 y* U1 U( u; ^/ ]
GPIO_DIG2=DIG_CODE[KeyValue];4 A7 ?9 L1 W. \/ ~" ~
Delay10ms();: H: Q. D+ n% a0 }
}
i=i+1;
}
}
/*******************************************************************************
* º¯ Êý Ãû : KeyDown0 Y7 `7 c) E' Z
* º¯Êý¹¦ÄÜ : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ6 z0 I4 I' I$ s* P4 e+ k. n d3 ^
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/' z9 m. K u. K
void KeyDown(void)
{
char a=0;! f/ r5 G6 N6 Y0 b1 r
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
{' Z t7 I) V' t. Y* a* z# d: w: T
Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶# v/ n+ _. c/ O$ [$ ~9 r
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
{' e7 m" a' A6 R" z) G2 l" u1 J
//²âÊÔÁÐ
GPIO_KEY=0X0F;/ b+ I: [$ w, ]9 T2 M1 u
switch(GPIO_KEY)
{& }0 L& M0 }5 X/ H# M& [
case(0X07): KeyValue=0;break;- A: V2 O* [) z
case(0X0b): KeyValue=1;break;$ q& E8 W+ I0 { N7 r
case(0X0d): KeyValue=2;break;( h4 N! \6 k0 W4 A9 v; y: @4 J2 A
case(0X0e): KeyValue=3;break;& u8 {& Z% f8 l8 A
}
//²âÊÔÐÐ
GPIO_KEY=0XF0;
switch(GPIO_KEY)0 T) t/ |( Q2 d) ^
{% u7 f9 m/ H, i2 [! k6 I
case(0X70): KeyValue=KeyValue;break;; U& c% @6 \, g& m/ N
case(0Xb0): KeyValue=KeyValue+4;break;+ m& c9 N N- ` L6 p
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}/ ]- h) [4 ~' P% \8 X# J
while((a<50)&&(GPIO_KEY!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â& n- z& R: B5 z0 ~* M: l7 _ l' r
{2 s4 ^, n& G5 `8 t# e
Delay10ms();7 H: N* A& Y9 v1 m8 [- O. c }# [
a++;
}
}) Z* k) K3 K+ c" i' m- n
}
}5 a# r: O0 } R2 ~- M( b8 p* L
/*******************************************************************************; N8 p- {" u4 u( \: N! @4 E+ |' g
* º¯ Êý Ãû : Delay10ms- Z6 v) ~5 k/ O) y
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬ÑÓʱ10ms
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ* V8 D0 r" i* o1 a r. y
*******************************************************************************/: ?' s' }1 ~ u' V
void Delay10ms(void) //Îó²î 0us9 c8 Y, y5 y+ y
{
unsigned char a,b,c;5 M7 l, g5 H! U* h
for(c=10;c>0;c--): p/ |# J& b+ F3 e8 l' ?3 [" v
for(b=380;b>0;b--)! }& ^, E; h( v2 q1 q* z
for(a=1300;a>0;a--);
}
) T- g% O( @& I9 \
这是源代码