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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

7 N7 a& u+ V- Y2 N3 m#define KEY0_INT_GPIO_PORT         GPIOC
& q$ X$ D& |4 X+ t8 B' F0 v#define KEY0_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
$ [% o  ^3 L( N: H#define KEY0_INT_GPIO_PIN          GPIO_Pin_0; U" ~1 y* l- T0 U; N3 w
#define KEY0_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC* U0 q3 ?% e! o# \6 Y4 E. o, k
#define KEY0_INT_EXTI_PINSOURCE    GPIO_PinSource0
& h5 B7 |8 }8 I, ?#define KEY0_INT_EXTI_LINE         EXTI_Line0
% E2 m7 B* ^) {) h/ P1 `/ u2 b#define KEY0_INT_EXTI_IRQ          EXTI0_IRQn+ k7 r! @; v. ~- x
#define KEY0_IRQHandler            EXTI0_IRQHandler
. z4 Y8 J+ O! h4 |3 w! C% R
3 A6 O! b3 s9 |/ X# w0 v#define KEY1_INT_GPIO_PORT         GPIOC: e: ]) r" e$ X6 k
#define KEY1_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)+ g0 x* m5 b' a, Y5 {! E5 s
#define KEY1_INT_GPIO_PIN          GPIO_Pin_1) p& G: G$ b6 e" I. k$ e0 {
#define KEY1_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC2 b3 q. l$ o# [' \/ ?% v6 U
#define KEY1_INT_EXTI_PINSOURCE    GPIO_PinSource1
* P4 V: s  G) T+ `4 \#define KEY1_INT_EXTI_LINE         EXTI_Line1
( o8 M- i4 x1 G( X4 K+ h#define KEY1_INT_EXTI_IRQ          EXTI1_IRQn' L- v3 r4 ?0 y. i
#define KEY1_IRQHandler            EXTI1_IRQHandler
8 }0 g5 g- B* @9 P- \% Z) v, V( ]6 M' d7 w- Z+ a% U& J* g1 M6 u4 P& O
#define KEY2_INT_GPIO_PORT         GPIOC( y5 p' }- t, q( ^
#define KEY2_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)! B* ?6 D( G4 |9 H0 Z/ b& E2 x4 w
#define KEY2_INT_GPIO_PIN          GPIO_Pin_2. a0 h6 N& H+ V3 F
#define KEY2_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
, Y% C) `' X- f#define KEY2_INT_EXTI_PINSOURCE    GPIO_PinSource2
! c! i0 P) _; u3 Y, `" a* q#define KEY2_INT_EXTI_LINE         EXTI_Line2
7 g5 I# W/ p/ q# s#define KEY2_INT_EXTI_IRQ          EXTI2_IRQn3 K5 M) E& l$ B
#define KEY2_IRQHandler            EXTI2_IRQHandler
- K7 y: m. u( u
! E$ U2 z% i& d#define KEY3_INT_GPIO_PORT         GPIOC
1 y# g* ~* h/ h8 X0 R#define KEY3_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)% r* Y8 T' w- N$ T
#define KEY3_INT_GPIO_PIN          GPIO_Pin_32 H3 Q( V' I' s+ Y# Q) y
#define KEY3_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
& v0 T0 d5 g) s2 @& R#define KEY3_INT_EXTI_PINSOURCE    GPIO_PinSource3
& X4 `4 ]+ |# `# k) [#define KEY3_INT_EXTI_LINE         EXTI_Line36 ]4 T9 J3 J2 R% e  C% c% U
#define KEY3_INT_EXTI_IRQ          EXTI3_IRQn: S6 ~' {1 E" F# Q' D: R- t% K
#define KEY3_IRQHandler            EXTI3_IRQHandler
  V4 H. L' Z1 _- r. O
