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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
+ d, P. x- M! Q. \$ z, f; ?
#define KEY0_INT_GPIO_PORT         GPIOC
$ u: S- Q3 a( N' }3 N7 W8 o& m#define KEY0_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)2 Z( n3 Z) `; W* f1 u6 o
#define KEY0_INT_GPIO_PIN          GPIO_Pin_0) S8 T+ g) B; f: Q; o* A/ W
#define KEY0_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC! y0 ^8 x9 ]  m( K) ?
#define KEY0_INT_EXTI_PINSOURCE    GPIO_PinSource0* I- E2 G$ d$ L9 K
#define KEY0_INT_EXTI_LINE         EXTI_Line04 [% D* t; D+ g- e' T% Z- m8 i
#define KEY0_INT_EXTI_IRQ          EXTI0_IRQn
0 j% f2 |( R3 v) t) e  L9 h: v#define KEY0_IRQHandler            EXTI0_IRQHandler
5 i3 C' J8 C% E' A) M- ~" A5 ]! m" a
2 k9 {$ i# U" l# G% R. T#define KEY1_INT_GPIO_PORT         GPIOC
0 E8 k9 r' |+ ?4 L#define KEY1_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)# l! F/ U- j  r( k  Q  e% w
#define KEY1_INT_GPIO_PIN          GPIO_Pin_1' Y  S+ }# d3 \
#define KEY1_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC8 }# E! _( `7 [$ s* Y
#define KEY1_INT_EXTI_PINSOURCE    GPIO_PinSource16 ?; ]0 S! s$ V- T; W
#define KEY1_INT_EXTI_LINE         EXTI_Line1
/ `# @) S* c# }0 R/ |$ R) U+ b& G#define KEY1_INT_EXTI_IRQ          EXTI1_IRQn
  w% s7 g" s' v: d. K#define KEY1_IRQHandler            EXTI1_IRQHandler
9 T" ^9 \' E$ B$ S+ z( T
( }$ o; G7 r8 t" O* G#define KEY2_INT_GPIO_PORT         GPIOC
$ B/ n. V' X- P" a! c#define KEY2_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)% E5 j# f; ?+ K7 o1 `) _' C( f; O& D/ @
#define KEY2_INT_GPIO_PIN          GPIO_Pin_2. x- C* F. h& b( e' U5 v
#define KEY2_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
3 c) ^$ i1 l/ N! o  b#define KEY2_INT_EXTI_PINSOURCE    GPIO_PinSource25 Z2 c' u+ k$ |* u
#define KEY2_INT_EXTI_LINE         EXTI_Line2# l% k% K) E6 T! E( o+ L
#define KEY2_INT_EXTI_IRQ          EXTI2_IRQn0 g/ _  J6 _$ l/ k* C1 A' Z# r3 v
#define KEY2_IRQHandler            EXTI2_IRQHandler+ X  n- Q" S* h8 E# q

4 R# U+ V4 _& D#define KEY3_INT_GPIO_PORT         GPIOC
9 I/ m2 q# ~- U; s#define KEY3_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)0 q) F  Y% t, F! l( ]
#define KEY3_INT_GPIO_PIN          GPIO_Pin_3" ?1 z; }  a+ g$ ~; x/ P1 \
#define KEY3_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
9 [; a. T0 O  ]# E2 i2 d#define KEY3_INT_EXTI_PINSOURCE    GPIO_PinSource30 ]6 ?" Z" x4 M" `" J' l
#define KEY3_INT_EXTI_LINE         EXTI_Line3* a" P7 C0 w3 N3 O5 G4 G+ g
#define KEY3_INT_EXTI_IRQ          EXTI3_IRQn. ~, V: p  ~1 ^* X, s
#define KEY3_IRQHandler            EXTI3_IRQHandler: V3 G# D) d9 ~' ]

