找回密码
 注册
关于网站域名变更的通知
查看: 1068|回复: 5
打印 上一主题 下一主题

stm32f103总是自动触发中断,求高手指点

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-9 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
+ H: R. b. A- ]( v% D& z2 e
#define KEY0_INT_GPIO_PORT         GPIOC, z1 M, ^/ h6 Q% E2 K* U
#define KEY0_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
; q: Y5 G* N/ q* i& v6 j# p; B) }#define KEY0_INT_GPIO_PIN          GPIO_Pin_0
( l$ |+ u) ?4 U$ d# X9 a" [#define KEY0_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
2 u) ]$ m5 f& ~# C#define KEY0_INT_EXTI_PINSOURCE    GPIO_PinSource0
" H* Y4 r3 F; H2 g! j#define KEY0_INT_EXTI_LINE         EXTI_Line0/ R2 v" |6 @* t9 p& g' T
#define KEY0_INT_EXTI_IRQ          EXTI0_IRQn& y) ~5 u  f9 ?4 G& e9 V
#define KEY0_IRQHandler            EXTI0_IRQHandler
3 R9 h* q$ A6 Z# Q" H: H7 D: y) B! ~2 Z4 t- M- A4 O
#define KEY1_INT_GPIO_PORT         GPIOC" r3 T2 ?, B& H* q, ~2 B
#define KEY1_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
/ Q- A# r6 d$ E2 Y  ?9 U8 U, D#define KEY1_INT_GPIO_PIN          GPIO_Pin_1: i% `, V, q" ~
#define KEY1_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
) Q7 b, x$ j# _4 ]$ T/ x2 u7 i#define KEY1_INT_EXTI_PINSOURCE    GPIO_PinSource1
  g8 f- I% A2 j+ u9 c#define KEY1_INT_EXTI_LINE         EXTI_Line1$ J, n, [$ O- a8 k
#define KEY1_INT_EXTI_IRQ          EXTI1_IRQn+ u  h8 r7 Q# U2 @# V
#define KEY1_IRQHandler            EXTI1_IRQHandler( f; g6 X5 ^  ~; [  v6 |0 c& j
  n/ Y& x- c3 K
#define KEY2_INT_GPIO_PORT         GPIOC
) I# y5 z- l. h' {3 c. z#define KEY2_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)* u! A& r5 H8 e0 }
#define KEY2_INT_GPIO_PIN          GPIO_Pin_2% B' e' O8 [+ F6 h9 Y2 d5 C) E. I7 c
#define KEY2_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
+ M/ T+ R0 E+ Q% w) W#define KEY2_INT_EXTI_PINSOURCE    GPIO_PinSource2* O+ `5 w# P( j( y! V
#define KEY2_INT_EXTI_LINE         EXTI_Line2
5 Y! _' p4 T( ~" y/ E$ T#define KEY2_INT_EXTI_IRQ          EXTI2_IRQn- @& x5 k7 L1 q+ F- v  @9 a  O+ D3 y
#define KEY2_IRQHandler            EXTI2_IRQHandler2 t$ A( z( `& e6 O4 Q

5 |5 C) o) G5 @9 ]; C7 j- f# p#define KEY3_INT_GPIO_PORT         GPIOC
% u9 T3 u. d9 L- B#define KEY3_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
  b* }1 j% E' w5 Z  `#define KEY3_INT_GPIO_PIN          GPIO_Pin_3