; R+ L1 f2 E3 X3 n#define KEY4_INT_GPIO_PORT         GPIOC
& y9 N. w& Y/ q9 ^/ n% E#define KEY4_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
, n  p( ^/ [& N3 K4 q" H#define KEY4_INT_GPIO_PIN          GPIO_Pin_4* \( Y! w' K& O8 z4 v
#define KEY4_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
. v# `7 |! r9 n0 f: b#define KEY4_INT_EXTI_PINSOURCE    GPIO_PinSource4
8 y: B. O# `, s) j#define KEY4_INT_EXTI_LINE         EXTI_Line40 ~7 w5 p- K4 i; ^
#define KEY4_INT_EXTI_IRQ          EXTI4_IRQn
) H4 }) r) f: C# Z$ e2 T#define KEY4_IRQHandler            EXTI4_IRQHandler
5 F2 X* H/ G) F# L% T
. U1 g2 S- q+ }! _+ T2 U7 v#define KEY5_INT_GPIO_PORT         GPIOC
* k& J5 ?8 n2 X) Q2 r6 Z9 t#define KEY5_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
6 F8 g: A5 S! g1 Z6 `- C6 M9 k#define KEY5_INT_GPIO_PIN          GPIO_Pin_5: ?1 W3 p' c1 w6 s8 h+ V
#define KEY5_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC6 \) j# y4 Z7 N; ~7 ?
#define KEY5_INT_EXTI_PINSOURCE    GPIO_PinSource54 j; @' s" ^1 O
#define KEY5_INT_EXTI_LINE         EXTI_Line5! e4 s- [. L1 e3 m" ]6 k9 e+ a7 r
#define KEY5_INT_EXTI_IRQ          EXTI9_5_IRQn4 V- \- Y3 V( J4 B$ k0 b
#define KEY5_IRQHandler            EXTI9_5_IRQHandler
" P* o8 L/ l0 \/ Q' u* h3 s
& J& I" @7 M  G- [#define KEY6_INT_GPIO_PORT         GPIOB
$ }! e; R0 b# }7 ^7 C#define KEY6_INT_GPIO_CLK          (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)& N+ C, Z. ~5 t& ^2 k+ b' i
#define KEY6_INT_GPIO_PIN          GPIO_Pin_15) |* e( _/ u+ p! r, g' I; k- s; {
#define KEY6_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOB4 A+ c5 B) |$ f5 \
#define KEY6_INT_EXTI_PINSOURCE    GPIO_PinSource15  s- ^4 T" J& I
#define KEY6_INT_EXTI_LINE         EXTI_Line15
  Z3 C# C: N4 w0 r5 q; ?' g#define KEY6_INT_EXTI_IRQ          EXTI15_10_IRQn  d0 `: N/ {9 [  {7 @
#define KEY6_IRQHandler            EXTI15_10_IRQHandler
4 s/ U8 k5 I& ]) X* S
0 `2 T8 e& {8 |" e. k+ y#define KEY7_INT_GPIO_PORT         GPIOC& u8 r+ Q& r& b' ~( I1 y
#define KEY7_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
; M# l& d! {0 Y. ~1 n#define KEY7_INT_GPIO_PIN          GPIO_Pin_6: [3 k6 ~3 A5 C
#define KEY7_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
& N# U; j6 h9 v+ B# O, P0 d5 ?#define KEY7_INT_EXTI_PINSOURCE    GPIO_PinSource6
( ^! E) a+ b) q8 t0 t1 F7 M#define KEY7_INT_EXTI_LINE         EXTI_Line6. @( W. N& D& Z) t5 a0 k
#define KEY7_INT_EXTI_IRQ          EXTI9_5_IRQn
9 v. {1 \+ d+ \4 G# v! B& M9 V#define KEY7_IRQHandler            EXTI9_5_IRQHandler7 ^  G/ W* ]/ j4 D+ F" L
5 i! Z+ I7 u! S0 |$ V
#define KEY8_INT_GPIO_PORT         GPIOC, \! P$ ]7 K: C/ G& q& @6 Q
#define KEY8_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)" i; u; G! N; e7 s  c5 [# C, i" N: B
#define KEY8_INT_GPIO_PIN          GPIO_Pin_7
) b& }2 V1 [. a$ T#define KEY8_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC* N3 q+ \6 k3 s7 J/ ^5 Z
#define KEY8_INT_EXTI_PINSOURCE    GPIO_PinSource7
' \$ q7 P2 \" d#define KEY8_INT_EXTI_LINE         EXTI_Line7/ q9 r+ L1 r. m3 g3 W$ \
#define KEY8_INT_EXTI_IRQ          EXTI9_5_IRQn
+ P% G" R8 R, d+ D#define KEY8_IRQHandler            EXTI9_5_IRQHandler+ M/ c% U, x' X, J, D- r
3 K; q* M) p5 ]  v. Y, g! C8 N; v
#define KEY9_INT_GPIO_PORT         GPIOC
' Q0 F; {5 e  C#define KEY9_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO), C/ C+ C/ @/ ]# ?- w6 \2 h
#define KEY9_INT_GPIO_PIN          GPIO_Pin_8
' L+ w( K" p8 K; M% ~! X#define KEY9_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
+ n6 d  u. _; G# f#define KEY9_INT_EXTI_PINSOURCE    GPIO_PinSource8
% C0 ]- w& y3 _/ {' K- r1 T& A6 t#define KEY9_INT_EXTI_LINE         EXTI_Line8
0 ^5 y5 \/ x( R" ?: B: _1 C#define KEY9_INT_EXTI_IRQ          EXTI9_5_IRQn7 B% H+ J& t4 H
#define KEY9_IRQHandler            EXTI9_5_IRQHandler
( f5 Z$ |8 \* r4 y! M% a' k0 {8 c) ~/ ?! t
#define KEY10_INT_GPIO_PORT         GPIOA8 ~$ v- o" Z2 i: q  \/ w/ r/ ?
#define KEY10_INT_GPIO_CLK          (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
3 w  x5 S6 S, H' K* s: g#define KEY10_INT_GPIO_PIN          GPIO_Pin_11
; K/ y" L4 i- t- Q( L  L" k& i% z#define KEY10_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOA
0 c! x  e4 x. Q9 p% @2 m& m#define KEY10_INT_EXTI_PINSOURCE    GPIO_PinSource11' O" r0 h9 y, `- T
#define KEY10_INT_EXTI_LINE         EXTI_Line11
! s9 @2 ?4 @. j/ u. N+ w0 V#define KEY10_INT_EXTI_IRQ          EXTI15_10_IRQn
2 Z8 E; ~4 a4 U# k. M: P#define KEY10_IRQHandler            EXTI15_10_IRQHandler
- L1 i2 O8 {. M, y/ n
" i9 ]1 D9 s! b# |2 l6 _static void NVIC_Configuration(void)
+ q# q' w6 J) x7 d9 t% o, ?9 z{
- `' s* s# p7 F1 `  NVIC_InitTypeDef NVIC_InitStructure;, c7 d/ r$ ~$ ^2 Y! h& _
  
# @5 ~. k. t, w4 ~( N& }4 G% |: F  /* 配置NVIC为优先级组1 */
2 G6 Z& `9 f0 n1 i# q. I  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
' Q7 z- u5 c0 x0 p3 d+ c3 @' o: i  
" G$ c0 Z+ P* ^2 J1 q! f9 d' v* z  /* 配置中断源:按键1 */; J8 _+ [3 o. s1 u2 c6 \
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
0 S( Q  J" p' b1 R9 V1 V  /* 配置抢占优先级 */: T# f7 x7 b" ?$ f
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
) Q( r; V9 a9 [  u+ z  /* 配置子优先级 */
( i& j5 K1 o$ F; V( q3 f* E  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;# O6 y/ h% O" C( O0 e9 H! G9 t% B7 G
  /* 使能中断通道 */
8 f# g: c/ q% U: f8 _  e) X; T  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/ `6 M- m3 A; a# e3 k  NVIC_Init(&NVIC_InitStructure);  ^8 W1 p0 b6 k: P( Z
  
2 D" ^# z# l3 T+ ?4 S4 l  /* 配置中断源:按键2,其他使用上面相关配置 */  
+ [  N; W; E# w  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
( W6 p* y, B/ _; Y   /* 配置抢占优先级 */
9 K, g5 u# }' b) l( `0 F  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;" k0 n8 o: k( H# P6 O
  /* 配置子优先级 */$ t4 k, e7 }( W! E: u- P" t/ N$ t
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;. ~$ Z5 @: A5 ~! _3 {% [
  /* 使能中断通道 *// j7 J8 h! L$ F0 |( W  S
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- Y+ [/ ~/ G3 G4 S+ g2 `8 W4 c

该用户从未签到

2#
 楼主| 发表于 2019-7-9 10:26 | 只看该作者
static void NVIC_Configuration(void)
. B9 l4 x6 j; t{: V9 J& i5 M4 m: _1 E2 U% a
  NVIC_InitTypeDef NVIC_InitStructure;
/ i$ `6 t, S, |/ [- c% j. L  Z1 {  `1 G8 g3 g$ |
  /* 配置NVIC为优先级组1 */
  v; U: @; J5 c) ]/ `  f  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
7 u) K; [# V, h/ }( c- J
% J2 \4 t7 X/ s  /* 配置中断源:按键1 */2 }0 Q6 G7 b; C) ~+ i% H
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
7 @5 e# P4 b1 y9 a3 }6 V8 _  /* 配置抢占优先级 */
0 h, l) B- @. A% w2 R  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;8 _! y9 x" M5 \2 ]
  /* 配置子优先级 */) s2 O$ F$ J% t$ c) Z
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;: B# w( ~3 x7 [  [( S9 J
  /* 使能中断通道 */
( d+ E; }2 k/ z7 d  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
7 q2 f4 c; ^; Z8 A$ K$ w8 r- l  NVIC_Init(&NVIC_InitStructure);# I4 C( I1 J0 `, z. ~' s; i: P

1 {! v3 [# w4 R- i0 ~3 i  /* 配置中断源:按键2,其他使用上面相关配置 */  : g5 O. n7 |  _5 T
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
  u# S6 ]) n- h! n6 g   /* 配置抢占优先级 */
, g* ?, x9 v2 ?' U  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;7 U7 p/ D  g: [1 E6 P- j
  /* 配置子优先级 */; b6 l7 Y- Q9 V. A9 y; l$ c: P& t
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;3 W: x. q7 m' y! O1 @
  /* 使能中断通道 */
, H* a* ]  v9 s  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;: `( I/ ^0 D5 c3 W4 u+ v: U7 X! n4 l
        NVIC_Init(&NVIC_InitStructure);8 V( m0 |& U/ I4 N- m5 T2 d% _
        ) x  F( u5 v% i) G/ J" F2 v* e
         /* 配置中断源:按键3,其他使用上面相关配置 */  
9 r3 R* u# D. J; F* {  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;
& P8 {7 z, U1 C% U9 H4 @" I4 w   /* 配置抢占优先级 */% ~& [) ?0 z# K  f0 ^, ^
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
: D8 {7 e5 r+ E) \4 ~3 \  /* 配置子优先级 */) }+ X! R- ]7 }: t" k% b
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;$ p0 a: M$ u, v* o0 U
  /* 使能中断通道 */
4 N; k! t* X/ c7 M7 H  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;7 x9 d8 h* G" q" ]+ Z
        NVIC_Init(&NVIC_InitStructure);
9 _" w, z# K2 g3 S8 m; v; A- ?       
* N; s" I6 A3 @8 j/ w" {9 |7 U( y3 ^        /* 配置中断源:按键4,其他使用上面相关配置 */  3 \! j. r4 C  @# I/ U
  NVIC_InitStructure.NVIC_IRQChannel = KEY3_INT_EXTI_IRQ;6 b! m+ g) X* ^; g& a2 M
   /* 配置抢占优先级 */
  k) Y: G; S4 F  d% W5 g  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
. ?$ o1 r2 m+ j; w  /* 配置子优先级 */
* Q+ q) r' v. b. |5 @2 b, x2 P  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
) v4 z$ d/ O2 j2 v' }  /* 使能中断通道 */4 ^) A5 J$ J: B% w$ s
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;8 D3 p8 p- G4 d; `1 D0 r. U
        NVIC_Init(&NVIC_InitStructure);) w9 J: W% q# `8 o2 i
        ; l2 F0 M5 @, z% @5 m9 q$ f1 A9 T
         /* 配置中断源:按键5,其他使用上面相关配置 */  5 {6 W2 q: F% i' T) Y+ S. t" i; ?
  NVIC_InitStructure.NVIC_IRQChannel = KEY4_INT_EXTI_IRQ;
$ h. X! T. c' C9 Q" ]0 R: g1 W   /* 配置抢占优先级 */
4 C# `% s. c, P. D) i9 \  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
" R( k9 T9 \5 m9 D) N1 p: n; S  /* 配置子优先级 */9 |8 B7 b  M4 t
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
/ M8 u% w- A6 d  /* 使能中断通道 */* X) \+ O9 S$ {! j! r: F! B: S
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
' n3 N# P: f' m1 G8 r        NVIC_Init(&NVIC_InitStructure);2 x2 h  u+ ^, m3 h# H3 a1 ~
       
) t( `- `: \- u% |# g" J! a- g                 /* 配置中断源:按键6,8,9,10,其他使用上面相关配置 */  1 q5 x, l6 c/ F" g
  NVIC_InitStructure.NVIC_IRQChannel = KEY5_INT_EXTI_IRQ;
* m1 F$ K+ d+ Q* S5 A, G8 u   /* 配置抢占优先级 */
8 Z. O- W2 x4 _% g2 z/ i& v  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;2 }0 H+ {2 Y. r- \0 `
  /* 配置子优先级 */
; x& B0 @- D  i; l( v+ M& N  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
7 e. O' J: B1 G3 V5 m2 `" P  /* 使能中断通道 */
1 d! c+ _0 N0 |  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
6 x$ p2 A& w) M9 A2 u        NVIC_Init(&NVIC_InitStructure);% z: W3 b+ Q7 r4 P0 k+ s
       
' j, N8 u' ?- P/ x" ^/ [; }6 U         /* 配置中断源:按键7,11,其他使用上面相关配置 */  
/ T9 P; g! ~0 q8 J& C  NVIC_InitStructure.NVIC_IRQChannel = KEY6_INT_EXTI_IRQ;0 [4 i- b. p5 R2 o. p
   /* 配置抢占优先级 */
# k1 d0 u% K9 I9 K  `; m" o  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
: H6 g' i6 B/ u8 }+ T  /* 配置子优先级 */4 o( u4 }4 W- J: r
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;" f$ @! l# W$ K5 ]% t
  /* 使能中断通道 *// y+ x( w" }2 \; ?, U3 h
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
1 V$ K, A; ~+ O; U' [+ o6 c. H        NVIC_Init(&NVIC_InitStructure);
3 }: `8 \- F  n2 u        6 ?1 m+ z1 `8 |9 u  l( }7 f4 Q9 p
       
. ^$ ?" [( o9 ^3 ^' {: b4 T7 f}: n2 ~! \1 p" z# z# M% x) Q
- B/ j2 X# t, d( ~2 u& g4 U
/**" ]8 N( M7 F7 }2 M* N- k+ a! N
  * @brief  配置 IO为EXTI中断口,并设置中断优先级
1 H4 F, q' ^+ t+ P, |* Q  * @param  无6 Q5 y6 ?# r! ~, `1 K' I
  * @retval 无5 {$ f9 v) d9 T' `. p+ A% a
  */" Q; O" m& a3 S0 R
void EXTI_Key_Config(void)
$ l! B* s1 h9 T/ m# Q+ N8 R{
# Z2 X6 k; _2 g7 M        GPIO_InitTypeDef GPIO_InitStructure;
/ s1 e( [5 [6 n( _        EXTI_InitTypeDef EXTI_InitStructure;
- u' W* e  U8 [$ }- M; ^) j6 s: r" d+ b7 k7 r! E! y$ R
        /*开启按键GPIO口的时钟*/
# K( W* I/ Q( E9 E# |        RCC_APB2PeriphClockCmd(KEY0_INT_GPIO_CLK,ENABLE);' |5 [' L1 M& R0 u
        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);       
9 Z1 ^: z/ x4 A% M2 ~* U, t. q        RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);
  L3 w. }) [/ f        RCC_APB2PeriphClockCmd(KEY3_INT_GPIO_CLK,ENABLE);
. x( |! W& v( C) d. b        RCC_APB2PeriphClockCmd(KEY4_INT_GPIO_CLK,ENABLE);       
, p# q7 W: x4 r5 N: P! I        RCC_APB2PeriphClockCmd(KEY5_INT_GPIO_CLK,ENABLE);
- q. D) r. p, w: G! Q# D        RCC_APB2PeriphClockCmd(KEY6_INT_GPIO_CLK,ENABLE);* h1 _" k! ]+ p! g
        RCC_APB2PeriphClockCmd(KEY7_INT_GPIO_CLK,ENABLE);       
1 x6 @3 A$ Y6 W& g; x* v2 L        RCC_APB2PeriphClockCmd(KEY8_INT_GPIO_CLK,ENABLE);: x7 c: V( S8 z2 Q' F" k# G
        RCC_APB2PeriphClockCmd(KEY9_INT_GPIO_CLK,ENABLE);
$ M5 d7 [" [! o$ u        RCC_APB2PeriphClockCmd(KEY10_INT_GPIO_CLK,ENABLE);       
1 s4 E9 u$ J0 g" ?; z/ g/ i$ p$ B        /* 配置 NVIC 中断*/" H" m* I. P/ {$ ?- u
        NVIC_Configuration();# R; l6 G/ k8 B0 r6 |

' w# T2 p# g) p: J$ ]# Q5 w/*--------------------------KEY0配置-----------------------------*/
% \3 }7 o8 y' U/ p3 T        /* 选择按键用到的GPIO */       
* Y! w4 T3 z3 ]1 I$ l4 K6 b  GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;
: m6 h4 G+ w  O. E% `1 \& k, ]  /* 配置为浮空输入 */        ( N& g! J, T7 l5 j
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;; w# D! q# i/ @: O/ B
  GPIO_Init(KEY0_INT_GPIO_PORT, &GPIO_InitStructure);
/ V0 u; k! g5 O( J- \% M
) B: l  W3 n9 O' Y) q        /* 选择EXTI的信号源 */
" D# I7 A, f( J: y' N$ u0 \9 K  GPIO_EXTILineConfig(KEY0_INT_EXTI_PORTSOURCE, KEY0_INT_EXTI_PINSOURCE);
! U% ?: c: ~& o  d- O$ h* D( G  EXTI_InitStructure.EXTI_Line = KEY0_INT_EXTI_LINE;1 u+ w: M; s4 f7 \  Q% d
        ) i$ u4 U( v7 Y1 X
        /* EXTI为中断模式 */
/ `- r" F9 W; _  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;+ ?- D/ V3 v. G4 u  b% t$ h9 g
        /* 下降沿中断 */0 b/ w: C+ g- q. l. F5 x
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;5 ^4 @+ E4 t3 A$ D
  /* 使能中断 */       
9 R8 x9 _, ~, j, I1 L. K" I  _" L: D  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
. W6 \) b8 Y& T8 X2 X  EXTI_Init(&EXTI_InitStructure);        % y. P# c, g: h4 d) |( d6 e
/*--------------------------KEY1配置-----------------------------*/
( i2 j/ p# N' A$ s' B! V4 R5 r        /* 选择按键用到的GPIO */       
8 `1 L. j7 b: @6 C0 F# J. ~* d5 ?, i  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;+ s) E# D7 J8 S( j. z" x6 q* V
  /* 配置为浮空输入 */        ! r' T" ^# Q9 g  N' o
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
3 I1 ?1 U2 }$ M) w  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
" C' E9 M& F6 s$ ]0 I' z4 v* e2 D- T0 T, o0 P5 j( W- i* w+ z- [
        /* 选择EXTI的信号源 */
5 ^* ?6 L1 S3 {( M* B  GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); # A" Q! N* F0 j- E) G6 V- h0 Y
  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;+ ~2 Z, ^& X) |; }4 w
       
& e1 q' ~3 f: S+ o! Q" ?1 W        /* EXTI为中断模式 */! `% B- `. j/ D
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;2 p: p. a5 Z  k  ~' ~" ?. ?
        /* 上升沿中断 */! i8 g8 S) L, i& R0 s0 N/ f
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
) _' \- ]2 B6 i  /* 使能中断 */       
  o# k7 N' [8 `& d  EXTI_InitStructure.EXTI_LineCmd = ENABLE;1 u6 P2 W7 b. [- G
  EXTI_Init(&EXTI_InitStructure);/ b3 H4 @6 R( B! }' u" U* Q4 u
        6 j/ W4 x9 Z( ?. d$ d" V8 I
  /*--------------------------KEY2配置-----------------------------*/, l  |: m# i) f4 b7 H! [
        /* 选择按键用到的GPIO */        ; x4 a' ?; H; C0 U7 Q& a
  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;/ a: f9 P5 l& v4 s) P; P; w6 g  h( w. F
  /* 配置为浮空输入 */       
5 D. S& ?# F. n0 D1 @8 ]1 B3 V0 O  [  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
% u8 R$ s) I8 c6 \6 E5 _  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);/ y# G7 [& C; s* i
        /* 选择EXTI的信号源 */
, l, [& l0 ], y/ L# q  GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);
1 c% [, d0 T9 [/ K1 }, n  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;7 Z# ]: a" H  t
       
+ K/ z# r: e3 q+ V; h& X1 ]        /* EXTI为中断模式 */
  D$ J( Y/ {. E" S: W4 j7 Q. K  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;1 X* K% [# X$ g9 }  a% q
        /* 下降沿中断 */
1 @6 u* D8 e1 A: x3 L( ?9 L% G  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
7 J0 y( V0 u- ^+ d# u3 X  /* 使能中断 */       
$ ?4 v/ T$ H9 W. W  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
9 ~! m2 x, b+ E) \7 o  EXTI_Init(&EXTI_InitStructure);
, F( h6 _& a- `7 A3 U: `* N        ; u1 X9 M3 W1 M7 d. a. Y9 u. P
        /*--------------------------KEY3配置-----------------------------*/
& A' R+ N$ W+ ]! V        /* 选择按键用到的GPIO */        + X+ D8 \; `0 s8 ^6 a
  GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;# b% U, j6 g5 H5 @: E  Z5 g
  /* 配置为浮空输入 */        " _; X5 Q4 d9 O) b; M
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
, n7 Z9 V' w6 J, o  GPIO_Init(KEY3_INT_GPIO_PORT, &GPIO_InitStructure);
: M. N+ v6 N: ?/ K: z) e( F        /* 选择EXTI的信号源 */, W% M/ ~% P3 Q2 S( k2 h; }
  GPIO_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE); 9 s3 i: I3 Y& s; P! ]4 T
  EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE;
) o8 E2 I& Q0 i" `       
# j8 D  c+ h7 r% H) s- y, p5 y        /* EXTI为中断模式 */
, N  S4 M  j5 f5 y  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;+ |- a( l. V( H( ~3 l, G
        /* 下降沿中断 */8 J: H9 V1 p7 N/ f
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
# }. H3 a9 h2 L: \5 }2 o& \! w  /* 使能中断 */        8 Z' U3 F, f0 ^0 n0 c6 X/ x6 _
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;2 J5 X4 S  C9 i, O! v& F
  EXTI_Init(&EXTI_InitStructure);
0 u/ o; i6 F# K' L       
2 r8 W6 G9 |; D8 T3 q" H
$ T6 m" j0 a: Z/ n  o9 M: u+ Y; [- X//--------------------------KEY4配置-----------------------------
4 Q4 P4 I# v+ Y, I; `        // 选择按键用到的GPIO
8 L& h/ X2 A! \+ e2 w  GPIO_InitStructure.GPIO_Pin = KEY4_INT_GPIO_PIN;9 |8 b: ]- `  u; h4 C
  // 配置为浮空输入         6 F# V1 a" q8 b* ?2 M- {' {4 v
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
6 H9 B+ J: r( p6 f' v5 Q4 i* [  GPIO_Init(KEY4_INT_GPIO_PORT, &GPIO_InitStructure);
: a& M1 K+ i, }% d% K        // 选择EXTI的信号源
6 [& @- W# ?6 v9 h  GPIO_EXTILineConfig(KEY4_INT_EXTI_PORTSOURCE, KEY4_INT_EXTI_PINSOURCE); ! G. f5 U0 K" W' e9 ?2 ~6 [0 R2 Q( v
  EXTI_InitStructure.EXTI_Line = KEY4_INT_EXTI_LINE;
" e) z9 C9 Y' v# `3 `        8 s6 v* S9 J  Y# i% L
        // EXTI为中断模式 # k6 w% \: h% {$ ^3 x4 P
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
' ~# d2 L5 G+ b; Z        // 下降沿中断
  T8 m/ Z2 e- k  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
1 S7 P. n! p8 o# ~! ~  // 使能中断         0 s* @4 o! h! E9 a0 V
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
3 c* [# j+ z1 M6 y0 {7 I( n  EXTI_Init(&EXTI_InitStructure);! y1 C" S& O1 K9 x2 i" G* ?
       
3 }% r# n2 K! u: m        //--------------------------KEY5配置-----------------------------/ j2 T2 d7 y" j4 B7 A" g, l
        // 选择按键用到的GPIO 2 e* U* v4 |: S5 t9 b
  GPIO_InitStructure.GPIO_Pin = KEY5_INT_GPIO_PIN;& D8 K# J- v! X8 p- W! x$ o3 y( I
  // 配置为浮空输入         1 T2 J$ Z1 @% B( {% Y% k! u
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
9 a! Z% V0 D$ f' {  GPIO_Init(KEY5_INT_GPIO_PORT, &GPIO_InitStructure);  Q! T3 [' `! K+ }
        //选择EXTI的信号源
0 {' b8 a' _4 u7 u' Y, F  ?" A  GPIO_EXTILineConfig(KEY5_INT_EXTI_PORTSOURCE, KEY5_INT_EXTI_PINSOURCE);
/ P: n! {  j, V) j: _5 y: F! i  EXTI_InitStructure.EXTI_Line = KEY5_INT_EXTI_LINE;# h, V5 Z9 N5 V5 Y* t0 i+ q! K" O8 ~
        7 B- `2 g, y- b! ?0 v; w
        // EXTI为中断模式 4 @! n; [/ L- r" u
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;. ~2 I; |7 g' d; b: ]9 P0 W0 O/ O# q
        // 下降沿中断
0 f! J5 i: M6 p! f8 r9 |3 A3 c; x  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
1 g- d/ r2 Y1 s/ H- \( _# U2 e  // 使能中断
% \) u; R; G( G* p5 n' t" ]  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
) _, i( D' z6 f  f: m8 S6 n  EXTI_Init(&EXTI_InitStructure);
  x; A5 J) [/ S! h8 P% u       
4 u( ^" s3 t9 o+ j: H        /*--------------------------KEY6配置-----------------------------*/
) J* L- s4 X* i: w9 z        /* 选择按键用到的GPIO */       
8 F$ [) c0 L# t5 q% ]  GPIO_InitStructure.GPIO_Pin = KEY6_INT_GPIO_PIN;
: ]  G+ f, s9 h4 d  c! M  /* 配置为浮空输入 */       
8 y6 k4 m' z% e% e0 X+ a  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
6 N7 d# i1 P% x, @8 N; p  X  GPIO_Init(KEY6_INT_GPIO_PORT, &GPIO_InitStructure);. ?3 y2 L3 m9 @) c: D0 y7 w
        /* 选择EXTI的信号源 */
% }' m$ a- j" T* z1 y8 \) v  GPIO_EXTILineConfig(KEY6_INT_EXTI_PORTSOURCE, KEY6_INT_EXTI_PINSOURCE);
/ N. o  t: `1 d* \* m# g) V- A  EXTI_InitStructure.EXTI_Line = KEY6_INT_EXTI_LINE;* A, K0 ], Y4 B' h# |: j
       
1 i: t2 Z# t" W3 p0 x        /* EXTI为中断模式 */
4 L: \7 r; E1 x7 d4 K, O  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
1 V5 b: [' N, z9 _4 q+ b9 G- q        /* 下降沿中断 */
2 x2 N2 e! c5 \6 A/ j  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
& J2 o; A0 W3 E4 l4 t4 i  /* 使能中断 */       
. k3 Y, ?9 x( b9 E. S' C. \4 Z  EXTI_InitStructure.EXTI_LineCmd = ENABLE;' |& `) D1 R3 ]4 r! y( k
  EXTI_Init(&EXTI_InitStructure);4 @1 [& P: l0 `7 ?
        % B( Y- i5 C* M' @! t
        /*--------------------------KEY7配置-----------------------------*/  T5 _+ u7 c) X7 V9 T6 L0 N
        /* 选择按键用到的GPIO */        % R* i: b. {7 W' w2 K8 `+ r
  GPIO_InitStructure.GPIO_Pin = KEY7_INT_GPIO_PIN;  f. n+ C% P, m0 N! U4 N- V6 n
  /* 配置为浮空输入 */        + T- }: @$ x0 ^5 D- ~/ f9 T! H' Q3 r) x
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
3 i# o! J8 I3 H" q6 E: U) w  GPIO_Init(KEY7_INT_GPIO_PORT, &GPIO_InitStructure);2 {/ b" W+ G4 ^1 h* `
        /* 选择EXTI的信号源 */
( u9 R% G: e+ ?* |+ t1 @  GPIO_EXTILineConfig(KEY7_INT_EXTI_PORTSOURCE, KEY7_INT_EXTI_PINSOURCE);
. B. n1 j; \$ j- _4 g- Y  EXTI_InitStructure.EXTI_Line = KEY7_INT_EXTI_LINE;7 y+ f0 G6 i8 E  p
       
* k- o: i4 {% n1 ]- }8 _+ V/ ^        /* EXTI为中断模式 */
* U9 t8 `$ W! u7 }" F* _% A  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
* Z6 k& A9 N& w8 _( z+ Z        /* 下降沿中断 */
  t. r; ^$ Z4 U5 h' e  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
6 B0 Y  u/ w0 ]) n2 L, t  /* 使能中断 */       
7 t/ n) k( a" a  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
) p6 S! u( d1 G( _% _. k  EXTI_Init(&EXTI_InitStructure);7 {! m& m2 F: r! r7 M1 h8 t  e
        9 s7 U( V2 v6 I# L
        /*--------------------------KEY8配置-----------------------------*/8 `0 M  M* j% A8 ^) P, Z; T# ]
        /* 选择按键用到的GPIO */        7 v2 S' \+ }' P5 v3 @
  GPIO_InitStructure.GPIO_Pin = KEY8_INT_GPIO_PIN;+ S( t0 A1 ?" L* c4 r' r
  /* 配置为浮空输入 */       
0 O4 a6 p$ a& R6 p, O  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;8 ^; w! }$ _! v+ A, ~! q! C
  GPIO_Init(KEY8_INT_GPIO_PORT, &GPIO_InitStructure);
. Y* v1 y6 H5 {( N) u        /* 选择EXTI的信号源 */
8 I! ?9 y+ [7 m! ]' ?1 m& F  GPIO_EXTILineConfig(KEY8_INT_EXTI_PORTSOURCE, KEY8_INT_EXTI_PINSOURCE);
! q# k4 ^* G& g$ W8 z/ F- N. `  EXTI_InitStructure.EXTI_Line = KEY8_INT_EXTI_LINE;' a6 K( p: b5 O0 B
       
$ ~) {( G" h5 |% O        /* EXTI为中断模式 */' |+ _  |" T8 K. P: _" u
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+ U+ _( W4 l: C# @. x5 a        /* 下降沿中断 */
. t' j  L# l8 ]: R0 X6 }0 s  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
; g1 w" F: Q7 A) B+ U  /* 使能中断 */        1 m% {# G5 @5 G' A
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;% n5 R( Y. M. k
  EXTI_Init(&EXTI_InitStructure);
& c6 Q% b4 r: A( ^9 E4 m' v0 p        2 @  e- n% f4 \3 `3 s
        /*--------------------------KEY9配置-----------------------------*/% K5 H( |4 W; d7 H* P/ S
        /* 选择按键用到的GPIO */        ! A+ ]( t) z; C. B" P. o
  GPIO_InitStructure.GPIO_Pin = KEY9_INT_GPIO_PIN;) S2 E% }+ b6 z, ~4 T* y3 R  n
  /* 配置为浮空输入 */       
9 l. q5 E& m) H3 T( P. @* S/ U  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;, I6 l& t) l2 h- Q- X
  GPIO_Init(KEY9_INT_GPIO_PORT, &GPIO_InitStructure);
' q2 O' n0 q& m) s4 g, T/ N. I        /* 选择EXTI的信号源 */
. a, y) H: @0 c' C1 B  GPIO_EXTILineConfig(KEY9_INT_EXTI_PORTSOURCE, KEY9_INT_EXTI_PINSOURCE);   {  c; @) c4 |1 v& {; ^2 G
  EXTI_InitStructure.EXTI_Line = KEY9_INT_EXTI_LINE;, b6 O& \. C  e
       
+ q; O7 o( L0 V( e) C        /* EXTI为中断模式 */" N" q# F% k) t
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;! A2 `" l6 Z9 X7 G1 k
        /* 下降沿中断 */8 v; J! p2 @# |4 B7 f6 c6 o+ x0 I% N
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
. I3 k1 {( R! G  /* 使能中断 */       
; l* ]7 f8 r# ~/ m. A. Y# v  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
8 y7 s/ D9 A+ v/ `  i4 q  EXTI_Init(&EXTI_InitStructure);
* P( D7 [  ~7 G. [       
. @" Z( k% R& W' ^. ^        /*--------------------------KEY10配置-----------------------------*/
) L9 i* `/ x& C, ~4 h        /* 选择按键用到的GPIO */        - `1 N% g7 _* t) A/ ]/ c5 R
  GPIO_InitStructure.GPIO_Pin = KEY10_INT_GPIO_PIN;
5 Y. l4 o! t0 s9 m  /* 配置为浮空输入 */       
& s: i5 G5 b, k( Z7 W+ a  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;; f" c1 C+ [4 P# w+ B7 X
  GPIO_Init(KEY10_INT_GPIO_PORT, &GPIO_InitStructure);! N3 f) ]' J/ i! _9 o( Y2 E
        /* 选择EXTI的信号源 */
$ E- N5 s/ M4 o! ]9 W: b  GPIO_EXTILineConfig(KEY10_INT_EXTI_PORTSOURCE, KEY10_INT_EXTI_PINSOURCE); " X. L' _3 ?& e. ^, D- M
  EXTI_InitStructure.EXTI_Line = KEY10_INT_EXTI_LINE;  _$ Q' _" \/ i0 E% W
       
) q+ ]. U- H6 \- [$ K% G* i" B! J        /* EXTI为中断模式 */
4 r1 b8 U; l6 ^1 N$ @! P1 v3 I  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;4 Q5 X0 ^3 C$ M4 @/ T$ b. J
        /* 下降沿中断 */6 l6 ?" s, i' z& {8 b
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;& t+ [, B8 k' y5 t# s0 k
  /* 使能中断 */       
% [# H! N- ?+ f0 H% M/ |6 _5 a  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  [. D& F: A1 B; [  EXTI_Init(&EXTI_InitStructure);2 Y: C- t; d) J4 |1 l( y, q/ E. c- r
}
8 ~- n7 N# w4 V1 i/ E# Y' S1 @" d9 c! T4 l9 U, C
void KEY0_IRQHandler(void)
2 \3 |$ e, w9 I; E{" Z  Y* \: B2 C; ~4 K
        if(EXTI_GetITStatus(KEY0_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 , v0 w2 `1 Q# o) Z3 U% b% F$ W
        {- r0 i: [  Q* e, D- R/ m
                delay_ms(20);
% P! }8 B& i/ W# w: D8 |1 e                if(KEY0==0)       
' y4 P* [& _4 `6 `                {
6 |0 S( c  [9 @0 b                        Bee_1();4 W$ M& z8 \- n; P
                        delay_ms(100);( ^3 p0 `2 k& E' M* \  M, m
                        Bee_0();% ?; k" r' q! B( {  L0 Z5 ?
                        relay_flag=0;( c8 ]( v" e! i" Z
                        chargetime=0;
" F7 v9 W: T+ J                        keyflag=0;
+ _) `' L1 a8 o4 D- r; J( G                }
) l8 _1 ~4 B  E3 S' h8 D- ]* G                EXTI_ClearITPendingBit(KEY0_INT_EXTI_LINE);   //清除 LINE0上的中断标志位       
8 u2 T0 |0 n! j# O        } 5 v$ Z! o1 z' y  k( L
}4 C5 d7 h, a* e! x+ X/ O9 L+ L

3 I! _! q/ n! }% S  v$ bvoid KEY1_IRQHandler(void)" Q. @7 s0 d) k9 V1 [: W, q9 Z
{6 z5 ]) g! o) p( `% ^
        if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 - T0 z2 @1 l/ v4 w
        {
8 u  g. l& h9 f8 q' h4 R                delay_ms(20);
: c1 y$ ?+ `1 K! s! O                if(KEY1==0)       
% z$ t3 \, ^$ I% r+ T) ]                {
: T# ?- `- f: B. D5 s                        Bee_1();7 ]4 l3 V2 @" \, a4 G
                        delay_ms(100);
% C5 x% s% m' C                        Bee_0();( K9 s" A5 Z8 M- r/ {4 R! l
                        relay_flag=1;" m5 q4 t1 e! O" ^
                        chargetime=0;1 G5 \3 o, O4 q; E, e% z. Z
                        keyflag=0;
% i2 `, d: ?3 b. p; w* ?( ~5 }9 ?                }
% Y& {4 m9 f6 `5 V( }) m& P" C$ B# v                EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);   //清除 LINE1上的中断标志位       
& y- S+ ?3 g! k) ?        }0 u4 t5 j1 N& Y' k  A0 [8 Y) j9 k/ E
}6 R, \, ]1 U- K0 C$ s
. x% _2 x$ }' r! f6 P
void KEY2_IRQHandler(void); Y" b& I6 X) f  H  j8 E: |) z1 ^
{
$ a' {. h  ?& j) a: ?        if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
6 j  a( S/ p6 b7 ]' E/ e        {
& `/ V6 c- j3 }4 F; f                delay_ms(20);
  a# |: ~, k5 p; ^( E% s' ]                if(KEY2==0)       
% d$ p3 n. ?$ ]% b* M                {
! w" A. N6 u( U1 S# ?" H5 ]- A# M                        Bee_1();6 p3 G; n) }! y5 {0 ^3 o3 I
                        delay_ms(100);
: y/ z* O7 C6 x  J7 [- A                        Bee_0();  v( I; Q, `* \" t
                        relay_flag=2;) Q% m( q) I' L' h$ C. P
                        chargetime=0;       
. v% o7 G6 ]8 W' W                  keyflag=0;
/ a+ @2 A; g' v7 X# z                }/ m: V7 ?# x" _% ~1 ~7 c
                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);   //清除 LINE2上的中断标志位       
& `& l5 z( v* j- R! z        }
) y  k+ N" `6 E5 y1 r) v+ c}
  O' b' h% ^* B) ]3 ?: S2 e, s6 b5 `: I
void KEY3_IRQHandler(void)
! G2 ^& D1 J) y% Q! [, g{9 ]- t1 |$ B) x
        if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 6 _: D' c1 ?! @' Q7 |9 ~! H
        {
  T% G* i) q7 F, D: R# m                delay_ms(20);
/ \5 K6 R) ]( T* R% ]/ j* y4 `% }                if(KEY3==0)       
0 M2 ?! b+ V$ j1 p5 E  O                {
9 _  V4 Q; s# m. c2 M$ @9 \                        Bee_1();
' v! ^$ k9 L1 _0 f/ ~! H8 R3 D                        delay_ms(100);
! l/ f/ i0 G# y) u8 Y8 t1 o" F+ S                        Bee_0();
0 x4 Y" k0 `, n6 y1 w                        relay_flag=3;
0 e- X9 c6 g& C                        chargetime=0;- }; [4 o5 B7 x
                        keyflag=0;                        * O9 B! ?' {9 _+ Z1 n& B# I
                }5 @* P, Z' K5 Q8 e( \! c! R1 t/ i
                EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE);   //清除 LINE3上的中断标志位        8 U; |1 y) g/ W3 |' Y
        }( s8 x9 l. k  r" ]% z/ e
}( o: V$ J. [% a9 \% R+ N

0 T8 c  M$ p/ Z+ Rvoid KEY4_IRQHandler(void)
; x# V# M9 J, Z* Y) Y; t: X" s, {{
8 W1 {1 J# J6 j2 N5 X' a        if(EXTI_GetITStatus(KEY4_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 2 e1 K2 n" f) X. D, h5 R! t  b; g
        {
9 ^' ~/ G1 k8 G0 n( k& A                delay_ms(20);
, }* L' W3 D3 B5 E" ^/ f                if(KEY4==0)        ; I. e% \# c8 O# b
                {" }' M2 D0 t: i% t& a5 s) V
                        Bee_1();
+ g. S6 ?; O: C, w& D+ C6 U5 f                        delay_ms(100);2 r; D& W8 s$ R# j& D0 Q: p
                        Bee_0();
6 J# L* B$ j! E0 r% B$ b$ [                        relay_flag=4;8 r# n" Y8 u$ h; k+ j' X% I* i" U
                        chargetime=0;4 E: f: W& i. w  q; v5 K4 h$ H( O
                        keyflag=0;
' B% @# ?" L% e6 ]! u                }
, x' w/ X2 A2 h                EXTI_ClearITPendingBit(KEY4_INT_EXTI_LINE);   //清除 LINE4上的中断标志位        2 N# C, \; z/ J. x7 l$ U: t' d
        }4 w/ e6 G! l/ i
}
8 P' o0 H" g, h
0 b6 p% e* L7 }# c1 N& y# r+ Mvoid KEY5_IRQHandler(void)1 e0 B/ m% c8 y* r- G
{. `, K9 ?# e5 j. c4 K  B; ^7 p
        if(EXTI_GetITStatus(KEY5_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 + g/ p/ M+ [4 L. r' X# I" K; b' s, @
        {( P/ C! G5 H2 b$ o7 K. b( k; j/ `
                delay_ms(20);
7 d0 m) E( j( E$ z                if(KEY5==0)        7 ~$ z% k3 P, d
                {* Y7 w; o, f. G: X6 Q, c; q2 j) z
                        Bee_1();
, |+ x' s% d6 {+ Q5 h- j                        delay_ms(100);2 r0 n7 d" X' r  ]8 y
                        Bee_0();1 s  m9 c2 K' E& Q: c& [
                        relay_flag=5;# Q% j- ~6 u7 w! A* D  M0 `3 I
                        chargetime=0;        / x9 _, n. j0 }4 E. ?
                        keyflag=0;0 r  Y- U* M; ~* S9 D3 N; D- f
                }
3 r, u* ~+ N* B% P                EXTI_ClearITPendingBit(KEY5_INT_EXTI_LINE);   //清除 LINE5上的中断标志位       
- q$ ?) o$ }6 T: ]6 i* I: T! m6 |        }
1 q( s7 y5 L- K2 A       
& S0 G: Q' a1 L$ m9 b        if(EXTI_GetITStatus(KEY7_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
  x5 j! X+ g, t3 {; W  ^. _/ }+ X        {
( T0 q+ U7 T0 n  g% i. v; K                delay_ms(20);7 l* \0 @/ G' _) a5 Z
                if(KEY7==0)        1 {% m2 p, {* Q2 S& ~2 b
                {
# S( C! ^6 o- Q/ y' X                        Bee_1();0 q' {* F& w  ]( v% U" c
                        delay_ms(100);1 s! O5 \) G5 A5 I( f5 I
                        Bee_0();: P6 ?; _" v  B0 x
                        relay_flag=7;
2 v4 ]( _3 X) |1 X                        chargetime=0;
/ ]' b9 L, ?) A- B$ {6 U4 a! V                        keyflag=0;1 s# _) z* X/ d9 C, r) {
                }" Q# t( _3 w' I6 k# l/ @
                EXTI_ClearITPendingBit(KEY7_INT_EXTI_LINE);   //清除 LINE7上的中断标志位
% S1 r1 ?6 q! `2 V5 Q. h8 ?        }
$ h& Z. M% U. }( _        if(EXTI_GetITStatus(KEY8_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
5 [3 _2 E6 D! {; a# E        {, v: w: W+ N/ t, T7 @2 D
                delay_ms(20);9 j$ _* O* P5 k
                if(KEY8==0)       
2 G$ i, U' ?: \" A7 i                {
, ?- V+ z9 B. O/ @# W0 {* Y                        Bee_1();+ j. j/ l5 ~- v& p, C! ?! j6 Z
                        delay_ms(100);
6 e; @2 i" l/ i& x                        Bee_0();$ I. {; E3 \" b( P' u5 }/ S
                        relay_flag=8;
. G1 K- w* o5 M6 ~                        chargetime=0;" @  H8 l( q: ~/ z# p' v
                        keyflag=0;! @" ?* |" C8 ~. ?1 S
                }) I. L% b+ I& s0 m8 H+ C& I
                EXTI_ClearITPendingBit(KEY8_INT_EXTI_LINE);   //清除 LINE8上的中断标志位        $ r9 i1 G- t1 y. U! A
        }
6 U, d& j5 L4 e/ ?- r9 ~" e        * U1 [; Z3 j. _  g: m
        if(EXTI_GetITStatus(KEY9_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
3 `$ j3 T% p- Z        {
  |( G- v& @& P; C& b! \                delay_ms(20);
9 t& X% q( C- q                if(KEY9==0)       
* w: P, q& f! K. l3 F0 S                {) L; a5 O( n& _2 p# t1 u* g9 r
                        Bee_1();
5 Q3 s1 `9 S6 u: t6 K  S                        delay_ms(100);( [! g9 _' h  v# v  z) I; F
                        Bee_0();/ C, H5 T- B3 [$ ?2 ?
                        relay_flag=9;  @3 @8 p+ t2 n2 X* r- U, n* b; G+ U
                        chargetime=0;        : H6 _3 e1 @9 w
                        keyflag=0;# _0 ]. W+ ^3 f2 h+ V
                }; L/ z: e5 E$ ~4 e9 b% F# j
                EXTI_ClearITPendingBit(KEY9_INT_EXTI_LINE);   //清除 LINE9上的中断标志位
2 I, Z2 W  a4 P/ ~2 w0 x4 ?        }& i0 v6 m2 I! {: m/ @8 u& E8 Y0 q
}- ]( m, u% {: P4 K. s# _" G/ N3 n

% z7 r7 @/ d2 N4 m

该用户从未签到

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

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-7-13 08:56 | 只看该作者
孤狼越孤城 发表于 2019-7-12 16:16
- ?  L2 y3 W( T+ E最好不要在中断里面用延时吧
! }8 v; }. N3 m6 S
去抖动怎么处理呢?请指点啊. h" D% v1 G) N

点评

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

该用户从未签到

5#
发表于 2019-7-16 08:55 | 只看该作者
maidouzhu 发表于 2019-7-13 08:56
; ~: F/ A0 k% X3 v, L; _去抖动怎么处理呢?请指点啊
3 j' N6 D; {' I( H
你就一个键按下就设置对应标志位就行了,然后主函数判断标志位变化去做相应动作,做完再复位标志位就行了。3 t. s$ s6 D2 o% R) h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-29 16:50 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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