程序骨架如下# }, E `- Z! R while(1) 9 |# Q4 x& a2 z7 j5 {{ 7 D% S$ M$ }1 ikeyscan() //第一个按键返回值2 A/ K1 `) i% D6 Y# G" D$ S5 V delay() $ J. M' a5 E4 x/ Q6 q6 {/ Wkeyscan() //第二个按键返回值! C& J) C" R5 J$ A: i1 s$ E9 } } 5 I" {2 z( y6 d$ ^2 H现在遇到的问题是按下第一个键后,第二个按键返回值不能够按下,求大神给个解决办法
#include<reg51.h>/ R& V* \$ e( m b8 c6 ?$ E, y
#define GPIO_DIG P0- ^' M# F" ]/ u( U
#define GPIO_DIG2 P20 J2 f6 ]( C6 K" J8 t" J- g
#define GPIO_KEY P1" g+ x) @: ]# z& ?! D/ k" m+ D: M
unsigned char code DIG_CODE[17]={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ* M4 n1 ]% `. ~3 F' X' b
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //È·¶¨ÁÐ5 Z2 j4 g+ H+ d* b
! C }0 j" Q4 \6 G) p" [# m1 j
unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü |8 r) [, ?- P5 S' e1 ?( u
unsigned char KeyValue1; //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms(); //ÑÓʱ10ms
void KeyDown(); //¼ì²â°´¼üº¯Êý
void KeyDown1();! k3 a0 I+ S a8 B. O
/*******************************************************************************
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý3 u, T% F1 w/ _. ]3 i( \
* Êä Èë : ÎÞ- x& g: G! ]9 e, }& X
* Êä ³ö : ÎÞ: ?: k+ Z n5 F5 T$ L
*******************************************************************************/
void main(void), X- t" g( U" o" d7 g6 d
{
int i=1;2 T D( T6 S! c1 @3 q1 Y
while(1)
{
if(i==1)+ F4 `9 c+ v: _' |3 u
{
KeyDown();4 U5 f" F! U& B( n8 ~
// if(KeyValuv<9)* s6 \. z' W3 ^1 B; I: t
GPIO_DIG=DIG_CODE[KeyValue];, |) f: x, \( T# A, D% c. x
Delay10ms();
}
else
{ 1 w, u$ J$ p9 ~; } ]* y
KeyDown();
GPIO_DIG2=DIG_CODE[KeyValue];
Delay10ms();
}
i=i+1;
} : H( r$ o; l9 f( O
}
/*******************************************************************************
* º¯ Êý Ãû : KeyDown- r8 y1 w3 m3 A2 Y- O
* º¯Êý¹¦ÄÜ : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä Èë : ÎÞ' p& L& d5 W: p. H% n+ @ ~. o
* Êä ³ö : ÎÞ9 x" P3 s9 A# {8 R" K5 g# F. p
*******************************************************************************/9 O3 D! i% U' T
void KeyDown(void)
{2 f& i4 L5 ~1 X8 F
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
{* r% ]4 c |3 u: [( B
Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶) h# J \! { O: q: c# n
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
{* g! T/ Z, @& _; b& _; J# `
6 k. W* s0 b8 @. j
//²âÊÔÁÐ ]! h# f& @/ a2 S1 \, X; L
GPIO_KEY=0X0F;2 m2 F e; Z+ Z1 {7 V7 C
switch(GPIO_KEY)+ Z, K9 D( I \' u( z9 z* m; q( t% K
{
case(0X07): KeyValue=0;break;* s+ _. o, W5 h9 z7 e
case(0X0b): KeyValue=1;break;, e7 e. C) N; _ L
case(0X0d): KeyValue=2;break;$ M% J2 T; `" q# ~9 q
case(0X0e): KeyValue=3;break;
}* `( P4 }; y0 Q: Y9 ^, U
//²âÊÔÐÐ
GPIO_KEY=0XF0;4 {5 k' k0 M7 Z) k; ^ n/ u
switch(GPIO_KEY)9 A" \) B+ Z, J; f9 E( n' f
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;% R7 V* j) Q5 Y( K2 ?
case(0Xd0): KeyValue=KeyValue+8;break;3 n: `4 A% M$ U t7 S. N% N
case(0Xe0): KeyValue=KeyValue+12;break;, s0 @! i" }, x
}4 s* ]* C ^7 u( m: q" E
while((a<50)&&(GPIO_KEY!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â
{ j* i- v1 Z k; N) C7 t
Delay10ms();
a++;+ y6 _5 z9 D" n: W. U
}
}' K7 w: x' `9 Y4 p
}, m R& r4 H) N+ Q; {4 o; k
} E2 g3 I, _) V, V( V
/*******************************************************************************; m- {" G. D) e2 k# S8 @5 A# h
* º¯ Êý Ãû : Delay10ms! e5 D- p+ U5 x/ z) P' C; g
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬ÑÓʱ10ms T5 p. I, E( {, H6 w
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void Delay10ms(void) //Îó²î 0us
{
unsigned char a,b,c;: u R& A* P/ n# ]6 n& f
for(c=10;c>0;c--). q+ N- D# N9 [0 v' g8 h% w
for(b=380;b>0;b--)7 h" G a% ]! p3 k3 \# Q# d' j
for(a=1300;a>0;a--);
}5 Q7 ^. j' u, `0 b5 y
; z7 n/ G7 y+ l* \* F
4 w, {* u0 U1 Y9 M, l7 E( a% C
这是程序,就是想让程序识别两次按键后再输出,求解答
#include<reg51.h>% D: E7 f; ~5 ?+ x; t! a( x
#define GPIO_DIG P0
#define GPIO_DIG2 P2% T# l2 b$ X* Z
#define GPIO_KEY P1$ t% M, k2 }4 {- X, _. n7 s/ d: Z
0 Z+ Y# G" R& y' f
unsigned char code DIG_CODE[17]={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ. e8 A! M: N: h- x6 Z
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //È·¶¨ÁÐ
unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü# e4 x( r+ X: i
unsigned char KeyValue1; //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms(); //ÑÓʱ10ms) e c4 }/ }/ b% p7 i7 [6 S% @, H
void KeyDown(); //¼ì²â°´¼üº¯Êý( A0 Z; t4 U2 @
void KeyDown1();- v0 \9 R- r. Y# z
/******************************************************************************** S. d4 v, `5 `: d8 m
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý2 ~, L, s X7 c C& K* c
* Êä Èë : ÎÞ: x) d' w. ]% ^, s7 j( c: ]% P1 K
* Êä ³ö : ÎÞ) W4 [7 v& a* C2 h
*******************************************************************************/
void main(void)
{! n {& \7 l1 g) C3 g A
int i=1;3 Q9 @* `1 @2 e
while(1)% M& @; g4 r4 i8 v
{
if(i==1)% v' p' F! K* V8 f" e4 c; }% o2 i8 {
{
KeyDown();2 t; P4 x: L2 W) W! J$ i/ z1 W @
// if(KeyValuv<9)
GPIO_DIG=DIG_CODE[KeyValue];
Delay10ms();
}9 ^* q/ M q' a: {7 H& W1 ^# J) ]4 A
else+ o6 @$ d) ]! Y! y( `
{
KeyDown();. I7 }, S0 V. u; S Z
GPIO_DIG2=DIG_CODE[KeyValue];
Delay10ms();
}
i=i+1;$ m; V! |) [2 |6 d( G
}
}
/*******************************************************************************
* º¯ Êý Ãû : KeyDown
* º¯Êý¹¦ÄÜ : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void KeyDown(void), s5 G0 }: o, \3 O! I
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ+ s0 k/ l8 Y$ o
{
Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶! {7 }# X# u8 y7 w! c0 A y- B7 P- {
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ3 D# n9 O& C; ^! I
{
//²âÊÔÁÐ0 h3 a; Q2 T1 b, {8 }
GPIO_KEY=0X0F;
switch(GPIO_KEY)' w% |; r1 N; A& f1 \1 ^5 n0 k; \
{) O- M$ G. b& s( X8 U
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;" M% W, F3 j; E. z
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;6 d \% W0 {, t* P$ k {) g$ c/ \- z; D" ?
}
//²âÊÔÐÐ
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{" ~8 U; p. x* K- W6 c
case(0X70): KeyValue=KeyValue;break;' G8 u2 Z/ ]1 C3 S3 e2 C
case(0Xb0): KeyValue=KeyValue+4;break;, c0 W( }5 Q. P& c& D3 [9 p
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;4 \4 c2 W' c g! ~* n4 k$ V
}
while((a<50)&&(GPIO_KEY!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â5 c( X! o* B6 i( z: f
{* ^2 u9 h7 |* L
Delay10ms();5 {+ \4 U- N# D# V$ z$ ^
a++;
}
}
}$ U+ v! \) n3 t' [4 Q5 U( J
}
/*******************************************************************************8 ^" R3 t: n5 Y- o. D
* º¯ Êý Ãû : Delay10ms
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬ÑÓʱ10ms7 n& Z" X1 m5 H
* Êä Èë : ÎÞ9 {" i, w f- R- V
* Êä ³ö : ÎÞ8 p/ y+ T; g+ p2 g5 t/ e
*******************************************************************************/- I7 T2 w7 N& r
void Delay10ms(void) //Îó²î 0us- ~* q- v1 V6 _5 d( R: K
{2 V/ ~- z* k$ @1 f
unsigned char a,b,c;2 ?3 c! a2 r7 z s# i
for(c=10;c>0;c--)7 Q7 ^6 s' Z+ F' S( F
for(b=380;b>0;b--)( t/ Z3 @ b% o& l- |
for(a=1300;a>0;a--);8 t8 r, ]+ ~7 z
}' r! `4 K- }0 e& K7 q
5 @# I) A! Y& h" `1 J0 [* F
% l& B+ C2 w# l( k# R7 I0 w, j
这是源代码