6 i' H  @6 [: v' j  _% _& A7 F4 K#define KEY4_INT_GPIO_PORT         GPIOC
* G, g- e- ~. j. i* b#define KEY4_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)/ t) |' P5 f' w
#define KEY4_INT_GPIO_PIN          GPIO_Pin_4& q) A9 x- ^# E1 i) T
#define KEY4_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
  c. f  M" t5 X6 V#define KEY4_INT_EXTI_PINSOURCE    GPIO_PinSource4
) @- E) {; {. ~7 S#define KEY4_INT_EXTI_LINE         EXTI_Line4
: `" W9 g2 c& C" l: i#define KEY4_INT_EXTI_IRQ          EXTI4_IRQn: o6 j. u2 o( G: |+ ^  }: N6 z+ Q
#define KEY4_IRQHandler            EXTI4_IRQHandler
1 x( L# G' \/ t) F1 K
/ V, p! y5 S* y8 A( ?2 g- c2 F& j#define KEY5_INT_GPIO_PORT         GPIOC
% j' ~) Z* ?# [: `2 t1 ~3 |4 M& g#define KEY5_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
* H: ]. H3 M5 w/ _, \. i% Y4 w5 E#define KEY5_INT_GPIO_PIN          GPIO_Pin_5  V2 b* q  _# C- y: o4 \* @: z8 O3 a; F1 U
#define KEY5_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC1 r  y" N6 ?; w$ u
#define KEY5_INT_EXTI_PINSOURCE    GPIO_PinSource5" N. `+ b# x( C
#define KEY5_INT_EXTI_LINE         EXTI_Line56 H! q' m( Y- @( x% T2 A8 D: k
#define KEY5_INT_EXTI_IRQ          EXTI9_5_IRQn
$ y! H9 U: X3 a#define KEY5_IRQHandler            EXTI9_5_IRQHandler; h- b) y- k5 u

* C0 |! z/ G7 }#define KEY6_INT_GPIO_PORT         GPIOB
- o) ]* P' R: {, B8 i#define KEY6_INT_GPIO_CLK          (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)9 v3 T' Z1 G# D6 G* p
#define KEY6_INT_GPIO_PIN          GPIO_Pin_15: E5 J0 ~: H1 O" I3 W: C8 A! D
#define KEY6_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOB" Q5 s0 w) Y; p$ |3 ?8 W0 [3 X
#define KEY6_INT_EXTI_PINSOURCE    GPIO_PinSource15
7 w8 E% g, `: U8 i7 \' \#define KEY6_INT_EXTI_LINE         EXTI_Line15) P. `4 j, `/ O2 G  W+ \: M
#define KEY6_INT_EXTI_IRQ          EXTI15_10_IRQn
6 {% j; c/ f" I( ?#define KEY6_IRQHandler            EXTI15_10_IRQHandler1 t  J) i) j# u
, S7 Q, Y" K+ ~% {
#define KEY7_INT_GPIO_PORT         GPIOC7 \& a' |- i/ S
#define KEY7_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
6 D" F" @6 }9 l( R' V) Y  z( d#define KEY7_INT_GPIO_PIN          GPIO_Pin_6
# P4 w, V- ?- d4 \( k6 q) u#define KEY7_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
8 ~, ?0 }0 u) H5 j  [' G) O#define KEY7_INT_EXTI_PINSOURCE    GPIO_PinSource6& i$ [( x* ]3 Z3 h0 V  g
#define KEY7_INT_EXTI_LINE         EXTI_Line6
2 y* z; K" u3 H; g#define KEY7_INT_EXTI_IRQ          EXTI9_5_IRQn
8 U9 ]" x% G+ L) Y; @- H#define KEY7_IRQHandler            EXTI9_5_IRQHandler
+ G  u1 |# V6 N' Z
, d6 [2 F" D4 N. r: i) f#define KEY8_INT_GPIO_PORT         GPIOC! A( [2 R* P* w7 ~0 {2 F# J
#define KEY8_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
( |' v& V1 n' l* t9 b4 P; b#define KEY8_INT_GPIO_PIN          GPIO_Pin_7
3 h8 q6 A( W1 G! \#define KEY8_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
+ Y6 T& y8 L( b* u. i) m6 ?#define KEY8_INT_EXTI_PINSOURCE    GPIO_PinSource7
( `" x% P* {* |8 `! w#define KEY8_INT_EXTI_LINE         EXTI_Line7
1 R, L, ]! w( }& s0 E9 \% _7 w( v#define KEY8_INT_EXTI_IRQ          EXTI9_5_IRQn2 C2 b5 N$ P9 H0 t5 }! \+ ~1 A2 Q
#define KEY8_IRQHandler            EXTI9_5_IRQHandler
- G) u/ V7 R; l7 u, W% t9 u! G/ l0 }4 j8 r) l
#define KEY9_INT_GPIO_PORT         GPIOC. C, S1 N/ v& s) ^/ T2 w7 @+ O  i
#define KEY9_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
( Q; l! s. a$ S& I% K  Y  |/ Y4 O% S#define KEY9_INT_GPIO_PIN          GPIO_Pin_8
6 u% u5 N" q) i. x" m+ z( B) h#define KEY9_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
' p9 _, w5 ^# t" T. j+ F$ g#define KEY9_INT_EXTI_PINSOURCE    GPIO_PinSource8$ i+ _8 H. u! S( O3 }4 h' I2 b
#define KEY9_INT_EXTI_LINE         EXTI_Line8
9 Q4 E5 Z" H# l5 Y) Y8 b: J. ?#define KEY9_INT_EXTI_IRQ          EXTI9_5_IRQn
; b) a; L' r$ |! J* h0 V* ^$ e( X$ l#define KEY9_IRQHandler            EXTI9_5_IRQHandler* K! T& C; `: z' _- n8 G: T% w

) R2 z% G; G/ A7 J; O#define KEY10_INT_GPIO_PORT         GPIOA
7 k; w/ v5 ~& u" [9 \0 ^7 J#define KEY10_INT_GPIO_CLK          (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)1 M& R' i7 ^: |2 W
#define KEY10_INT_GPIO_PIN          GPIO_Pin_11/ _2 S" L6 }( @6 g/ M& V( L! Z
#define KEY10_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOA
% r: Z) [0 }" U- W/ c/ M#define KEY10_INT_EXTI_PINSOURCE    GPIO_PinSource11
" L8 S5 I! H6 I9 G1 Z: W- D#define KEY10_INT_EXTI_LINE         EXTI_Line11
+ s- s) d2 a9 A; G. R1 }8 I; T% q#define KEY10_INT_EXTI_IRQ          EXTI15_10_IRQn+ t  a$ ~% _0 N* ^$ ^' h5 [5 P3 b
#define KEY10_IRQHandler            EXTI15_10_IRQHandler
( A# W% E" Y- M7 p8 T) \" Y$ y
( Y5 a: C* E. z1 F- _static void NVIC_Configuration(void)
* X3 [4 q+ e" M{
5 J  y6 C: d: j+ ~0 \  NVIC_InitTypeDef NVIC_InitStructure;
0 i: t- p5 b# v" |  
3 Y# }5 W3 Z. U  /* 配置NVIC为优先级组1 */8 l. A1 ]: X3 M$ @  J# ?
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);: p. K$ A4 ]6 _; k- |! F% o
  # Z5 `- q! |' l5 L
  /* 配置中断源:按键1 */
  @" A# Z1 ?3 d' g  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;2 p: C% H7 U/ y& `1 s  N2 d% Q* l
  /* 配置抢占优先级 */' }7 s2 ?! y% {! O) z
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
& c0 P9 Y2 z6 ?/ {6 l  /* 配置子优先级 */
* D/ V. P* `& a, U3 b  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- R. w4 h$ i# X5 f" C' {/ n  /* 使能中断通道 */
7 P3 H. h0 [0 X, w3 t6 s  F  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) m) o( |9 W5 e. J2 D8 N! @
  NVIC_Init(&NVIC_InitStructure);! y$ z& c) X4 Q% J9 |* T7 R
  
/ c) l( r' n) f; c8 M1 E  w% N# `  /* 配置中断源:按键2,其他使用上面相关配置 */  
" v( z# a; |; F2 \/ ^! h  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;1 g, {' ^, ~  t2 q  I+ q
   /* 配置抢占优先级 */' Q% c- d2 v  q1 N9 h
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;$ a! V9 s8 ^& ]; v4 x) x, i- F
  /* 配置子优先级 */* r% ~& T. p# O! x. P
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;$ H, g" N9 y* W/ R" E3 R' m& L$ w1 T
  /* 使能中断通道 */7 M9 Y6 j. S9 F1 `/ w$ n8 w
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) R5 K% e- ?, F6 Z

该用户从未签到

2#
 楼主| 发表于 2019-7-9 10:26 | 只看该作者
static void NVIC_Configuration(void)  M# T; F9 g9 X1 ]( ?* x
{
. L; s1 ^! [+ t+ B  NVIC_InitTypeDef NVIC_InitStructure;
! F! l: l: v0 A$ f- y0 v9 _9 s# J9 V
  /* 配置NVIC为优先级组1 */
" ]$ R' O6 W# R: w, r  Y4 p' g  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);. A0 |4 I  S/ X- O% T

& U; Y& m( a8 P- M) S% e. z8 j  /* 配置中断源:按键1 */! s6 A- \' B& L/ ]( E% P! r# K
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;  G* d6 c6 o7 ?8 w/ e8 P5 A4 ~$ H
  /* 配置抢占优先级 */
3 y" m; M& g' J: t) t  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
' v# v* @5 G# m( W+ ^/ I* J% n  /* 配置子优先级 */3 T- z9 A/ B, f: e/ M' Z
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;/ I6 P/ f7 m/ ?, x7 ]
  /* 使能中断通道 */: W  M7 x' J. B
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;$ t2 W: l! g! M/ P& ^3 ]3 @
  NVIC_Init(&NVIC_InitStructure);- }3 Z7 Y; M8 l- r

# b/ `; {; T/ v6 Y& c  /* 配置中断源:按键2,其他使用上面相关配置 */  8 }# ?% b9 k/ h: e3 s
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;' h4 n0 D: [) z* E% D* }& j
   /* 配置抢占优先级 */) }4 Z5 z) k. J! x# a3 Y
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
2 B$ @) ]. \1 n7 z6 _( |  /* 配置子优先级 */; a  p* W4 M) _3 R8 S
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
2 F1 b5 h- `: s& L  /* 使能中断通道 */
& b" Q2 M/ P4 X$ x6 a4 ]8 M8 K  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
, e5 s/ ?6 ?8 ]7 Y4 u        NVIC_Init(&NVIC_InitStructure);7 \* D2 U" r! Q# y! w
       
% x- O- {8 ]5 S0 |/ k         /* 配置中断源:按键3,其他使用上面相关配置 */  6 K3 ?7 g0 K; ^- P) \/ `9 I
  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;# d$ u# n; t, e
   /* 配置抢占优先级 */