9 m/ j7 b7 E) D3 R3 |! s; g( N0 |5 p5 ~#define KEY3_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC+ G( j8 n8 n* R7 L, O% J) U
#define KEY3_INT_EXTI_PINSOURCE    GPIO_PinSource3$ G# F  B' U1 w, |/ t
#define KEY3_INT_EXTI_LINE         EXTI_Line3
: G  P. y, h  C+ q. r- o#define KEY3_INT_EXTI_IRQ          EXTI3_IRQn
* Q; r& G. n+ ?! {' D/ M#define KEY3_IRQHandler            EXTI3_IRQHandler5 g6 f0 G. R; I+ v+ f

' A+ Y7 e& N- p( |#define KEY4_INT_GPIO_PORT         GPIOC
3 i! _( |5 ^& j3 B* l9 n3 y$ U#define KEY4_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)2 M9 e9 Z$ B. ~& y/ Q( Y. W
#define KEY4_INT_GPIO_PIN          GPIO_Pin_4+ v& X: N3 D6 U" K* U: s! F' ?
#define KEY4_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
% Y" d3 `! g0 F: |+ n& R3 A8 y#define KEY4_INT_EXTI_PINSOURCE    GPIO_PinSource4
# Z, T; ~2 X' ]. d#define KEY4_INT_EXTI_LINE         EXTI_Line45 s) k4 C( R: F8 _
#define KEY4_INT_EXTI_IRQ          EXTI4_IRQn$ @2 H$ l. n! o  W
#define KEY4_IRQHandler            EXTI4_IRQHandler" T5 e4 G6 U. d% m

) w; U0 d) m' d8 p0 h#define KEY5_INT_GPIO_PORT         GPIOC
9 O8 s* @# r( r0 f- G#define KEY5_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
8 l' z$ Y' ^$ X8 {' m6 Y+ G9 F0 |7 B#define KEY5_INT_GPIO_PIN          GPIO_Pin_5
* ^/ w8 i2 S& Z* {1 F* _' c: e" t#define KEY5_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC# X, r# t# c# X( h* ^
#define KEY5_INT_EXTI_PINSOURCE    GPIO_PinSource5# O7 u6 g+ v8 P2 f5 S
#define KEY5_INT_EXTI_LINE         EXTI_Line57 s8 Y2 t% i7 j+ `0 T7 D
#define KEY5_INT_EXTI_IRQ          EXTI9_5_IRQn+ b8 i: }3 ]8 g+ G9 N; }
#define KEY5_IRQHandler            EXTI9_5_IRQHandler
; g; A; o% r: r' E' T3 o. j, W% ]  y+ k  M* j' v3 ^
#define KEY6_INT_GPIO_PORT         GPIOB& k( T" J) X; Y
#define KEY6_INT_GPIO_CLK          (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)
  J( `1 Y4 z9 ]# ]#define KEY6_INT_GPIO_PIN          GPIO_Pin_15
3 o- [& J& n4 c  ?/ E* N#define KEY6_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOB
- F2 J' F! B# b" @2 d$ v#define KEY6_INT_EXTI_PINSOURCE    GPIO_PinSource15; R& G* K( u1 G* {4 s/ v$ Q
#define KEY6_INT_EXTI_LINE         EXTI_Line15
0 x1 h8 t. Y6 C1 x+ e#define KEY6_INT_EXTI_IRQ          EXTI15_10_IRQn5 v8 k  N$ ?# Q: a
#define KEY6_IRQHandler            EXTI15_10_IRQHandler
4 ~2 q* c; z' B) J% t& Z: ]( t1 T
* A" B7 |$ W6 Q# a* H#define KEY7_INT_GPIO_PORT         GPIOC" k) |# _9 a/ o
#define KEY7_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
7 @8 f% x( w9 S#define KEY7_INT_GPIO_PIN          GPIO_Pin_6
, S7 o# v1 g. n/ z% p. F$ E#define KEY7_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC* v8 F# ~) h0 I* S/ B& G& r
#define KEY7_INT_EXTI_PINSOURCE    GPIO_PinSource6
: o3 L, [, u/ s3 @$ r#define KEY7_INT_EXTI_LINE         EXTI_Line63 _* }' E1 {+ r( O* H0 J( T
#define KEY7_INT_EXTI_IRQ          EXTI9_5_IRQn
* i" l9 i- z; R" i#define KEY7_IRQHandler            EXTI9_5_IRQHandler, x6 |. Z" y$ R4 z' m
+ j% _) J! d# U
#define KEY8_INT_GPIO_PORT         GPIOC8 u) _. l9 G/ K) x2 R0 e. R$ n. J
#define KEY8_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)% M9 {/ U5 t8 r, @* f/ g- q
#define KEY8_INT_GPIO_PIN          GPIO_Pin_7
' l! i+ D  X9 ~6 x#define KEY8_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC' ~4 t: K* y( h9 l7 k4 G# V
#define KEY8_INT_EXTI_PINSOURCE    GPIO_PinSource7
: k& E1 ]6 R9 R5 b, O. ]9 C- v#define KEY8_INT_EXTI_LINE         EXTI_Line7; ~  S8 s+ I, B. `" o+ n
#define KEY8_INT_EXTI_IRQ          EXTI9_5_IRQn
. [5 W* n+ l' A! E#define KEY8_IRQHandler            EXTI9_5_IRQHandler4 R2 M* d; U) n3 N: j2 F

" v2 S' B5 L2 {9 g. k2 \#define KEY9_INT_GPIO_PORT         GPIOC$ H( H* M# C$ Z" f! R. x( l8 Y
#define KEY9_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO); R$ q" n; O& A' g$ \; F
#define KEY9_INT_GPIO_PIN          GPIO_Pin_89 ]( G& h  @6 ^( H8 C8 e
#define KEY9_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
$ z$ t! n* `2 p0 h3 J4 T- f+ F8 t3 S( c#define KEY9_INT_EXTI_PINSOURCE    GPIO_PinSource8: m: B( A+ B0 I5 i
#define KEY9_INT_EXTI_LINE         EXTI_Line8
# y0 G: n/ l1 y3 _#define KEY9_INT_EXTI_IRQ          EXTI9_5_IRQn% L) K$ p3 ]! C9 |  g3 ^$ \
#define KEY9_IRQHandler            EXTI9_5_IRQHandler
" i! g! J5 n0 v: s6 z9 @8 Z3 V, g7 t; ?4 _
#define KEY10_INT_GPIO_PORT         GPIOA
, u0 y& q! G+ R6 L) ?' I4 k; D1 |+ ?, z#define KEY10_INT_GPIO_CLK          (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO). p4 v$ B% T, N1 [; E1 R. d4 w9 q
#define KEY10_INT_GPIO_PIN          GPIO_Pin_11
) Z% X) \: e! V5 r' O#define KEY10_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOA/ a( L' G$ q! ?. z, O# |3 U+ ?' @+ \
#define KEY10_INT_EXTI_PINSOURCE    GPIO_PinSource119 R" h: o+ l  }8 }2 t
#define KEY10_INT_EXTI_LINE         EXTI_Line116 r5 V% j/ w6 i0 h  [; A% }
#define KEY10_INT_EXTI_IRQ          EXTI15_10_IRQn
* U1 ^' X3 n& E, f#define KEY10_IRQHandler            EXTI15_10_IRQHandler
: r1 C- J% R" ]5 i! g% d. t: h, }/ L7 D" D& E
static void NVIC_Configuration(void)
" P3 |4 S6 h8 W( L* y0 }{! v( s) X* x& U
  NVIC_InitTypeDef NVIC_InitStructure;' f" x: C: D( Q5 n1 @
  
8 S1 T9 F7 l7 m+ u& h  /* 配置NVIC为优先级组1 */- i4 a7 v+ Z1 ~6 ?# r% h6 }
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);% E5 X. c! o6 J; W9 i7 h
  ; A" a% n0 N# X' d
  /* 配置中断源:按键1 */6 e; \# W( S9 Z) v6 ?
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
* a, D6 d  w% S# L( W5 C/ a  /* 配置抢占优先级 */: @5 F/ D$ a* Z: `
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;1 u  D7 @* M/ y+ ~# [' O
  /* 配置子优先级 */* ^/ N0 v0 B1 b8 f" {( x
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
& q& S4 |' j0 V0 L" s- |6 f  /* 使能中断通道 */
/ C5 T; O. Y1 D  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;0 x$ @% N; a, [2 {
  NVIC_Init(&NVIC_InitStructure);7 f$ }3 J& b. ?0 p
  
* I+ }) v7 i1 t! L( X0 x; h  /* 配置中断源:按键2,其他使用上面相关配置 */  % O: g: y# i; P% s* @1 H
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;6 p- p* ?* Q) U/ e: I
   /* 配置抢占优先级 */
; q4 c; f( k7 C7 L( w  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
7 x* J- a. E  k5 e% h. G  /* 配置子优先级 */) H. a6 r3 J; {' i: z* `
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
1 F1 w; X9 c5 t5 ?! p6 U) j  /* 使能中断通道 */
& h& @+ h# \, V( }6 U% P( [3 n  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;% [& r" J& V* E1 |3 i- [

该用户从未签到

2#
 楼主| 发表于 2019-7-9 10:26 | 只看该作者
static void NVIC_Configuration(void)
  o, L+ }' w( m: e9 A{( t$ M  O; ^* l  ~1 i
  NVIC_InitTypeDef NVIC_InitStructure;
8 B$ w( Y) u! r4 B: D, f* {" P+ Z7 F' c% B$ ]8 T2 }5 I
  /* 配置NVIC为优先级组1 */9 K; e8 }# H% @- T7 n- d3 ~0 }
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);3 B, b2 F- e  [" ^$ J& C& H& u
" b3 [) y- K$ T: O; L
  /* 配置中断源:按键1 */
. U+ G0 r% U7 @3 s  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
  K6 H% v1 D+ l9 Z% v  /* 配置抢占优先级 */( i* J* ]' g6 |2 h
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/ t; M5 m- G. K
  /* 配置子优先级 */# p. y8 {8 \9 V# H$ i5 ]5 y
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;$ w# {. s. b, C6 |
  /* 使能中断通道 */* S2 D: [9 A5 V$ J& k
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
9 G' G% n& E" L1 ^7 o( n/ S  NVIC_Init(&NVIC_InitStructure);+ j, P3 c( w4 O3 O% o
8 X$ l% @3 ^" \6 q% l/ m) [
  /* 配置中断源:按键2,其他使用上面相关配置 */  
7 K; X1 W6 a7 M9 G9 w2 T4 ^( Y8 G  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
; ]- v: M2 u* a7 s% @. o* m   /* 配置抢占优先级 */' S* L/ P% |6 F2 `7 E
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;0 |# D; j4 s: p- q" X* r! a: v5 T
  /* 配置子优先级 */
, `/ e. [+ d7 y+ k8 @  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;* z' Q- S% D& t1 O% y, c( H
  /* 使能中断通道 */5 D6 y9 E2 ~( X$ |7 ]
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
' h+ R- E( N& \5 V) t; R" Z" L        NVIC_Init(&NVIC_InitStructure);/ d- R2 ^, Q6 l
       
3 K! ^; `3 Z. s         /* 配置中断源:按键3,其他使用上面相关配置 */  ) O# U6 g% M0 p* O
  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;. Y/ l5 I  B6 j4 h, ]" _& a
   /* 配置抢占优先级 */
+ \4 _0 C0 ~' M/ H) d  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  d7 B8 I" w: d; y, M- V
  /* 配置子优先级 */
) l( z4 N/ e9 Q/ G4 N& w) @* r  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;! p. j4 D: p* y' M/ k6 F! F
  /* 使能中断通道 */
4 d6 `9 n3 W. i  ^  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
" E- ]0 N: o3 j  K/ c  m) J4 \0 V        NVIC_Init(&NVIC_InitStructure);8 U* x% ?& Q; i! y$ r7 G- Q3 U- Q
       
" I! M7 b  N; S4 J3 l  g+ G        /* 配置中断源:按键4,其他使用上面相关配置 */  . ]3 P+ R+ ]  G1 e4 z
  NVIC_InitStructure.NVIC_IRQChannel = KEY3_INT_EXTI_IRQ;1 j/ z5 H/ V; E- F5 Q; Y8 D  G
   /* 配置抢占优先级 */" D2 Q# \- S, X: _5 P" o: ~
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
6 u. P5 A  z$ u% p% P  /* 配置子优先级 */
* O  g% E; d& k  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
* G" n/ u; p' s$ D  z* o  /* 使能中断通道 */
3 H& k( |8 l/ u  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) }5 @, |2 @; E( Z
        NVIC_Init(&NVIC_InitStructure);) }) G$ R5 T  y/ z7 \7 E$ A
       
: Y7 |7 q, h5 v         /* 配置中断源:按键5,其他使用上面相关配置 */  
6 \3 d' S# F) y, l  NVIC_InitStructure.NVIC_IRQChannel = KEY4_INT_EXTI_IRQ;; F/ i5 V+ }. @. Q
   /* 配置抢占优先级 */) E; q1 a( @0 Q# v9 q
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;9 m! U. s3 O1 L) }% s0 @# B
  /* 配置子优先级 */# t+ f. L+ Y/ b* T$ l7 {
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;- [" e! d! g8 w# V, n
  /* 使能中断通道 */% Y9 W% H9 L$ }- [3 j9 {3 A
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;* }# f8 e5 y7 V, n# v6 G2 Y. _
        NVIC_Init(&NVIC_InitStructure);( I3 W# s( @% P3 i
       
: ^# B' q! I9 v; e                 /* 配置中断源:按键6,8,9,10,其他使用上面相关配置 */    z# R" O: B# Q; \8 o
  NVIC_InitStructure.NVIC_IRQChannel = KEY5_INT_EXTI_IRQ;% b5 i: B, F" Y5 n8 L
   /* 配置抢占优先级 */  {2 D/ [9 e) u
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/ o: m5 u. h! T  /* 配置子优先级 */2 m# Y# D- m8 ]
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
6 b7 ^. C/ a. o0 W' Y4 [6 V  /* 使能中断通道 */
6 c2 W1 A0 R; B/ e" y  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
( a! L' ~9 j( r5 N3 _        NVIC_Init(&NVIC_InitStructure);7 z- I5 t( s6 a  ?
        2 m( V/ {5 _. O. H
         /* 配置中断源:按键7,11,其他使用上面相关配置 */  . a8 }7 P; n1 \
  NVIC_InitStructure.NVIC_IRQChannel = KEY6_INT_EXTI_IRQ;
. y/ `/ E8 ~, T8 N) z- ~$ n   /* 配置抢占优先级 */" K6 g. U4 k0 l& [+ a$ ^% @
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;2 U) S  i9 ?, `6 z
  /* 配置子优先级 */
0 Q( c- E3 Z: f5 X/ @  c  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
1 {7 e6 b: Q2 n$ F  /* 使能中断通道 */+ L: y  }% j2 M6 M: z, P! w
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
3 A3 G/ r+ v$ G8 A. n8 \- g% B( _        NVIC_Init(&NVIC_InitStructure);
' F* N6 K7 \5 v% Q! }( O4 [! c2 N8 e        + |2 S: ~# }4 Y. \
        ' H8 L# l0 p+ \0 H* p: m0 O8 F
}
1 ?) Z* {9 Y  m6 O# J1 m3 F; {& H) l7 x5 w; E0 }9 z
/**& e; N9 p& C( l& x4 K' q' n1 G
  * @brief  配置 IO为EXTI中断口,并设置中断优先级# j& g5 ?, V  _: c
  * @param  无
4 r% w7 X2 s0 R8 `0 @8 z1 o  * @retval 无
3 F( P; M+ a6 n! R  */
4 S$ F8 T0 z% i; b1 Yvoid EXTI_Key_Config(void)
3 w8 f0 ]+ ?6 h" o  |7 W& k{
& Y, w* Y8 L6 Y4 k% z5 h        GPIO_InitTypeDef GPIO_InitStructure; + w( N: ]0 W, ~4 {4 e* q# p/ z
        EXTI_InitTypeDef EXTI_InitStructure;& Q; }/ }5 |' I, r: M7 r* j5 z

