你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何在while(1)里面得到两个按键返回值

[复制链接]
w小菜才 发布时间:2015-3-9 22:10
程序骨架如下# }, 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现在遇到的问题是按下第一个键后,第二个按键返回值不能够按下,求大神给个解决办法
赞 收藏 评论28 发布时间:2015-3-9 22:10

举报

28个回答
w小菜才 回答时间:2015-3-10 18:49:07
Eagleson 发表于 2015-3-10 08:42& H1 o4 H9 Q0 W5 r" L# \% `2 I
一个函数扫描不同的按键吗?
+ b6 r+ T  k& p+ L, H6 ^+ D6 |1 c
#include<reg51.h>/ R& V* \$ e( m  b8 c6 ?$ E, y

( O6 p9 {0 r7 Q#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

* I2 Z8 o) `8 ~, }0 U$ Lunsigned char code DIG_CODE[17]={
/ ^9 p+ R- Y; d# D, V" B: g0x80,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;  //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
  [  }0 i3 ?4 e  u4 Jvoid Delay10ms();   //ÑÓʱ10ms
3 f9 \) l6 P4 x$ Y8 gvoid KeyDown();                 //¼ì²â°´¼üº¯Êý
( I. O2 R( T1 E$ d) C; S) a2 Yvoid KeyDown1();! k3 a0 I+ S  a8 B. O

% z3 E% z2 M( z- ?4 S8 I/*******************************************************************************
( d) s" k5 T9 {% g" M; y$ O* º¯ Êý Ãû         : main
1 L1 m( V( k' Z1 l7 D! L* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý3 u, T% F1 w/ _. ]3 i( \
* Êä    Èë         : ÎÞ- x& g: G! ]9 e, }& X
* Êä    ³ö         : ÎÞ: ?: k+ Z  n5 F5 T$ L
*******************************************************************************/
/ |0 i/ w. q# v- p7 ~! {9 Pvoid main(void), X- t" g( U" o" d7 g6 d
{
' i2 e8 {# B; I: L% m; k6 u        int i=1;2 T  D( T6 S! c1 @3 q1 Y
        while(1)
8 N( z/ Z1 Z# P        {       
: Y9 H) y' t2 r/ i: P                if(i==1)+ F4 `9 c+ v: _' |3 u
                {
9 S3 A# g- N- k6 S2 |                        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();
  X0 f% |- |. K, [& {: N! a, E3 D                }
) H- p! ?9 v- W                else
9 Z% V2 w! {3 Q5 W9 t& A8 m; o1 ~                {        1 w, u$ J$ p9 ~; }  ]* y
            KeyDown();
8 f. z) }' b; m. s1 K3 U            GPIO_DIG2=DIG_CODE[KeyValue];
; B/ U. N0 h( \9 E' s! L9 p                        Delay10ms();
6 p, w9 w4 [. v! `; q" v                }
. C" R+ D- O7 w& y9 S                  i=i+1;
1 z2 O- M: t. U' I! j2 c/ b5 |        }                                : H( r$ o; l9 f( O
}
6 b4 d. K' o& R% p, l) j/*******************************************************************************
4 ]1 @& ?& c( F" A! J- X) U/ i. b0 X. _* º¯ Êý Ãû         : KeyDown- r8 y1 w3 m3 A2 Y- O
* º¯Êý¹¦ÄÜ                   : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
: a) L" n* q/ A+ ^9 w* Êä    Èë         : ÎÞ' 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)
6 f- |) _$ D3 E3 F( w3 j{2 f& i4 L5 ~1 X8 F
        char a=0;
1 n7 O5 M) h" V  k: ]* H        GPIO_KEY=0x0f;
7 o  y! A, v1 ]! R        if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
1 w+ j3 _+ t+ h        {* r% ]4 c  |3 u: [( B
                Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶) h# J  \! {  O: q: c# n
                if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
. r5 `9 v$ _& x  N, o5 U                {* 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
                        {
2 c6 r1 s+ ]8 Q, o4 ^1 S' |+ r6 W3 e                                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;
. a# c" O) T9 j: @7 {* J5 w/ w                        }* `( P4 }; y0 Q: Y9 ^, U
                        //²âÊÔÐÐ
2 a  e& o5 ?( p# q' L' N+ M$ B0 e2 ?& L                        GPIO_KEY=0XF0;4 {5 k' k0 M7 Z) k; ^  n/ u
                        switch(GPIO_KEY)9 A" \) B+ Z, J; f9 E( n' f
                        {
/ Q( r9 x0 p- w& M                                case(0X70):        KeyValue=KeyValue;break;
- x1 A# ?- A, d# t; u0 w                                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))         //¼ì²â°´¼üËÉÊÖ¼ì²â
' \4 Z: l, M- p& t: e" P                        {  j* i- v1 Z  k; N) C7 t
                                Delay10ms();
# V# J! t) l# \                                a++;+ y6 _5 z9 D" n: W. U
                        }
7 x+ Y" ]: x( o  P1 g  K' a                }' 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
* Êä    Èë         : ÎÞ
+ c$ o2 g/ i  l7 s6 `9 |9 }, G2 [* Êä    ³ö         : ÎÞ
0 q2 {& x* ]0 e( t9 U! i9 k& [( u*******************************************************************************/
9 A3 R( O6 l- ^void Delay10ms(void)   //Îó²î 0us
2 [7 j8 G2 V2 ^6 L, Q% D5 w{
+ Z$ K" C7 t$ }2 S4 {  K    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--);
" P. }! G% n7 F7 p/ W) w5 {9 ]}5 Q7 ^. j' u, `0 b5 y
; z7 n/ G7 y+ l* \* F
4 w, {* u0 U1 Y9 M, l7 E( a% C
这是程序,就是想让程序识别两次按键后再输出,求解答
w小菜才 回答时间:2015-3-10 18:49:25
_ilikerome_ 发表于 2015-3-10 07:381 }2 @2 C. {: D$ ]+ g
把keyscan() 的代码传上来

6 v$ t* a, P. @  e. M* S# D4 u3 q#include<reg51.h>% D: E7 f; ~5 ?+ x; t! a( x

1 m# ?8 o7 w; M2 [5 L1 i#define GPIO_DIG P0
+ u" L  \1 U1 s" U$ G* t#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]={
/ W0 O  \- e5 K  ]% r+ `0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ. e8 A! M: N: h- x6 Z
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  //È·¶¨ÁÐ
: S7 P( J6 J% g/ ]) U; f% J
  [! ^) w* y. t/ `; d( `" z5 X) uunsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü# e4 x( r+ X: i
unsigned char KeyValue1;  //ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
6 C6 v- ^: F5 }9 x8 {' zvoid Delay10ms();   //ÑÓʱ10ms) e  c4 }/ }/ b% p7 i7 [6 S% @, H
void KeyDown();                 //¼ì²â°´¼üº¯Êý( A0 Z; t4 U2 @
void KeyDown1();- v0 \9 R- r. Y# z

8 ?% b5 ^- n2 r8 q0 @7 o/******************************************************************************** S. d4 v, `5 `: d8 m
* º¯ Êý Ãû         : main
  z5 `& O8 m4 U4 M1 O" A! v* @* ]2 M* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý2 ~, L, s  X7 c  C& K* c
* Êä    Èë         : ÎÞ: x) d' w. ]% ^, s7 j( c: ]% P1 K
* Êä    ³ö         : ÎÞ) W4 [7 v& a* C2 h
*******************************************************************************/
4 g  m  J: ?( W3 i: m1 W  K. ]void main(void)
8 M' ?2 n7 k/ u! @3 l4 y/ t5 x{! n  {& \7 l1 g) C3 g  A
        int i=1;3 Q9 @* `1 @2 e
        while(1)% M& @; g4 r4 i8 v
        {       
9 o: J! ]- a$ c0 t                if(i==1)% v' p' F! K* V8 f" e4 c; }% o2 i8 {
                {
* z3 y4 `0 t' Q$ L                        KeyDown();2 t; P4 x: L2 W) W! J$ i/ z1 W  @
//  if(KeyValuv<9)
, b" d2 N+ m) C/ L3 f7 o                  GPIO_DIG=DIG_CODE[KeyValue];
  }+ d6 S. ?4 z" [" n8 _/ _                   Delay10ms();
9 T  s" K- l: L" D" }+ c9 G4 T2 o1 E                }9 ^* q/ M  q' a: {7 H& W1 ^# J) ]4 A
                else+ o6 @$ d) ]! Y! y( `
                {       
! e: `, R" j3 d2 [            KeyDown();. I7 }, S0 V. u; S  Z
            GPIO_DIG2=DIG_CODE[KeyValue];
0 u+ E, S1 f0 @. a8 }                        Delay10ms();
+ Z8 I' C7 i! O                }
* ?% [. i! i, y( j$ g8 s                  i=i+1;$ m; V! |) [2 |6 d( G
        }                               
% Z- [1 ]) u/ ^( i$ S% p}
3 r. R: `# s' S: ~/*******************************************************************************
" r1 w' }: E. P) w+ V* º¯ Êý Ãû         : KeyDown
' B6 u+ E7 O5 A- y+ N5 ~* º¯Êý¹¦ÄÜ                   : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
3 u( x  Q, h# W( H3 K9 ?* Êä    Èë         : ÎÞ
1 V5 y8 P" B7 X& s, D* s! ^: t* Êä    ³ö         : ÎÞ
$ {2 P/ _3 n4 G' A+ v*******************************************************************************/
1 @& g0 ?) d5 _0 Wvoid KeyDown(void), s5 G0 }: o, \3 O! I
{
, a) K$ k9 D! \2 y! @9 _        char a=0;
3 U. w" k4 B+ s  e3 @$ S        GPIO_KEY=0x0f;
1 J& i* z% L$ U6 y6 @. T        if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ+ s0 k/ l8 Y$ o
        {
* I2 R8 }8 |) t# Y1 G                Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶! {7 }# X# u8 y7 w! c0 A  y- B7 P- {
                if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ3 D# n9 O& C; ^! I
                {
( m3 M8 k# T) \  q                       
0 F# o+ k7 T( s" b3 e' ?                        //²âÊÔÁÐ0 h3 a; Q2 T1 b, {8 }
                        GPIO_KEY=0X0F;
, ^8 ]- g: m, I% x, ?                        switch(GPIO_KEY)' w% |; r1 N; A& f1 \1 ^5 n0 k; \
                        {) O- M$ G. b& s( X8 U
                                case(0X07):        KeyValue=0;break;
$ B  j1 R1 B1 U  k0 s                                case(0X0b):        KeyValue=1;break;" M% W, F3 j; E. z
                                case(0X0d): KeyValue=2;break;
  z" b  e0 Z$ U; w+ k% i9 o( R! R                                case(0X0e):        KeyValue=3;break;6 d  \% W0 {, t* P$ k  {) g$ c/ \- z; D" ?
                        }
6 o7 q- s1 A% e. {) \* q" l" d- z                        //²âÊÔÐÐ
9 f' ^& f, h. \0 ~6 @2 ~2 V& L                        GPIO_KEY=0XF0;
' p2 S4 _& S3 g- V                        switch(GPIO_KEY)
9 c. ]! _! ?+ f; Z$ M) r! w                        {" ~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;
; e5 h1 Z! J: ]% `                                case(0Xe0):        KeyValue=KeyValue+12;break;4 \4 c2 W' c  g! ~* n4 k$ V
                        }
3 N: U3 n$ e# K" }                        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++;
" k5 m" x3 }3 r- I) Y- ^1 X                        }
! W" b5 ^/ O4 I8 @7 {9 o( R9 i+ M                }
, {( d* y+ U- m: N* p6 Y        }$ U+ v! \) n3 t' [4 Q5 U( J
}
. ]8 l% R; q; I+ `) e1 j/*******************************************************************************8 ^" R3 t: n5 Y- o. D
* º¯ Êý Ãû         : Delay10ms
/ @. m! \: Y0 ~; j8 P  L3 g* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱ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
这是源代码
khadgar 回答时间:2015-3-10 10:38:46
你keyscan()函数没有返回值啊,在第一个按键后是不是执行其他任务了,所以程序没有运行到第二个按键。这个要看你具体实现的代码了。可以的话吧keyscan()的代码发上来,或者私信我都行。
_ilikerome_ 回答时间:2015-3-10 07:38:07
把keyscan() 的代码传上来
Eagleson 回答时间:2015-3-10 08:42:57
一个函数扫描不同的按键吗?
bit 回答时间:2015-3-10 09:30:18
动动脑  帮顶
kqh1120 回答时间:2015-3-10 09:37:12
一次性识别两个按键? 0.gif
zhangdaijin 回答时间:2015-3-10 09:37:44
stary666 回答时间:2015-3-10 09:45:09
stary666 回答时间:2015-3-10 09:47:07
stary666 回答时间:2015-3-10 09:48:16
stary666 回答时间:2015-3-10 09:56:07
stary666 回答时间:2015-3-10 09:58:09
党国特派员 回答时间:2015-3-10 10:20:17
看下。keyscan()代码。
stary666 回答时间:2015-3-10 10:24:36
stary666 回答时间:2015-3-10 10:27:54
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版