, I2 F9 J* h" I  z- A& g! v3 R4 D! i  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
8 Z8 q% ?" Q  b  /* 配置子优先级 */' _; \4 q/ Z0 A% E' Q
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;, k" M0 Q7 Y( x0 o* V! @4 x: H  E
  /* 使能中断通道 */
5 q2 G. u% ?$ h! L4 S  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
. R& J* W1 B* R% U8 ?        NVIC_Init(&NVIC_InitStructure);
" `$ n$ A: K0 s" l  J        " }% H  g9 Y- X: w$ b/ {
        /* 配置中断源:按键4,其他使用上面相关配置 */  
7 i2 }9 I* J, A+ H* y3 {: I  NVIC_InitStructure.NVIC_IRQChannel = KEY3_INT_EXTI_IRQ;: I5 @, Z* ?' ?1 u) b
   /* 配置抢占优先级 */
  _! B6 h9 H6 R1 H8 e& I$ U' ~) ^! Z  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
6 N0 O( k1 z& I4 o1 k. Z  /* 配置子优先级 */
3 l, j+ C' h1 J  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
( {  g. [. J2 s6 O" w7 x. S7 [' c  /* 使能中断通道 */8 L, m3 P. e. Z/ p
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
' o  e2 P* U8 g. n        NVIC_Init(&NVIC_InitStructure);
! F3 l* N& m5 f( u9 r       
+ ], l( q- B, q( m# X8 q         /* 配置中断源:按键5,其他使用上面相关配置 */  1 _, y" u, n2 J" w* G5 I  e
  NVIC_InitStructure.NVIC_IRQChannel = KEY4_INT_EXTI_IRQ;
5 d( ^5 R' O) o3 _5 |% ]$ _   /* 配置抢占优先级 */; T: [5 |: ]' @/ q1 ]  F
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;7 v  r$ \9 V; K7 p3 a/ u
  /* 配置子优先级 */( J7 F( E) N& }: }. C; E- t4 h- v
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
( @5 s4 O, m' V' K% @1 q* q  j  /* 使能中断通道 */
4 q/ [7 L  }9 s* @) w7 y8 f3 B  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
0 q4 b! l9 @6 E' `' w# ?. o! N        NVIC_Init(&NVIC_InitStructure);
# I3 }  y6 B( A" n       
$ V/ F' I7 X+ G0 j8 h6 B) r9 @                 /* 配置中断源:按键6,8,9,10,其他使用上面相关配置 */  
3 r  Z! ~1 }0 j' Q  NVIC_InitStructure.NVIC_IRQChannel = KEY5_INT_EXTI_IRQ;5 z, K* x$ K, c4 z
   /* 配置抢占优先级 */
/ x/ z7 d2 ~1 P2 T2 E+ _0 x' A  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
! I/ l& g+ p- Z6 a1 K! m  /* 配置子优先级 */
$ n8 C( J! r5 }$ M  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
3 P6 q+ E7 Z6 C  x$ T, j" W; d! \8 l( k  /* 使能中断通道 */% F+ E/ I  V% ]6 Q# B" X
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;, e( Q8 m" b6 X1 a8 q5 x4 z/ _
        NVIC_Init(&NVIC_InitStructure);
* o' d( v9 f8 x% Y3 [        $ ~7 Q) H6 `+ F# W% u1 w' `
         /* 配置中断源:按键7,11,其他使用上面相关配置 */  + v) `7 ]- H+ ]# s5 }6 g( Z
  NVIC_InitStructure.NVIC_IRQChannel = KEY6_INT_EXTI_IRQ;
% [+ ^; c/ a9 b   /* 配置抢占优先级 */9 Q% B3 ^! t- J0 u* u& l/ _7 v0 X1 z. w
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;! m& h) E, X. i1 A, E# S
  /* 配置子优先级 */; U. h9 [: h% }/ M! H. U9 Y4 n
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
" |; X0 T! c5 t& o( A  /* 使能中断通道 */- N9 V8 p3 y$ L7 ~# m6 b% r
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
2 k8 _6 r: u! ~" w3 w        NVIC_Init(&NVIC_InitStructure);9 ^! @' Y) k2 U3 W3 ^
       
* A( O& E7 J2 r+ ^        . J- `- h" B7 a7 G, R
}- v8 I/ U  w; @
; f$ W7 x9 T/ X( S# A2 Q- ~
/**
& ]  S$ I* ^' }9 w' X/ o  * @brief  配置 IO为EXTI中断口,并设置中断优先级
  |4 M! X9 o$ J1 I! l# r  * @param  无' N  ^- p: |/ t$ Y2 Y. r9 L
  * @retval 无
* Y9 Y; }  q3 \  E7 G1 O  */
1 F2 N" `4 `  m, Pvoid EXTI_Key_Config(void)
7 T& f2 `/ z: ]! J{) C: V# R" D; D, \! A* i! _
        GPIO_InitTypeDef GPIO_InitStructure;
! o7 L  e. R! V        EXTI_InitTypeDef EXTI_InitStructure;! h: M# k8 z% D: d3 Z. X

5 ]+ {) [) w% V0 p7 [9 ~, l        /*开启按键GPIO口的时钟*/  C: t6 B' U1 N
        RCC_APB2PeriphClockCmd(KEY0_INT_GPIO_CLK,ENABLE);5 [4 y0 A9 C" c, L- R5 X
        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);        - d4 }/ y2 y3 A4 d0 i+ ?( o  y
        RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);! y1 L0 j2 E+ ]9 j2 i
        RCC_APB2PeriphClockCmd(KEY3_INT_GPIO_CLK,ENABLE);& T/ H. `5 U+ l$ i# ]: ^
        RCC_APB2PeriphClockCmd(KEY4_INT_GPIO_CLK,ENABLE);       
; ~- A7 m, o& D( J" r: g" f        RCC_APB2PeriphClockCmd(KEY5_INT_GPIO_CLK,ENABLE);# D2 \, k( N7 k; ]; S- i& x
        RCC_APB2PeriphClockCmd(KEY6_INT_GPIO_CLK,ENABLE);1 h4 a) v8 j& ?0 |. u
        RCC_APB2PeriphClockCmd(KEY7_INT_GPIO_CLK,ENABLE);        0 U* ~! o7 s0 k, m3 X. l7 t
        RCC_APB2PeriphClockCmd(KEY8_INT_GPIO_CLK,ENABLE);1 O) H( D# o& X
        RCC_APB2PeriphClockCmd(KEY9_INT_GPIO_CLK,ENABLE);6 f7 ]* S4 n+ c! Q3 P7 X
        RCC_APB2PeriphClockCmd(KEY10_INT_GPIO_CLK,ENABLE);       
6 O/ R- @2 R/ |% o& u7 z* T0 o6 a        /* 配置 NVIC 中断*/
+ K3 i8 Q9 ^6 v0 a* |        NVIC_Configuration();" B( D- O3 U* u/ o

$ c- Y' `* m, A* N6 X/*--------------------------KEY0配置-----------------------------*/9 E" J1 \) K# g. j
        /* 选择按键用到的GPIO */       
- h# T. F; W' g9 \& s# |, I  GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;
3 g8 l; A+ r0 u  /* 配置为浮空输入 */       
% S1 o. n, M& v$ M/ y7 v* ^  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;( x; F( w' e1 I( H2 _
  GPIO_Init(KEY0_INT_GPIO_PORT, &GPIO_InitStructure);
# a3 Y) I* [1 h2 s4 a
' {9 z, @# C/ Q) |& V* _" b        /* 选择EXTI的信号源 */- |, v8 N! E" {- v1 c- F% p
  GPIO_EXTILineConfig(KEY0_INT_EXTI_PORTSOURCE, KEY0_INT_EXTI_PINSOURCE);
" D1 G6 x. ]6 m% u1 F  EXTI_InitStructure.EXTI_Line = KEY0_INT_EXTI_LINE;7 q; u, J1 K# l. P0 m7 C& S0 t
       
: u$ x3 j/ y) Y        /* EXTI为中断模式 */' c  D+ D6 D/ D  K$ |0 \! G4 b4 Y- M
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
! u6 e& \1 L6 ~8 `8 P5 ^2 ?        /* 下降沿中断 */
2 h1 }* F1 E7 C# [2 b. |/ F) V6 y  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
$ i9 U$ b2 }) l' t! }  M  /* 使能中断 */       
% k$ Z( b' h( |  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
" a. F, Q. a0 C" r  EXTI_Init(&EXTI_InitStructure);        " o4 L' K0 p' E+ S3 w2 Z6 b* Y
/*--------------------------KEY1配置-----------------------------*/( z( V$ l  ~6 n6 P( ^1 a
        /* 选择按键用到的GPIO */       
% b1 e4 V- V1 p  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;2 ?$ ?& ~4 c/ M, N% {& p6 K8 A
  /* 配置为浮空输入 */        * K$ z1 c% W' ^) e- u
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;$ j0 E3 [* F) X& o, C8 v
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
- P7 G/ H) d: H: {( _$ u# H: n6 C# ^. z/ E; \' y3 A
        /* 选择EXTI的信号源 */' Y5 e2 X( ~- ?7 T9 @; M6 q
  GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); , Z' F" s* r0 n# t, Z7 P% a
  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;) [* D3 d2 U) O7 B4 [
       
" D, I+ G! I& a4 E4 k        /* EXTI为中断模式 */
( W- M/ H6 T4 Y% f& z  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;( I$ c6 q7 ]$ O- J2 K/ ?, H
        /* 上升沿中断 */2 M8 F9 c1 {8 M& x( l4 A# s
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;& a+ O, F  m& v! [8 U" t% @
  /* 使能中断 */        ! S. V( }, m2 c3 H3 v+ ?' E/ Y
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
/ F5 z8 ~& l! U5 l  EXTI_Init(&EXTI_InitStructure);
1 o& W5 t$ J3 g6 `0 E& ~# ~       
8 t% Q$ ?3 \" H8 B/ y8 X9 M  /*--------------------------KEY2配置-----------------------------*/" W- e6 k0 ?; F2 G8 E) e4 \4 u5 G
        /* 选择按键用到的GPIO */       
' _) z$ }" N0 |% R' a  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
1 H9 p! [; z$ i* A% h; E  v  /* 配置为浮空输入 */       
. Z  O! h+ F- e  o  G& _$ H  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;' S% k$ `( r1 [% x: Z( `; n, E
  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);9 Z7 d) h& G: w2 x3 x& U! R4 @
        /* 选择EXTI的信号源 */
3 z9 C, K) O- N! Q% }0 C  GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE); ; Z8 ~- \+ {2 y; F7 A7 U) @7 ~3 a) E
  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;