4 \' _& A) a  ]. f4 K" @: U        /*开启按键GPIO口的时钟*/
3 ?: O  u. y3 Z: `        RCC_APB2PeriphClockCmd(KEY0_INT_GPIO_CLK,ENABLE);
7 h# ?& v5 P$ C5 |7 O% ~1 E* f; N        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);        & a3 {3 M5 t' e, ~
        RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);8 X+ ~: C& N* t( z7 J6 n% F& a
        RCC_APB2PeriphClockCmd(KEY3_INT_GPIO_CLK,ENABLE);
" _& f' u/ C. @: N  h        RCC_APB2PeriphClockCmd(KEY4_INT_GPIO_CLK,ENABLE);       
1 f  U$ n" O' @# b* q        RCC_APB2PeriphClockCmd(KEY5_INT_GPIO_CLK,ENABLE);
/ s; ^- z5 T  j) K, y+ T        RCC_APB2PeriphClockCmd(KEY6_INT_GPIO_CLK,ENABLE);% T) u3 J1 @9 `4 n; a* p
        RCC_APB2PeriphClockCmd(KEY7_INT_GPIO_CLK,ENABLE);        # ]- `* A/ p! O; l$ |
        RCC_APB2PeriphClockCmd(KEY8_INT_GPIO_CLK,ENABLE);