5 i) T+ f2 E6 e$ g5 b* @- F       
0 v% ]0 A) W/ t  V; N$ i        /* EXTI为中断模式 */* C) b% x* t* a, I8 L
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;, y$ D" T$ i0 r! a
        /* 下降沿中断 */: T" k1 e' m' [8 X
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
8 l3 b3 d3 j/ ?# `1 h9 p2 {4 ^/ z  /* 使能中断 */       
3 v, k+ j$ m# A0 S! n  EXTI_InitStructure.EXTI_LineCmd = ENABLE;' S* e+ g& E5 x, i' F
  EXTI_Init(&EXTI_InitStructure);
5 \' V5 S( l; `' R7 F! b" b4 Y" d       
* Z% e" \8 u- O" n- r        /*--------------------------KEY3配置-----------------------------*/2 z& w' _  n7 \$ Z& @# x
        /* 选择按键用到的GPIO */        % i& G* N0 s. [9 Y' D5 _
  GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;
3 h' x0 U0 V0 Q' x6 C  /* 配置为浮空输入 */        7 v0 d& m2 w! y4 ~+ D
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
4 N: m# W7 E5 |7 F  GPIO_Init(KEY3_INT_GPIO_PORT, &GPIO_InitStructure);, ~, v; `( Z. Q
        /* 选择EXTI的信号源 */
/ @7 D( K; v+ `  GPIO_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE); # z. x  t! y! |% G2 I- \& I
  EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE;* C$ W" k' y! R; j) I
       
0 S! q8 H2 ^# v6 E* S        /* EXTI为中断模式 */
  q7 P2 Z: \9 \/ v  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
2 @7 d0 p) X2 M: D3 v8 k' I        /* 下降沿中断 */8 }+ [0 d3 _$ l% D3 ^1 k
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
: u* ^1 e, o5 G$ T$ V1 U  /* 使能中断 */        1 a+ S6 d7 D% W" N8 u2 D; o/ H( M! o3 S
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;; ^) C( X( M' l  ~4 ~; H! K
  EXTI_Init(&EXTI_InitStructure);
) ?1 y3 q% C0 F- |       
: X6 a  Q- Y0 W$ c
6 ]# B- \7 p. A$ f. C//--------------------------KEY4配置-----------------------------, |* o8 q/ @7 g9 |
        // 选择按键用到的GPIO * w4 w+ |  r9 K" k2 p" ]' L# w
  GPIO_InitStructure.GPIO_Pin = KEY4_INT_GPIO_PIN;
) y1 m3 ~1 }9 d/ H% x3 N  // 配置为浮空输入         4 o3 |/ o" y( M
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;( r4 d9 I' `, y  f* Q) E
  GPIO_Init(KEY4_INT_GPIO_PORT, &GPIO_InitStructure);
8 k; s8 `- W8 p4 |% [( c        // 选择EXTI的信号源
% l* V6 R+ T; y9 E; C  GPIO_EXTILineConfig(KEY4_INT_EXTI_PORTSOURCE, KEY4_INT_EXTI_PINSOURCE);
; j( E- h9 Z8 G8 |1 Y  EXTI_InitStructure.EXTI_Line = KEY4_INT_EXTI_LINE;
/ e" _( R- f. ^% l       
4 v1 j% K6 L2 s' R9 T1 R5 }        // EXTI为中断模式
( B! e3 P( P8 l9 p  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
8 X1 ]$ B+ t5 K+ M1 ~, h        // 下降沿中断
! x+ W1 E' I9 X* T) S  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;- j- [2 B( F" o, u4 f6 c4 P
  // 使能中断        
$ V0 ]$ a) D4 }$ R; ]  EXTI_InitStructure.EXTI_LineCmd = ENABLE;; |; {. X, `+ u- i( q/ C
  EXTI_Init(&EXTI_InitStructure);
: K& Q2 ^2 ]( _$ p       
. U+ \+ h, C) A4 ^& j+ K* I        //--------------------------KEY5配置-----------------------------
8 h  R9 y$ G3 [0 J+ u+ i        // 选择按键用到的GPIO ' R7 A" e( N, S) Y, Y5 l
  GPIO_InitStructure.GPIO_Pin = KEY5_INT_GPIO_PIN;) P$ r; F* T, {5 }  w4 r+ I7 J. ]
  // 配置为浮空输入        