! f2 G  n" Z% {5 \& E6 g: N  n+ z        RCC_APB2PeriphClockCmd(KEY9_INT_GPIO_CLK,ENABLE);. {5 c, O, N5 ~  N) Z
        RCC_APB2PeriphClockCmd(KEY10_INT_GPIO_CLK,ENABLE);        ( r7 Z- V; |" h1 N/ ^+ F+ I& D
        /* 配置 NVIC 中断*/
+ z" \' A2 u+ Q1 d        NVIC_Configuration();+ b) ~9 x+ y/ I8 [

8 L0 ^) w9 L; B& M/*--------------------------KEY0配置-----------------------------*/
* h2 S1 K1 D9 [+ l1 V        /* 选择按键用到的GPIO */        2 `: `8 w9 s0 U0 g6 z( R9 {: H
  GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;# T6 R$ i- O" D( m8 p
  /* 配置为浮空输入 */       
& X( j$ j/ y, \8 u1 o+ s! G  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;; V5 O% X& `$ I$ t5 T; W2 L" E
  GPIO_Init(KEY0_INT_GPIO_PORT, &GPIO_InitStructure);
7 k5 S. I1 G6 U
" f1 u) M% H- l1 |        /* 选择EXTI的信号源 */; }3 D7 R' f( m' |9 H% L- N" W
  GPIO_EXTILineConfig(KEY0_INT_EXTI_PORTSOURCE, KEY0_INT_EXTI_PINSOURCE); ! M% V; Q( @( a% j( J
  EXTI_InitStructure.EXTI_Line = KEY0_INT_EXTI_LINE;4 G, n  @6 |+ Y% o' x
        " j, I: H' c# D! g, U: @
        /* EXTI为中断模式 */
/ h& u; |+ w4 ]' s  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
4 ?, a. y/ [& O( G        /* 下降沿中断 */
5 o$ k/ T* E5 ~# M  i  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  W6 m: |# i9 u$ C* E! _$ p( u+ [  /* 使能中断 */       
$ c" ~, j: a' d8 M: \- u! r" L  EXTI_InitStructure.EXTI_LineCmd = ENABLE;* l1 R2 Y8 l- c- y0 v3 @
  EXTI_Init(&EXTI_InitStructure);        & q) m; a4 c* b( }
/*--------------------------KEY1配置-----------------------------*/
1 a3 [4 {& w; F7 I. d+ S$ H! y        /* 选择按键用到的GPIO */       
5 i% ^- u+ G' h( i9 [' G* j) j# v  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
7 c, V# ]% ]4 R9 i  /* 配置为浮空输入 */        ) K# k4 f4 ?) t) i5 C/ w
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;3 n; G$ A3 @2 @! [. ]" E2 `
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);5 l0 ]2 K! S, J' D7 R  E, N
! \1 i- \4 s2 k2 b- s2 H8 J
        /* 选择EXTI的信号源 */
& y$ F0 v- J8 U6 ?* A: c  GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);
- ?  h8 ]/ }# t  H# M! D1 o# \  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;* D  h2 c, F/ n
       
  ?) e8 P6 P4 z9 f. \! q        /* EXTI为中断模式 */
+ t9 O3 b0 O% w/ u' a0 X1 W  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/ U7 n% e) H* r$ I# m0 j; T5 k        /* 上升沿中断 */# T9 w  a/ C( l! R2 Q" B6 t4 t0 j
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  T7 h, C$ H# R5 m- N  /* 使能中断 */       
' O  A! ]5 y8 u8 V  EXTI_InitStructure.EXTI_LineCmd = ENABLE;/ j" m" n8 m* U) w4 J
  EXTI_Init(&EXTI_InitStructure);/ x7 ^) ^8 T, V- x
       
$ o) O* O3 h6 P9 H5 U  /*--------------------------KEY2配置-----------------------------*/
  W0 H' h$ x  b6 j6 M  ~1 Z! y        /* 选择按键用到的GPIO */       
% U4 i7 w7 U/ w3 G$ O" w1 \7 d  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;0 d2 s7 a! N9 R! P8 N9 S9 @
  /* 配置为浮空输入 */        8 F# m, r0 @$ N/ M. l/ M
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;* Q8 D5 J4 \  w. u: C; K9 o: ~
  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);
! @+ \5 m- H* Q- }        /* 选择EXTI的信号源 */
: Q( q: t% ^2 N$ ~8 m4 T: S  GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE); : C4 ?; R! Z& G# _  ^8 g
  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;