" U- X+ ?8 U" d: b# Q$ j  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;5 O' }6 K; b9 y
  GPIO_Init(KEY5_INT_GPIO_PORT, &GPIO_InitStructure);
5 Q; Z$ N) G* p6 c+ L( Y        //选择EXTI的信号源 / m# A1 P/ ^' R9 C4 w) C. n
  GPIO_EXTILineConfig(KEY5_INT_EXTI_PORTSOURCE, KEY5_INT_EXTI_PINSOURCE); , d+ s1 O% ?/ W0 c5 n- A
  EXTI_InitStructure.EXTI_Line = KEY5_INT_EXTI_LINE;$ U% e$ o- a9 N/ ~5 t# u
       
; i; S% F) `% r) D5 C  O* q        // EXTI为中断模式 / e4 Y; n1 e" C) u! P  ~2 A
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
3 T+ J# s' F, y! m+ B( u        // 下降沿中断 2 ]- D0 s, v" V, J; v$ H" w1 t
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  @8 h; |* `- F( ^/ O
  // 使能中断
# R! g0 @& G0 c9 e( a- m* f  EXTI_InitStructure.EXTI_LineCmd = ENABLE;/ f* U% E1 }5 b
  EXTI_Init(&EXTI_InitStructure);
* r5 ~" a* V) d2 W. `+ \6 ~       
0 d$ ?* T% M5 `1 ^( _0 v. M( }& @5 n        /*--------------------------KEY6配置-----------------------------*// {- r! ~  k9 ?. }" Z; f
        /* 选择按键用到的GPIO */       
$ e( U- o# i3 Q  GPIO_InitStructure.GPIO_Pin = KEY6_INT_GPIO_PIN;$ U5 l6 c" R" z0 u) M
  /* 配置为浮空输入 */       
% B9 J- e$ k4 M" r! k+ A5 r  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;% I: x3 @0 U3 h8 R( R! k
  GPIO_Init(KEY6_INT_GPIO_PORT, &GPIO_InitStructure);
9 J2 P3 }0 j( e) }        /* 选择EXTI的信号源 */  i, F, P: [7 C. z
  GPIO_EXTILineConfig(KEY6_INT_EXTI_PORTSOURCE, KEY6_INT_EXTI_PINSOURCE); ' O# U+ \' m" M, Y& ^- J
  EXTI_InitStructure.EXTI_Line = KEY6_INT_EXTI_LINE;3 u) X  U! ?5 T% B3 W
        $ W; L: r$ [4 ^6 {+ x0 Q. z
        /* EXTI为中断模式 */
* ^$ C( N  v; o  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
# k6 M5 g9 q  T) a        /* 下降沿中断 */; d* K: [/ H# L  M3 k
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;- c0 D4 s% i. V. p" W1 T! n0 {
  /* 使能中断 */        # s9 V& M( a& ~4 W+ u
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;( k0 C! z( i. e: [: u' k
  EXTI_Init(&EXTI_InitStructure);
$ Q0 X2 a8 J) x       
, M9 Y5 t6 L! v8 M1 ^0 V        /*--------------------------KEY7配置-----------------------------*/
% K3 J2 p7 h1 p* ?1 x3 J        /* 选择按键用到的GPIO */        0 y  s- S7 j: M1 e+ D
  GPIO_InitStructure.GPIO_Pin = KEY7_INT_GPIO_PIN;- \# X  O# a1 ?. Y* ]
  /* 配置为浮空输入 */       
* b* g  K" F" H( g( s4 `  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
3 }6 [4 r, V: J) U  GPIO_Init(KEY7_INT_GPIO_PORT, &GPIO_InitStructure);
1 r' u( S3 C0 P7 d) ^! l, l        /* 选择EXTI的信号源 */
4 h/ Z& z3 q. n: j, p2 f" h  GPIO_EXTILineConfig(KEY7_INT_EXTI_PORTSOURCE, KEY7_INT_EXTI_PINSOURCE);
& \; k8 e( F. `/ e+ j  EXTI_InitStructure.EXTI_Line = KEY7_INT_EXTI_LINE;/ P' j8 ]' T# e. \' J: @8 x
          L# H3 Z; p3 \4 `! t$ C
        /* EXTI为中断模式 */) _* B8 G8 o4 n& R( @* j  Y
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
' Y! V2 P/ Y5 L+ F1 |        /* 下降沿中断 */
: |6 z- t+ |3 v1 b9 I) [$ ?, Y9 w  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;5 Y1 O3 B0 {& s' X2 O9 e0 X- T' p
  /* 使能中断 */       
+ u1 x# Q" U. Z/ Q% H, o  EXTI_InitStructure.EXTI_LineCmd = ENABLE;- G) _* y" Y5 |8 o1 w5 O
  EXTI_Init(&EXTI_InitStructure);
% C1 A, v* R2 z. J       
7 D! e$ t% x* Q, b        /*--------------------------KEY8配置-----------------------------*/
4 q* h8 H7 B, q! r5 M% U2 h        /* 选择按键用到的GPIO */        ) s: C" p: [* k7 X% T
  GPIO_InitStructure.GPIO_Pin = KEY8_INT_GPIO_PIN;6 ]( L8 {+ t7 ?- Z2 k  p4 ]* Y
  /* 配置为浮空输入 */        , V2 V# u  ]! j( j$ T* b  `$ u( i
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
1 O: _4 u" x+ S9 f; V" o" h5 e6 b9 C  GPIO_Init(KEY8_INT_GPIO_PORT, &GPIO_InitStructure);
% V9 @* K: R- b. F$ T: M7 c: {( \- A        /* 选择EXTI的信号源 */
. \5 c' x  j5 N' l  GPIO_EXTILineConfig(KEY8_INT_EXTI_PORTSOURCE, KEY8_INT_EXTI_PINSOURCE);
6 y$ e# P% [7 w, C  EXTI_InitStructure.EXTI_Line = KEY8_INT_EXTI_LINE;
, x8 W5 _. d7 j/ t& o        ) `1 `9 L/ X- u& s( P8 B
        /* EXTI为中断模式 */
4 M1 A" g. K) }- w5 O  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+ W( b. @& b- e" s        /* 下降沿中断 */
- K7 V* x( o2 v, A9 W& Q  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
6 P9 }; k' }5 W/ e% a  /* 使能中断 */       
" ~' i$ C7 x3 k# d2 u& y  EXTI_InitStructure.EXTI_LineCmd = ENABLE;4 P$ k% c. J! p& K8 g
  EXTI_Init(&EXTI_InitStructure);
0 D1 s- n1 l" c/ D3 [0 E* H        1 e. n! }  \# j& \0 y9 ]
        /*--------------------------KEY9配置-----------------------------*/
* x7 e& c0 ~7 @" `  `: R+ I: O  h0 N        /* 选择按键用到的GPIO */        9 t& @1 F# t% x; q4 `- v
  GPIO_InitStructure.GPIO_Pin = KEY9_INT_GPIO_PIN;
# i3 Z% b1 v6 d: p- G  /* 配置为浮空输入 */        + u/ U5 E5 k8 W; o  N) v0 b5 u% o$ g
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;) v& G6 E: U" t" Q) J$ @, h3 T/ q
  GPIO_Init(KEY9_INT_GPIO_PORT, &GPIO_InitStructure);
+ ^- ~; m7 W, w& G8 o        /* 选择EXTI的信号源 */
7 o: y9 L, k- {/ @& E, H, g  GPIO_EXTILineConfig(KEY9_INT_EXTI_PORTSOURCE, KEY9_INT_EXTI_PINSOURCE); 8 y! O8 {0 \- n. g
  EXTI_InitStructure.EXTI_Line = KEY9_INT_EXTI_LINE;
, _1 w9 ?$ Y% l3 e: O, s: C$ u        4 J% Q' @3 j0 G$ K3 m& Y" g4 S1 T
        /* EXTI为中断模式 */
, p, z" g& @6 y* |- [3 o) I+ X8 Z  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
1 `2 d' U/ c, m9 }) R* e        /* 下降沿中断 */0 v7 E) E" K5 _4 a: }5 e) F
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
' o( f# _8 R9 x2 Z  /* 使能中断 */        6 r4 y  I3 d) w3 O1 Y
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
' C/ q1 A) K% q: z6 n  d: h  EXTI_Init(&EXTI_InitStructure);& Z. z8 y& F1 R$ P
       
+ Y2 i! X1 ]$ t6 i8 a5 l        /*--------------------------KEY10配置-----------------------------*/" J' J3 Q9 G4 k* |0 M; b# \
        /* 选择按键用到的GPIO */       
! P  R) a+ }4 c. \  GPIO_InitStructure.GPIO_Pin = KEY10_INT_GPIO_PIN;/ a8 J+ B# m" h
  /* 配置为浮空输入 */        ' c. w# T: T1 _% G) E' X
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;1 b1 @  H" t) M1 k/ \. W: m0 k
  GPIO_Init(KEY10_INT_GPIO_PORT, &GPIO_InitStructure);
( c. z6 L) ~: w7 n' d        /* 选择EXTI的信号源 */9 r0 F% U+ _0 R) Y7 W% l* X2 K" j
  GPIO_EXTILineConfig(KEY10_INT_EXTI_PORTSOURCE, KEY10_INT_EXTI_PINSOURCE);
7 F  ?: w9 [( Q) o( w% E5 E  EXTI_InitStructure.EXTI_Line = KEY10_INT_EXTI_LINE;7 R& I7 P. b+ `9 b2 W( L# ^; B
        2 ?2 y) I0 e" Q
        /* EXTI为中断模式 */
% Q$ O/ i  s/ \1 q( h2 n  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;) B& c+ z" q# n7 L) b
        /* 下降沿中断 */# u4 @; W% G. C# \. ~" T
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;' r0 l9 Q4 W; f! N; B+ S
  /* 使能中断 */       
( u) u5 e- R9 a" j0 V  z, l  EXTI_InitStructure.EXTI_LineCmd = ENABLE;" h7 V. H' d+ ~8 E; J" J
  EXTI_Init(&EXTI_InitStructure);( Q% S) Y( l" N" w8 U, w4 {8 J( {: a
}
, O5 y/ j: B/ G; s5 L  U% r) }# C: r* u8 g# q- f
void KEY0_IRQHandler(void)
# f5 d6 g2 Y9 {2 z4 G+ z# w" @0 e{
& m9 p: l  F; F/ c* j5 r        if(EXTI_GetITStatus(KEY0_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 + X+ Y; n, E. i  J2 t
        {
& v# I8 ~! k; t. w; k1 F                delay_ms(20);, q3 s1 v: |: m4 k( P' n* N$ a. V  q
                if(KEY0==0)       
' p" ?2 E" @( @                {
0 ]* X( B( T% r& _/ B                        Bee_1();
, ~" V( y8 N* {                        delay_ms(100);/ V# [7 P, Z1 C# d  ~/ H. z
                        Bee_0();# f1 G& [) [+ D' z
                        relay_flag=0;5 X8 f1 l( q1 `  s
                        chargetime=0;1 ^& i6 c. O$ a! Z% x2 c; J
                        keyflag=0;
: Z# P5 o) q# K# s$ u- h  b                }% ?4 l3 R$ v0 N8 u5 C4 X8 o# U) g
                EXTI_ClearITPendingBit(KEY0_INT_EXTI_LINE);   //清除 LINE0上的中断标志位        ) t2 R. s) F5 x0 x! I$ l: r% L
        } 3 b- c( d  e- X5 j( k: B0 _* p
}$ {$ W  r1 M: R. n7 u2 {9 K, T

: T% U8 A1 ^: y, s- y5 Z+ h8 }5 Nvoid KEY1_IRQHandler(void)4 m* ^# K6 J3 O5 }$ E
{2 y3 ?' h# ?7 E/ z; S) F
        if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 ) f! k0 ^  ?- C1 ]& ^  w; f# m
        {6 C% u- o4 P/ |' a
                delay_ms(20);7 R" e' m' {. U* l) A/ t, l2 O
                if(KEY1==0)       
' ~  J; v2 I6 B, @0 F                {
; _7 V6 s2 Z* B2 k3 F9 J0 F, T* k                        Bee_1();
( Y" W9 J0 R% D; p- W. f$ J7 i# q                        delay_ms(100);
, Q, j! I3 _$ c2 u$ O/ y                        Bee_0();
( U; b0 `3 Y6 i$ M$ K+ }! c! H                        relay_flag=1;6 Z7 u" W1 @  ?+ o+ H+ a. ]
                        chargetime=0;
% L  G/ M) y+ z, ?1 s. k                        keyflag=0;% ?- @  d1 v7 K  Q/ i1 P
                }
' I5 S1 h1 ?$ c, _" I                EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);   //清除 LINE1上的中断标志位       
- |4 a* U5 y3 u# c' w+ n        }3 j* i$ f) Q# P4 h6 v& Z
}
- l- D5 X$ g3 u, j
$ m6 M2 Z0 L% n; U9 }void KEY2_IRQHandler(void)
# D" J/ G- b" a8 z. b{& `5 ^! z1 D2 d9 `$ N
        if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生   Y3 `, F9 ^9 ]; [# L' [7 h. [
        {
$ G$ N. ?- v* N* q, f3 z  K6 C                delay_ms(20);: D7 S" E1 O3 d2 {, ?( j9 Z3 @
                if(KEY2==0)       
# @- f% n( m9 {2 c                {* ?) s  n: W" u' o
                        Bee_1();5 W* f: a+ b8 a2 H* t6 y2 W
                        delay_ms(100);$ A, Z  C" g$ ~, U. [
                        Bee_0();) G+ ^. b" z) q  E) j
                        relay_flag=2;
: Z' |# }7 _, s% R; o1 J8 w                        chargetime=0;       
  B! p0 u) r& |$ ~# x8 U                  keyflag=0;
' P; C4 P3 O$ `                }3 b9 b' u) |& d4 y' L+ S
                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);   //清除 LINE2上的中断标志位        % v$ p; ]- S! k9 g  ^8 |5 a) E. }0 w. l
        }
- P' X4 t! W6 ^9 F8 C# D}3 X* k& N5 [1 [' s) u% b3 X

1 I( X. }2 e1 [4 J9 nvoid KEY3_IRQHandler(void)
* [# E# W  f8 g% I( ]{- G6 z; t  g# c) O; r
        if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 ! D8 o' G( R: q1 w# N6 T' K
        {
  I  \' L( O* C                delay_ms(20);1 S7 ?6 H% ]; L1 ~) J4 o
                if(KEY3==0)        0 U6 |" Y) o$ G. d
                {
  A& Y$ ~+ [: e5 ^" [$ e' H# O                        Bee_1();
5 A9 k6 M4 z) L3 v8 P, X                        delay_ms(100);3 s: l4 T6 V( B& i9 ]" O( Z% g
                        Bee_0();% |2 i8 i3 Z- u& Q: O& Q
                        relay_flag=3;- u4 j( u' c+ x
                        chargetime=0;3 R9 Q4 |( ~" X' b4 e* V
                        keyflag=0;                       
5 c6 E: R* p, L2 Y; D/ v                }% u" g8 f9 v+ H! q# R9 v5 y
                EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE);   //清除 LINE3上的中断标志位       
% A1 D( ?% w" G( L  _        }
* w  f! V* g# d7 H% k. {2 s3 l}1 g% L# B5 \% \$ C/ m7 Z

0 \9 L  B, u: Q. ?+ Dvoid KEY4_IRQHandler(void)/ A/ n0 J! ~1 V3 C, X8 u& q
{5 {& g" b9 {9 t% ]5 V' F
        if(EXTI_GetITStatus(KEY4_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 + d, k$ b1 w5 y. i
        {
9 A. K, O/ F( v# [( O, [( y                delay_ms(20);+ f/ u7 h' w4 F1 V/ \
                if(KEY4==0)       
- s* A9 f* ?: Z& c                {$ `- z3 L$ K) H
                        Bee_1();1 y( j  x5 `- @' U$ k
                        delay_ms(100);
. l& D/ v; y5 |; p; X                        Bee_0();
$ _) B8 h  }- q5 T8 ^3 @4 F                        relay_flag=4;- t- l2 [6 R$ m7 B  i" s
                        chargetime=0;0 m+ B! N# V4 _6 D$ ?. y% O: H
                        keyflag=0;
5 x; _& N" ~4 j  E                }
, c% h8 h! i% h1 b                EXTI_ClearITPendingBit(KEY4_INT_EXTI_LINE);   //清除 LINE4上的中断标志位        4 g# R  \) q; E! ]
        }
6 v- O+ F3 }9 `. g* E! w}
* R: q7 @: o/ {6 P" Y" {
- |! U4 H. h4 o  ]void KEY5_IRQHandler(void)& g! ]- B4 u1 b& `. Z1 C2 s( e' }
{8 I1 I/ @" k& b7 B
        if(EXTI_GetITStatus(KEY5_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
4 c) Q( s) y0 K; c; _- B0 U        {
$ i1 ^& j' `; Q, b+ s- b                delay_ms(20);
, M: d+ F" h) s: k; k' N* i                if(KEY5==0)        3 b+ a( T; Z/ r  }& f  C4 p9 K: s
                {3 m3 M/ }& G5 \, ?
                        Bee_1();
/ `. K# @. {, w- S( Z) o+ ?; K                        delay_ms(100);6 z, l: @4 p0 o9 e- J" a& m
                        Bee_0();
: P- X: q- n' i) }7 Q                        relay_flag=5;% G0 N3 w# `# K& q
                        chargetime=0;          L) w. V. i/ z" z4 Z, F
                        keyflag=0;
/ A2 X6 ?3 M/ ^* Q0 \                }; a) y: z5 C  }: n* Q& s
                EXTI_ClearITPendingBit(KEY5_INT_EXTI_LINE);   //清除 LINE5上的中断标志位       
2 W8 ?  Z3 P: L        }( U: D) Q  o- F# c
        - S, j; Z5 D( c7 |0 X
        if(EXTI_GetITStatus(KEY7_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 1 t: F* _3 V7 [6 w$ [
        {
. w5 W5 h( _9 O- P% f& `$ P                delay_ms(20);4 A  j. _* @) \
                if(KEY7==0)        % P' M" _6 |7 L) U
                {6 f4 n- \! `5 E/ s; z3 ~5 ~- B
                        Bee_1();
+ R4 n/ t- x  H3 _) B. P8 F                        delay_ms(100);
# b8 b! f: o; `  f                        Bee_0();: X# r" b- u6 g+ x+ c: z
                        relay_flag=7;- s& t. L9 G7 C0 f
                        chargetime=0;
; T$ w) A' M3 f* J' F  y                        keyflag=0;- \' t% }8 u3 O) P" F
                }
; @# @$ |. j9 H, x# I: t" o- s- b                EXTI_ClearITPendingBit(KEY7_INT_EXTI_LINE);   //清除 LINE7上的中断标志位
5 E3 g4 s2 y' N3 e$ |0 Q        }
. P- M5 J) U0 ]7 o4 |2 m        if(EXTI_GetITStatus(KEY8_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
( u  _$ K3 D$ z: z1 \; g" A        {
! b& B- k7 E# U* P! G. I$ V                delay_ms(20);8 h( n$ @: ^0 s) f
                if(KEY8==0)       
# j! b- L* N9 r( s' o( D                {/ n* Z( @& K: E5 Q- X
                        Bee_1();  ?1 j+ G- g  v5 [% A. E
                        delay_ms(100);0 A9 c# @# g' @3 O  U8 F, V: j3 W0 q
                        Bee_0();9 \: ^( V: s9 z4 `* D
                        relay_flag=8;
) J* v+ R. H  Z6 u                        chargetime=0;
( J7 i. K7 g8 m. p                        keyflag=0;- Q4 N8 E+ {, R9 ]' G/ ~
                }, Y5 i, |& d) X2 }9 J
                EXTI_ClearITPendingBit(KEY8_INT_EXTI_LINE);   //清除 LINE8上的中断标志位       
1 j% W2 \& f& v4 }8 Q        }
9 }' q3 F! r; C( }% @5 y. H        & L/ q! h* ^! P% R5 @* S
        if(EXTI_GetITStatus(KEY9_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 7 i$ N; l/ _9 E1 w/ ~1 q
        {
( H  ?1 U& A+ [9 i; C( h                delay_ms(20);
( X& \2 C; \9 y* u5 J: k0 w                if(KEY9==0)        " w8 K# Q! Z9 ]" c* h6 B
                {8 [$ P6 M& _8 v9 C$ ?- I
                        Bee_1();+ {# {. X! R" w# w* k
                        delay_ms(100);2 X! z5 z( `, S! O  _
                        Bee_0();
8 ~$ I% M2 A* @( L9 K$ A                        relay_flag=9;
+ z- R7 l3 h5 F                        chargetime=0;        0 b; R- k+ k7 d. f; c* }
                        keyflag=0;1 m/ x/ x* ^' `3 B
                }" r4 O% i  Y2 R& E, E* N
                EXTI_ClearITPendingBit(KEY9_INT_EXTI_LINE);   //清除 LINE9上的中断标志位
! @/ k4 Z+ M0 E" `* Z" z8 V        }; }1 d" G5 ?# s+ Y
}( z( A. y1 g9 u- R" w8 s
) o; m3 N0 ^) c( F- N

该用户从未签到

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

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-7-13 08:56 | 只看该作者
孤狼越孤城 发表于 2019-7-12 16:16
3 g1 i4 g3 z! Z- O9 h. |" H最好不要在中断里面用延时吧

+ e) X( {" i- R. H去抖动怎么处理呢?请指点啊, `) o* v6 K% c/ l8 H0 N

点评

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

该用户从未签到

5#
发表于 2019-7-16 08:55 | 只看该作者
maidouzhu 发表于 2019-7-13 08:56
4 H: C2 k* f- C/ {- J" o! l去抖动怎么处理呢?请指点啊

0 E) M; [. o7 n# V2 _1 V( Q! V' V你就一个键按下就设置对应标志位就行了,然后主函数判断标志位变化去做相应动作,做完再复位标志位就行了。
. p( R+ Z* h: ~0 o8 E! C$ p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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