+ R# g  P& s5 {       
0 b: z: Z) L4 O/ w' U        /* EXTI为中断模式 */  K9 @# E( x3 L/ @" k* M: x" T0 ^
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
. h8 T( {3 x$ f* {: J+ {, k( F, D        /* 下降沿中断 */
$ {9 D9 X+ c; F. }: L5 f; s" L$ w- _  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
+ v& J0 B3 t+ h; [( p  /* 使能中断 */        0 [# w( `1 N% O& h9 e
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
3 B, C$ J: k5 e- ^5 `  EXTI_Init(&EXTI_InitStructure);* V/ f! K2 P6 f9 \9 L1 M, S# i/ {
        $ A  T) x$ J: X7 A
        /*--------------------------KEY3配置-----------------------------*/
4 Y% q  m/ J3 h4 |# N        /* 选择按键用到的GPIO */       
% c6 r; n, y; D1 i& b  GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;
! e% [$ L) }4 C9 Y" F  /* 配置为浮空输入 */        ' {2 q5 i  U0 V+ S2 \: o  [: e
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;7 Y& a/ T2 Z2 O* L8 j9 W$ h- Q1 L
  GPIO_Init(KEY3_INT_GPIO_PORT, &GPIO_InitStructure);7 n: @2 X* |1 [
        /* 选择EXTI的信号源 */  r/ ?# e) W. ^8 p3 y- q0 Z
  GPIO_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE);
8 T5 t* _8 K# h1 w0 f7 c  EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE;9 Z# a# z( @) @* M+ R2 v" C9 F
        " u4 w1 a8 @8 Z# x7 p4 R! m9 }
        /* EXTI为中断模式 */
. W& i0 _" L6 `; E  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;% C- w' _- `  _7 N
        /* 下降沿中断 */
0 x" |. V( N# O; M/ Y. ?0 \  A- q  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
+ C- i5 G) r; k3 o  /* 使能中断 */        & k: q8 B0 x4 X! K' E' d9 W
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;7 \  T7 u0 P6 i+ z
  EXTI_Init(&EXTI_InitStructure);
  b1 m5 F. Z5 N% q- a$ U; r* f       
* v( A& v4 m& E; u9 G
, z- g0 M- `# v# Y+ \3 x1 y//--------------------------KEY4配置-----------------------------
2 p! o+ |+ ~1 k( g9 U' P* y1 C4 H        // 选择按键用到的GPIO
! f. {: i' J" i  GPIO_InitStructure.GPIO_Pin = KEY4_INT_GPIO_PIN;
2 @: F3 N( `6 {# v: J! k0 h  // 配置为浮空输入        
  }( [3 p2 e0 n: t9 V; V/ [  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;$ S: i% B4 a6 j7 v5 u4 r
  GPIO_Init(KEY4_INT_GPIO_PORT, &GPIO_InitStructure);
* h& o3 S9 D* ]0 L  ?4 L3 ^- D        // 选择EXTI的信号源 , \" }; M2 ^" j
  GPIO_EXTILineConfig(KEY4_INT_EXTI_PORTSOURCE, KEY4_INT_EXTI_PINSOURCE); . C3 r" ^3 u+ r3 E
  EXTI_InitStructure.EXTI_Line = KEY4_INT_EXTI_LINE;' c: K# q  |- B3 w
        1 t$ B/ t3 z& @- e; ~& O
        // EXTI为中断模式
. i/ d7 ]4 M& x; x7 P6 V  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;' D  i! x/ U# C2 T( I# m
        // 下降沿中断 3 f  O) z' `! G# z$ P& e- Y
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
1 @9 J: ~  q$ V. L  // 使能中断        
* h, [% ^3 B7 T9 X! K  EXTI_InitStructure.EXTI_LineCmd = ENABLE;' R9 o( F. v2 Y7 R) F5 t) e$ z
  EXTI_Init(&EXTI_InitStructure);" ]: T' E, b( q2 D( _5 V
        ; b0 U6 s6 H5 H  D0 i% M8 a( U
        //--------------------------KEY5配置-----------------------------+ P7 C4 r  G: m6 E7 O0 J' |
        // 选择按键用到的GPIO 9 Y) Q2 b( B7 I
  GPIO_InitStructure.GPIO_Pin = KEY5_INT_GPIO_PIN;
9 ]8 z$ Y0 E1 O# g/ s. y  // 配置为浮空输入         2 j9 p1 e  x6 Q$ w
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
) A, G5 a+ `9 W) w/ H6 J7 M  GPIO_Init(KEY5_INT_GPIO_PORT, &GPIO_InitStructure);4 j8 F  ^" l7 g& P% z" x4 ?$ p
        //选择EXTI的信号源   k- C( j# N4 `0 M; Z
  GPIO_EXTILineConfig(KEY5_INT_EXTI_PORTSOURCE, KEY5_INT_EXTI_PINSOURCE); 0 X3 Q( T4 J* C" u* h
  EXTI_InitStructure.EXTI_Line = KEY5_INT_EXTI_LINE;
4 i1 e+ c6 f6 v       
# N; I! Q# E! G0 I8 ]        // EXTI为中断模式 * W2 k" A0 Q" G4 C
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;/ I7 W3 {/ Q+ J
        // 下降沿中断
. ]/ q  c8 K0 E- q( B; k" G, ~  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;' R9 \! Q3 @2 w8 S' ^& @
  // 使能中断 % F7 m4 z' j; z, B3 D" `1 ^( B
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
! a  F2 m- |& C  EXTI_Init(&EXTI_InitStructure);
* C6 w1 ]0 Q2 e0 q2 @. i        9 \. T  k  `4 j: ]: t
        /*--------------------------KEY6配置-----------------------------*/0 E: t- r5 |* e# J2 h( b
        /* 选择按键用到的GPIO */       
' ]7 a9 X4 }9 O& S; a  GPIO_InitStructure.GPIO_Pin = KEY6_INT_GPIO_PIN;. T) T. Z" }. L, z# R/ M  b. d9 g
  /* 配置为浮空输入 */       
6 Y, |1 b) v, a' w. V* U  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ B6 b6 A1 A! }# g
  GPIO_Init(KEY6_INT_GPIO_PORT, &GPIO_InitStructure);, r0 D4 m+ `3 ~( F; ?2 a- x
        /* 选择EXTI的信号源 */& h& k; s  U. W8 `* u; _
  GPIO_EXTILineConfig(KEY6_INT_EXTI_PORTSOURCE, KEY6_INT_EXTI_PINSOURCE);
( Y" U5 j' C9 g9 b6 g. M  C  EXTI_InitStructure.EXTI_Line = KEY6_INT_EXTI_LINE;
# ^+ q; \; r4 L0 {        ; ?/ v# u) m% @( Y& l& o) {
        /* EXTI为中断模式 */' ?* F* B0 c) U2 q& p5 x# A
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
, ~! d* c; W5 [! Y/ z3 U: m- F        /* 下降沿中断 */
. H" n. R! d0 Z4 ~. }1 T0 j( y  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
+ @5 m: I- M; U8 t/ C6 W9 y+ D  /* 使能中断 */          o3 Z" z2 ]* S4 N( v" J
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;# U! y1 _$ k) Y, y& n7 Y3 p2 T/ y
  EXTI_Init(&EXTI_InitStructure);+ u, {3 ]# H4 _9 q( I+ ^: W' q  o- a4 ]
       
& |( P, W7 D8 H+ l0 y        /*--------------------------KEY7配置-----------------------------*/* m( V6 c9 @7 D3 T  X8 X8 c( `
        /* 选择按键用到的GPIO */        9 ~/ `* |# G) t+ ]) Q: f
  GPIO_InitStructure.GPIO_Pin = KEY7_INT_GPIO_PIN;  h; D( Q1 \+ {2 b. G" |- `
  /* 配置为浮空输入 */       
8 d+ S5 n7 n" {6 l/ ]5 a- r0 c  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
* L9 |& R& E# D  GPIO_Init(KEY7_INT_GPIO_PORT, &GPIO_InitStructure);
; T/ l% a- ]) M) E& D" J        /* 选择EXTI的信号源 */& ^# o9 ]8 v0 @( j# X) g, \
  GPIO_EXTILineConfig(KEY7_INT_EXTI_PORTSOURCE, KEY7_INT_EXTI_PINSOURCE);
3 \: e8 ?. k; L* b) _  EXTI_InitStructure.EXTI_Line = KEY7_INT_EXTI_LINE;! R: R6 L# f. l  A5 i& w/ {* A
       
. s+ w) A( r1 X* I: `+ p        /* EXTI为中断模式 */
; Y6 a( B! z$ x# N  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+ r5 O0 [4 v) _4 c7 T# J        /* 下降沿中断 */
: G) u2 U  @* s' F# ^  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
" l' W$ B5 y7 W8 M  {  /* 使能中断 */       
' j  a7 c3 c, s. `) |4 h  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
0 m9 C' {% w5 z4 L) M  EXTI_Init(&EXTI_InitStructure);
6 y/ T+ v: D8 }# i& Q0 K: p       
) q$ y( @  E* \% ^" i  l" b: ^        /*--------------------------KEY8配置-----------------------------*/
7 j. ]/ r+ t0 q1 g0 [; O% F        /* 选择按键用到的GPIO */       
) s2 {. [( [! u8 w  GPIO_InitStructure.GPIO_Pin = KEY8_INT_GPIO_PIN;7 b8 A' [6 o0 D$ s7 a; Y
  /* 配置为浮空输入 */        ; ^$ g7 X; @& r- M- G7 R) j
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;# O) v% e" Z7 g
  GPIO_Init(KEY8_INT_GPIO_PORT, &GPIO_InitStructure);
3 x* c3 Z: y9 _  D- o+ v        /* 选择EXTI的信号源 */
/ R: ^' T' d1 y( w9 E  GPIO_EXTILineConfig(KEY8_INT_EXTI_PORTSOURCE, KEY8_INT_EXTI_PINSOURCE);
& l3 I6 q( m$ f( I1 I  EXTI_InitStructure.EXTI_Line = KEY8_INT_EXTI_LINE;
6 v- @0 d7 W9 B, u0 u3 F       
1 U+ [! R1 t- [& r0 C% o" v        /* EXTI为中断模式 */7 \$ k- i: _; q/ i
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
) c' i& p. p5 D5 J5 U        /* 下降沿中断 */
/ j  @/ _$ S8 Z( j  h; H8 Y  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;1 ^9 l" W" f& \4 F; J
  /* 使能中断 */        0 o5 ?1 ~) J$ b* m) ]7 @
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;# h  B* \4 q- C8 Y
  EXTI_Init(&EXTI_InitStructure);& @  S; j* \# d3 {; h- z- ~
       
9 Y7 C" X1 T/ f# U' E5 N        /*--------------------------KEY9配置-----------------------------*/8 p' ~$ ~+ u9 v! d- W$ t
        /* 选择按键用到的GPIO */       
- a9 e* ], L! I  GPIO_InitStructure.GPIO_Pin = KEY9_INT_GPIO_PIN;
) C, @" U$ Y, Q$ h) \, j; p  /* 配置为浮空输入 */        . a1 d( m( o; U) x3 v
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
$ k7 d3 Y( o# A  GPIO_Init(KEY9_INT_GPIO_PORT, &GPIO_InitStructure);
: A, [. n* [6 P# f! y' _        /* 选择EXTI的信号源 */
. W3 K( n5 x1 \. r  GPIO_EXTILineConfig(KEY9_INT_EXTI_PORTSOURCE, KEY9_INT_EXTI_PINSOURCE); - r' w) O# n; f5 w( d8 x
  EXTI_InitStructure.EXTI_Line = KEY9_INT_EXTI_LINE;
2 }: c) [; o) o" @1 x' N        8 d* f2 [% \; s% M
        /* EXTI为中断模式 */
5 f" v: H( f' _5 |  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
; R" V9 U' S, o5 X9 f        /* 下降沿中断 */
5 D* R5 r/ c- E! \" s* }4 q5 ~  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;' B! a+ t2 O6 u% g( `" g5 l
  /* 使能中断 */        4 ]  s7 P0 _0 |
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
! b" {' i2 V! Q2 E; \  EXTI_Init(&EXTI_InitStructure);0 g, T; g# ^2 c6 A3 Z
        : N! R8 _, {& Y- s
        /*--------------------------KEY10配置-----------------------------*/1 @: Z8 e( F% ~# H# w
        /* 选择按键用到的GPIO */        " ^' @# I& D( W4 _4 X# A! C% F
  GPIO_InitStructure.GPIO_Pin = KEY10_INT_GPIO_PIN;; W& v( J5 p" u) f' _5 _
  /* 配置为浮空输入 */        # i' w( b' L9 S- r
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
6 p# E* `' f; `, v+ q  GPIO_Init(KEY10_INT_GPIO_PORT, &GPIO_InitStructure);
& r1 a* p3 C- @) F' t) E        /* 选择EXTI的信号源 */
5 i# W# j/ d% \& h3 Z, s7 H  GPIO_EXTILineConfig(KEY10_INT_EXTI_PORTSOURCE, KEY10_INT_EXTI_PINSOURCE); 7 s( a4 L; l; ~# A/ U/ Y+ _
  EXTI_InitStructure.EXTI_Line = KEY10_INT_EXTI_LINE;: L9 I; D4 H) c  T7 v! ]' i
       
' g& Q7 X- k7 ~8 c, y        /* EXTI为中断模式 */: D$ X, G7 Q9 F* X8 L
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
9 R6 k1 J& L& d% i2 u! |1 c- ]        /* 下降沿中断 */
3 z- L2 e! R. f% D- I" _" I- D  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  U* K/ G* J/ k& A6 j. F& [4 F  /* 使能中断 */        , @! G- h7 W4 y6 A
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;3 z9 }' J# a3 R& z
  EXTI_Init(&EXTI_InitStructure);
" ~: T% ]1 K: `/ O# J}
8 f/ D) ~7 v* O5 b3 s, G0 p% Y, _# F. E
void KEY0_IRQHandler(void)
! v- K+ L! d& ]3 L- P5 `# G  ~{4 p  G  l  Z, y7 W8 n
        if(EXTI_GetITStatus(KEY0_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
' x7 i, O' P: _5 D3 G        {3 Q. B- W! k0 J
                delay_ms(20);
" a* [. y* [; R% t* H4 M8 c                if(KEY0==0)       
! d# y& k% i0 l+ I                {- _* C& }- Z( ?: Q1 V
                        Bee_1();" n; _) v4 ~# t3 }0 ]( b
                        delay_ms(100);
6 e; j- ~5 B& p* q; B4 ?                        Bee_0();
4 O" b2 S+ @5 ?$ P                        relay_flag=0;
7 j% r( b$ I* {                        chargetime=0;' m  K7 F% s& w! M, v* i
                        keyflag=0;
+ m: O; [0 y" Q% b# a                }3 F) A3 k8 Y: G! s' H4 L% [& G( G
                EXTI_ClearITPendingBit(KEY0_INT_EXTI_LINE);   //清除 LINE0上的中断标志位        ; J9 x7 M/ p' ?+ I0 f% }2 ]
        } $ B: F( \4 v* H% C5 c. v
}
. A9 G( T# c$ N3 A6 e7 ?
* R8 Y5 S# E, m& X$ wvoid KEY1_IRQHandler(void). k+ U& r; g# n8 a4 V/ {1 [$ y
{
2 T( h% J% f0 ~: N# r% x9 n1 T0 f        if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 0 e% N8 q6 A! t
        {
7 S3 [+ I; j( i% Z                delay_ms(20);
  z$ ?( d9 t# \6 I$ h4 Q( p                if(KEY1==0)        6 q8 N2 p9 s! S# e) j/ y+ C2 {
                {
: k8 B; D- t! P7 f8 U+ p                        Bee_1();0 c& p9 r' T% j- w- g1 L. Y' a
                        delay_ms(100);  u5 W! ~% S4 o! E4 }
                        Bee_0();
! l5 }7 n+ p5 X                        relay_flag=1;
! P$ \9 w1 ~& N+ W% g7 V2 [% I                        chargetime=0;, O( s% x  j7 L% u& r
                        keyflag=0;/ _/ Q$ n3 k; x  E. b
                }
% r" P7 L& e" L  h                EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);   //清除 LINE1上的中断标志位       
* [/ p& t5 c, q" K( U8 @6 `        }7 ^7 h9 T; A4 x& H. Z: w
}
) {) l. D9 ]- x" ^$ G" x( U- S+ v% @7 K
void KEY2_IRQHandler(void)- B  A1 ~% U: |
{& }; j' w( M7 F& T. H7 i6 `* l
        if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
- m; w$ ~7 ^4 r' w  E+ F/ w& P        {. {9 n& E& O) [% \2 U4 Q$ \$ S7 Q
                delay_ms(20);
3 p9 x6 t# A8 W+ n" L7 [* I+ L                if(KEY2==0)       
0 Y  }0 C4 X- u+ E) f2 s                {
. O3 t& B% @6 M" g' f7 q3 h# O& @                        Bee_1();
6 L2 c; z% M0 F- f" w0 c                        delay_ms(100);
* Q! [/ W6 p% B! c                        Bee_0();
$ w, M$ c* Y- i6 D2 @* P# w7 C                        relay_flag=2;: ?) {; L. I* u7 y* {& S
                        chargetime=0;          s# r! Y0 }; r
                  keyflag=0;
8 Y2 C% ^$ y' k% {: P8 _                }) d3 d1 D; `5 r
                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);   //清除 LINE2上的中断标志位        ! a" y" m# Y5 S
        }6 X  `) F6 |  M2 i
}
/ Z8 m4 C5 E  y( E6 Q3 E, l. h- v0 a" q. l% @2 m
void KEY3_IRQHandler(void)/ O# ?. `1 B$ G1 L! `
{
% X1 n2 A# r& `9 t( N        if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 0 u+ a& L" s5 Z* s! `
        {" E" M% {6 e- c6 f
                delay_ms(20);4 t* n0 b/ m5 r7 V5 T
                if(KEY3==0)       
8 p6 @$ o( b' R2 R6 y1 t+ X7 f                {
% r* Q) U, y3 O6 `( j                        Bee_1();
8 v+ q% b! b& Z* N% x                        delay_ms(100);! {3 Q2 D6 g8 c& x8 m% d; ^. ~
                        Bee_0();
3 ]9 T. B. {) m" L6 ], V                        relay_flag=3;' L! E7 |4 e+ `- _
                        chargetime=0;
% h( N6 h/ u7 j7 f- s+ Q( C- Y, R                        keyflag=0;                        2 i0 J/ m/ b  V
                }. h; C5 Q4 j' t6 T
                EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE);   //清除 LINE3上的中断标志位        # a6 F* ~, x0 R' \* N
        }. L$ Z+ R- @( j
}7 ?6 u6 v% f3 ~7 _2 F
  J& Z% Z* c# d# R" b
void KEY4_IRQHandler(void)
7 {" ~+ b, |" _+ \# m. c9 f6 L{% T9 S3 p$ \, I: X1 L
        if(EXTI_GetITStatus(KEY4_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
" y0 @( q" E& z        {- j8 I% G% ], Y# V1 z  @
                delay_ms(20);
+ D: k- [. T9 b8 H3 a                if(KEY4==0)        ( z  L! m- Q' ^0 G9 V( Z7 u
                {7 n+ v4 R% U. \; d. g6 ^
                        Bee_1();7 U1 p1 U* p' z* f7 ?
                        delay_ms(100);, `; O6 G0 v8 F; }
                        Bee_0();2 C& m, h2 r/ \" J/ y3 C
                        relay_flag=4;
7 J* ]% ], S& \  P                        chargetime=0;
4 x1 d& F5 |* m& s% \                        keyflag=0;3 h/ h- G2 g$ h' h2 k6 N% }
                }* l0 l! ^. q& ~8 e2 S+ m. i% d
                EXTI_ClearITPendingBit(KEY4_INT_EXTI_LINE);   //清除 LINE4上的中断标志位       
6 G  z5 M' N: y8 \, V        }
; j7 k& n( K0 [9 [2 E}
( R1 _/ o/ F8 e; G: n+ m8 S# W" T, ^3 U+ ^8 o
void KEY5_IRQHandler(void), z1 P  V. C3 N- a. O
{
0 Z3 s2 V( F1 D+ p        if(EXTI_GetITStatus(KEY5_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 & U* ~4 e) B7 a8 c! u
        {8 {$ B$ O" X: R
                delay_ms(20);2 M. U+ ?3 Z2 ~) j
                if(KEY5==0)        0 m5 k/ p& _: F/ q0 V1 q
                {7 q2 y# M, P# G# O. d0 i7 T1 l
                        Bee_1();, P+ \1 s. p7 o& E
                        delay_ms(100);7 f9 _$ q& [- p; p* k1 o
                        Bee_0();( @# W, W: @) |
                        relay_flag=5;
' h3 l) M  w" N7 j( H                        chargetime=0;       
0 z" s5 G' D: V5 c                        keyflag=0;
9 o! R% ^; w, Q. x6 A                }
9 U! X  E8 u, t8 k% a                EXTI_ClearITPendingBit(KEY5_INT_EXTI_LINE);   //清除 LINE5上的中断标志位        % E/ B+ X+ G7 b, E$ t
        }
6 P# w& k& E& R, T       
2 w4 Y% W5 J! t7 t9 h4 C- [* }8 s$ H        if(EXTI_GetITStatus(KEY7_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
# l8 \2 {) g1 R' ^4 O        {# c* ~4 V" C7 K4 v/ T1 K
                delay_ms(20);6 w. C) v# T& W4 d( t+ ^
                if(KEY7==0)       
& T) K; O5 K) g3 p& v# A                {
6 i! X/ I- E9 e, N, f: u                        Bee_1();
/ l" E6 }3 b# S4 I3 q                        delay_ms(100);
; H2 ]  L  Y& t& x7 c  I                        Bee_0();
: d; v# L1 a  o' A                        relay_flag=7;
9 a* p5 E2 r4 O' y4 S                        chargetime=0;
7 y! c) _. c% ?( d) n0 k$ ]9 [9 D; r                        keyflag=0;
+ |% |# f  Y$ x* l4 H  U                }# W; p% ]$ R5 \: O* ]
                EXTI_ClearITPendingBit(KEY7_INT_EXTI_LINE);   //清除 LINE7上的中断标志位" q. k4 Y$ Q4 O2 y3 r7 l
        }
3 \& U/ V+ N- X3 f        if(EXTI_GetITStatus(KEY8_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 0 W5 ?9 ]; R  x
        {
( \) K( A9 y. b% k; _" C                delay_ms(20);  d, r; P& k4 ]8 ?7 c2 D
                if(KEY8==0)        ; e4 C- }9 Y3 o+ q+ g- D0 v
                {$ i2 A* f' ^# ^/ b- r
                        Bee_1();* r+ ?/ B/ d- c. s9 o) l$ ~
                        delay_ms(100);) C- Y2 C/ t* I" y; c' z
                        Bee_0();& @4 P: y/ Q- p' w0 e
                        relay_flag=8;0 c+ r; D3 g/ u  y/ W+ J
                        chargetime=0;2 J5 r1 ]: p7 L( @
                        keyflag=0;4 d& ^2 j5 n; h% S# M8 \, A* s
                }: p, t9 R9 D  O/ C5 Y& U
                EXTI_ClearITPendingBit(KEY8_INT_EXTI_LINE);   //清除 LINE8上的中断标志位       
6 c! Z3 x6 }. c4 ~1 E        }
3 C8 V8 r( ]- H, B4 w        6 E7 ~) {0 r, @8 Q6 J
        if(EXTI_GetITStatus(KEY9_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 * E; L$ {6 ]- }. t. I
        {) T4 l9 ~2 }/ T' ~. I: A) c1 d
                delay_ms(20);  e$ g9 U9 C4 N0 S6 i
                if(KEY9==0)       
" M  W' H' K" R6 v+ j                {
* c# W& O- e: p9 s4 B) z8 F3 X                        Bee_1();7 e. O' y! Q& N5 Y3 N- B$ i9 q
                        delay_ms(100);
; t& O6 z0 d( ~& r! W: V6 A                        Bee_0();$ }* r+ z$ y/ v: b# j/ j$ k
                        relay_flag=9;4 y" `7 I% E+ ^7 Q5 @( f! k
                        chargetime=0;       
* |% @0 d0 V: J) Y. b+ z9 I                        keyflag=0;
- U. z6 K3 c6 \1 E' z                }6 O7 T2 i2 G# q: C( r7 `
                EXTI_ClearITPendingBit(KEY9_INT_EXTI_LINE);   //清除 LINE9上的中断标志位+ |8 i8 z$ w: O
        }/ b: x% [- T2 @
}
' h, k+ G$ o$ X& @1 ?# H* g, }$ ^( ?* ^

该用户从未签到

3#
发表于 2019-7-12 16:16 | 只看该作者
最好不要在中断里面用延时吧

点评

去抖动怎么处理呢?请指点啊  详情 回复 发表于 2019-7-13 08:56

该用户从未签到

4#
 楼主| 发表于 2019-7-13 08:56 | 只看该作者
孤狼越孤城 发表于 2019-7-12 16:16. n" g- M1 d0 U! V
最好不要在中断里面用延时吧

' N9 |, F& Z" @7 m* C去抖动怎么处理呢?请指点啊+ h7 Q3 w  _# y# G

点评

你就一个键按下就设置对应标志位就行了,然后主函数判断标志位变化去做相应动作,做完再复位标志位就行了。  详情 回复 发表于 2019-7-16 08:55

该用户从未签到

5#
发表于 2019-7-16 08:55 | 只看该作者
maidouzhu 发表于 2019-7-13 08:56: m+ U6 T5 A6 }! ?* p3 a+ A
去抖动怎么处理呢?请指点啊

! m5 A' V( h' ^7 `; h你就一个键按下就设置对应标志位就行了,然后主函数判断标志位变化去做相应动作,做完再复位标志位就行了。
+ M' K% |3 J2 W. a, M+ l$ H
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-5 23:55 , Processed in 0.125000 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表