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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
! Y$ G/ P" t3 y. @& l% l6 h
#define KEY0_INT_GPIO_PORT         GPIOC
4 B1 G. K' ]9 T$ P#define KEY0_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
7 A  ^5 r* t1 d#define KEY0_INT_GPIO_PIN          GPIO_Pin_0
3 {# h3 d" G; O0 D: w2 a#define KEY0_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
7 h8 v$ |7 l& u! C0 S#define KEY0_INT_EXTI_PINSOURCE    GPIO_PinSource0
" e& [. F2 f7 l( b#define KEY0_INT_EXTI_LINE         EXTI_Line0( B' s& ^. C  i2 i
#define KEY0_INT_EXTI_IRQ          EXTI0_IRQn
; h6 j/ [! |7 J4 G#define KEY0_IRQHandler            EXTI0_IRQHandler1 d& b  J" [& p+ h2 P( a6 ^& t
. R) s' b. {& p$ ~& O
#define KEY1_INT_GPIO_PORT         GPIOC. q5 p8 B9 V5 A: V1 T
#define KEY1_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
& ^9 }3 \* [5 e1 M2 C* @- ~#define KEY1_INT_GPIO_PIN          GPIO_Pin_1  ]1 j7 c2 g9 a  b/ O- s! V
#define KEY1_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
* q2 C% c2 o# C0 m6 b8 K; _#define KEY1_INT_EXTI_PINSOURCE    GPIO_PinSource1
9 L$ x8 P% x, s- u. l#define KEY1_INT_EXTI_LINE         EXTI_Line1
/ n7 f/ w% c, Z- I, c+ I3 A2 e#define KEY1_INT_EXTI_IRQ          EXTI1_IRQn1 c7 x  ]7 g1 a. [. i2 p
#define KEY1_IRQHandler            EXTI1_IRQHandler
+ T3 H) t+ }( r! d4 b. o! _, E1 V* n  @; i4 j" Z
#define KEY2_INT_GPIO_PORT         GPIOC
. J; M5 X6 {  q% D: @9 K#define KEY2_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
* p. I7 X/ \( g3 u% x. F#define KEY2_INT_GPIO_PIN          GPIO_Pin_27 ]% H6 e# d# @, ~7 r# f& t0 O/ L, s. s( W
#define KEY2_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC! X) a4 a3 g: y9 Z" v
#define KEY2_INT_EXTI_PINSOURCE    GPIO_PinSource2
# W. I, S4 Y9 Q+ ~1 p#define KEY2_INT_EXTI_LINE         EXTI_Line2$ M5 q, {7 H) ~+ l1 ]5 V3 w7 _
#define KEY2_INT_EXTI_IRQ          EXTI2_IRQn% k  }: I: h6 t8 A- v& H% `3 D
#define KEY2_IRQHandler            EXTI2_IRQHandler( N; L7 U) _0 r: f- m

" K1 k1 H/ A0 J#define KEY3_INT_GPIO_PORT         GPIOC1 H2 ]8 R# X9 V  `% t, B( s
#define KEY3_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
4 Z" \9 h, B7 g/ N, Q; Q#define KEY3_INT_GPIO_PIN          GPIO_Pin_3
& y3 C; \* M8 m3 ~2 S+ S/ L#define KEY3_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
) r" x) t7 ~- `0 u3 V, W# F4 p#define KEY3_INT_EXTI_PINSOURCE    GPIO_PinSource3
# C, t) i; O/ Q9 c* ^3 i#define KEY3_INT_EXTI_LINE         EXTI_Line34 B) {( ~/ s  z; A! P! g2 W1 x) V/ V! o; y
#define KEY3_INT_EXTI_IRQ          EXTI3_IRQn
3 r) l, d' z- M5 M! c' u#define KEY3_IRQHandler            EXTI3_IRQHandler. @: z4 u8 [7 C8 z' X9 q5 s

9 i$ p' b8 `8 }#define KEY4_INT_GPIO_PORT         GPIOC
- y9 i1 \" X1 q#define KEY4_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)  h# {$ l0 W: ?, r/ m% s& P. Z
#define KEY4_INT_GPIO_PIN          GPIO_Pin_40 T" L8 m2 T  r7 _7 p
#define KEY4_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
3 d( y4 |9 h1 t9 P  ?! ?- t; T! ^* q#define KEY4_INT_EXTI_PINSOURCE    GPIO_PinSource4
$ x( Q$ M% d" Q( H4 y#define KEY4_INT_EXTI_LINE         EXTI_Line44 h  ^. l. n4 n2 |1 R. K. q
#define KEY4_INT_EXTI_IRQ          EXTI4_IRQn" m- r( f. N/ g' X" [" l
#define KEY4_IRQHandler            EXTI4_IRQHandler& W# m! X5 B# c$ V( O% E" e, {

' K4 `1 O/ _( n" k#define KEY5_INT_GPIO_PORT         GPIOC
! y& b8 v3 B. R) m4 z# j#define KEY5_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)+ U7 T( L' Z3 l- D: o6 F6 }3 A' r
#define KEY5_INT_GPIO_PIN          GPIO_Pin_57 M& t/ w! @- q5 _; {$ D( |
#define KEY5_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
* C8 \7 g7 Y# z#define KEY5_INT_EXTI_PINSOURCE    GPIO_PinSource5: @! y% k7 p4 u
#define KEY5_INT_EXTI_LINE         EXTI_Line5
8 _" @9 Y4 t9 B0 ~, P% L#define KEY5_INT_EXTI_IRQ          EXTI9_5_IRQn: s* [  n) H( ?( S, k; J" C
#define KEY5_IRQHandler            EXTI9_5_IRQHandler
+ ~/ {  e; T: ~- `
7 @9 F& s- S0 O- X+ U#define KEY6_INT_GPIO_PORT         GPIOB. h" Y/ f( q8 q5 |2 @
#define KEY6_INT_GPIO_CLK          (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)
8 ?# C8 u/ X' e+ F9 P( S#define KEY6_INT_GPIO_PIN          GPIO_Pin_15
* v8 R' U7 B1 h6 a& {, v#define KEY6_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOB  v3 |5 I; ]* T9 L5 [5 x2 b
#define KEY6_INT_EXTI_PINSOURCE    GPIO_PinSource15
' j! G$ u$ q# n. Z7 I+ |#define KEY6_INT_EXTI_LINE         EXTI_Line15- A4 A1 W6 j3 o1 s* V, n( K2 w2 f2 z
#define KEY6_INT_EXTI_IRQ          EXTI15_10_IRQn/ e9 Z$ |9 T! L
#define KEY6_IRQHandler            EXTI15_10_IRQHandler5 e4 T" G/ }/ m- I
' z5 d; Q4 m! N' _# u- Z
#define KEY7_INT_GPIO_PORT         GPIOC( S; U9 C& b. U  l
#define KEY7_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
/ m' D; r: a' D' k1 X: Y) N#define KEY7_INT_GPIO_PIN          GPIO_Pin_6! U8 v/ o& }& }/ `$ B
#define KEY7_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC3 u5 }% r6 y4 _+ O1 D' k% w; J
#define KEY7_INT_EXTI_PINSOURCE    GPIO_PinSource6
8 |8 ^) k8 k& c1 @6 b1 T! N3 J3 e#define KEY7_INT_EXTI_LINE         EXTI_Line6- v) a: v1 w+ h- y
#define KEY7_INT_EXTI_IRQ          EXTI9_5_IRQn
4 N" y# [0 r; J4 w3 o#define KEY7_IRQHandler            EXTI9_5_IRQHandler" c7 s0 w0 Q6 d

" a0 {, C& H* A" ?  }3 Y7 {8 g+ Z#define KEY8_INT_GPIO_PORT         GPIOC
$ ]- a+ a6 F9 d5 I2 Q; f#define KEY8_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)* [- H. v6 U6 h2 U5 i
#define KEY8_INT_GPIO_PIN          GPIO_Pin_7
, w  j$ O/ r3 G7 O8 o#define KEY8_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC! W/ J/ n% q0 X6 D+ e
#define KEY8_INT_EXTI_PINSOURCE    GPIO_PinSource7
2 T2 Y& _' U3 N#define KEY8_INT_EXTI_LINE         EXTI_Line7
$ y. z( O+ R* D" E2 _+ k5 H! K# N#define KEY8_INT_EXTI_IRQ          EXTI9_5_IRQn% }. L' Z0 Y; `2 A) N5 f
#define KEY8_IRQHandler            EXTI9_5_IRQHandler8 X% T) W, [: w3 U+ u

2 C2 [/ t4 y2 M7 y  l#define KEY9_INT_GPIO_PORT         GPIOC! F7 ]7 E( @" z2 X
#define KEY9_INT_GPIO_CLK          (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)" T- a$ O+ t1 S
#define KEY9_INT_GPIO_PIN          GPIO_Pin_84 f) P4 C. q9 Y' o: h7 A1 d
#define KEY9_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOC
8 T; O- U% W- j#define KEY9_INT_EXTI_PINSOURCE    GPIO_PinSource8
9 Z* B, y! U2 y4 `#define KEY9_INT_EXTI_LINE         EXTI_Line8
6 [* a  b# W7 h: @" ^#define KEY9_INT_EXTI_IRQ          EXTI9_5_IRQn; Q' D6 D$ t; J& C1 v
#define KEY9_IRQHandler            EXTI9_5_IRQHandler
1 y; K8 u+ R; X) x, i5 Q- P, u3 [6 a$ `. ^
#define KEY10_INT_GPIO_PORT         GPIOA; A- p' Z3 D6 }0 m9 D+ @5 ^' t
#define KEY10_INT_GPIO_CLK          (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
3 ~( u8 r. i8 K: X: V" q% y' b#define KEY10_INT_GPIO_PIN          GPIO_Pin_11/ d0 T4 M, S7 D4 j  g
#define KEY10_INT_EXTI_PORTSOURCE   GPIO_PortSourceGPIOA8 v  n$ @8 w) \0 |, G
#define KEY10_INT_EXTI_PINSOURCE    GPIO_PinSource11, y' n$ W$ b5 n$ C. T
#define KEY10_INT_EXTI_LINE         EXTI_Line11* p2 \9 d# z3 M6 F3 A3 u$ T; S' D& D
#define KEY10_INT_EXTI_IRQ          EXTI15_10_IRQn
; [" r/ o+ g2 O6 V- P3 n) o#define KEY10_IRQHandler            EXTI15_10_IRQHandler
/ Z9 R% a8 C) o! C8 S9 Z; z/ K( ^1 Z9 E; q& c6 m/ _
static void NVIC_Configuration(void)
& Y: [  h/ R5 }6 K5 _{/ l( X. l+ T6 M+ o7 U
  NVIC_InitTypeDef NVIC_InitStructure;
3 g+ }2 Z0 O% e6 e$ }7 K  
# j" F) ?0 t$ J" h* S7 ]  /* 配置NVIC为优先级组1 */
6 b( ?; ^( ~  F. a, X8 l  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+ g5 x8 h1 y# C5 c2 Q* s+ Y% L  I  ) b$ ~1 _& I9 ?- S
  /* 配置中断源:按键1 */
1 P8 y- S) P$ n; o  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
! f) z& S' ]/ x% h0 |/ P' A  /* 配置抢占优先级 */2 Z- X2 V4 X1 s  ^( S4 _
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
& b( b; y  E& ?$ @+ }  t% e% {7 j  /* 配置子优先级 */, j2 W. @* y" Y/ v4 X, ]  v
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
( D) ~6 a" s, t1 j  /* 使能中断通道 */% r9 S3 r. j0 y$ [! O4 O& ^& L( o
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
; j" K! j" n& o# I* u  NVIC_Init(&NVIC_InitStructure);
1 f2 L4 d0 T# i. W5 c  . M- c" u5 g; X" K
  /* 配置中断源:按键2,其他使用上面相关配置 */  * s  l2 j- _, S
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;; [' v! ^  b9 U- D4 W) a9 |# _. y6 W
   /* 配置抢占优先级 */
# i) u5 G7 }# P6 v& |$ n8 k  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
5 m$ I! u2 H( ~+ u) h  /* 配置子优先级 */  o5 o! ^8 H8 K+ L1 a2 W
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
3 L+ \, ~- l5 |, g0 B. [7 k: j  /* 使能中断通道 */; @- Q& [) i3 G& {
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
3 f/ p8 a: {& l; V! }/ U  l3 b

该用户从未签到

2#
 楼主| 发表于 2019-7-9 10:26 | 只看该作者
static void NVIC_Configuration(void)
  K+ a% {5 n6 t% H8 _" @{1 p7 y5 n, F) h- }, `
  NVIC_InitTypeDef NVIC_InitStructure;
. ~3 U3 k- @) Z/ m' u, u& Q+ n( I2 X+ X) e
  /* 配置NVIC为优先级组1 */5 D# Z3 P5 h  B0 F, g& P
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);5 J$ s1 B# ~( ?$ b% [: E

: f  A+ Z2 B6 @1 H5 b  /* 配置中断源:按键1 */7 O2 j8 I1 g0 b" g# `
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
# h# A; d6 f$ X$ n  /* 配置抢占优先级 */
2 @; a2 _, x; V& r' u  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- d( M1 v5 r) h9 Q' H; L5 L  /* 配置子优先级 */
7 M; m9 E9 c3 L# U& l; ~% p& k  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
, m! o! l, k% G& F2 W2 g4 ]  /* 使能中断通道 */5 ]$ w7 o" e5 z! \* w4 ?
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
0 i( B  _4 s% \  NVIC_Init(&NVIC_InitStructure);" M) m1 r0 _& j
2 w  N* h( _$ K3 C* }  B+ Y4 Z
  /* 配置中断源:按键2,其他使用上面相关配置 */  ( d. V/ ~; H$ H+ s0 R
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;% s& a. N( ^6 n0 N0 b
   /* 配置抢占优先级 */
" x- V3 F! z8 t0 N  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;! r& X0 T3 G6 V1 f. d) H
  /* 配置子优先级 */: P3 u" E% d9 b! E7 P
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;) k3 ?7 z  T1 u0 ]& h4 L
  /* 使能中断通道 */
8 M  O/ X, J' \  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;3 u% e6 f, R$ O( q* {
        NVIC_Init(&NVIC_InitStructure);3 z1 H% }, K: F; `0 n0 f
       
& S& y" v2 @, s4 c/ S         /* 配置中断源:按键3,其他使用上面相关配置 */  
% q, c; m1 p9 l  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;, z$ S# N/ z" Z, S
   /* 配置抢占优先级 */4 X1 K% _$ T* @/ h0 O# v
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;% o: T5 |) G+ A8 f4 `9 F4 k9 A! _
  /* 配置子优先级 */1 c, m3 G' B( A; |' v& i
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
! y2 J! X4 D. _2 Y  /* 使能中断通道 */  ^4 ]- b+ r: v6 |8 Z* F
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
8 @6 b9 B' m; e$ B( n        NVIC_Init(&NVIC_InitStructure);8 o1 x' ~4 |6 [
        2 u8 w* D4 n& I- a: U+ }
        /* 配置中断源:按键4,其他使用上面相关配置 */  
5 e& d- c8 Y% i5 d0 [6 w/ D  NVIC_InitStructure.NVIC_IRQChannel = KEY3_INT_EXTI_IRQ;# N6 u+ ^$ y: W* Z$ F/ F: r+ S
   /* 配置抢占优先级 *// z: F: Z9 ^) ~( l6 t
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
. Y- N: M7 z$ n  /* 配置子优先级 */# |; @+ g3 j+ @- C/ B
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;* C) ^$ y  f: X' Q+ P1 N% M- A) L: f
  /* 使能中断通道 */  }  I+ M5 X# ?, |- {) m1 ~
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;& ?; f( X- {9 ?8 x4 a
        NVIC_Init(&NVIC_InitStructure);) S  v/ ^* q5 }: e1 U1 w6 O
       
; V- S1 x" x% e5 y$ s" [; l         /* 配置中断源:按键5,其他使用上面相关配置 */  
, G) y% J9 m( r" X  NVIC_InitStructure.NVIC_IRQChannel = KEY4_INT_EXTI_IRQ;) n. \/ b+ @8 ?8 a$ O
   /* 配置抢占优先级 *// q; D/ K9 O; k+ N3 [5 S
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
" F, a/ K" Z, \. d3 M; L' g) F  /* 配置子优先级 */
- o+ g1 B' K/ X) V, S  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
- n- P; m1 J2 h- Q. m1 u  /* 使能中断通道 */
' s% A3 R- i4 y  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
" l1 h- z/ l$ i, F8 P; J9 M* [        NVIC_Init(&NVIC_InitStructure);
; z  _" i2 C. S! ]7 h  J        3 C2 P( H# [0 D3 s# f
                 /* 配置中断源:按键6,8,9,10,其他使用上面相关配置 */  : j- m9 e/ d& Z, Q
  NVIC_InitStructure.NVIC_IRQChannel = KEY5_INT_EXTI_IRQ;- a# t' p; u' L6 a- M( ^- z* f
   /* 配置抢占优先级 */
; e8 g8 l( k" ]: Y  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;( Q# S+ ^) @9 R% _3 w. S
  /* 配置子优先级 */  K) U5 ^* e* ?6 @& I7 S  A5 [
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;3 \5 }; m4 i; r* ~- E
  /* 使能中断通道 */
0 a) c' m6 o& b8 b- F) \  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
. S2 Y6 ]) Q2 T+ y* v9 ]1 F; Q        NVIC_Init(&NVIC_InitStructure);( g) |6 w3 }0 N. b
        - c5 V- ^. t& ]  U
         /* 配置中断源:按键7,11,其他使用上面相关配置 */  8 C; T6 w* \7 @2 _7 {8 k# ^
  NVIC_InitStructure.NVIC_IRQChannel = KEY6_INT_EXTI_IRQ;
" i# X2 \& |: O) @   /* 配置抢占优先级 */
. B9 K6 {, F$ m* n. G  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;* Y9 ~2 D; S* \8 m
  /* 配置子优先级 */  n- n& Z% G$ g! M* r
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;+ q# T0 a! I( j6 d; r
  /* 使能中断通道 */
5 ^$ B' N, n" S8 `2 A* b8 @  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ M5 g# z' s+ n1 E- J2 H1 y        NVIC_Init(&NVIC_InitStructure);
- u4 z- O/ l& ~5 `1 S) c- t. `        & f: N1 @) w. @, i5 E$ D+ O
        ; D; t. f# Y$ D) }
}2 m9 _4 C- H9 {, Z( u9 c5 z' q
5 T8 m4 y  e- U3 q$ d4 U: T$ |& @; f
/**; ^2 `& l' Y$ M$ c' C) r
  * @brief  配置 IO为EXTI中断口,并设置中断优先级
- n9 P5 I4 D/ `/ W( V  * @param  无: b. m3 s1 j7 N5 r9 m* I
  * @retval 无6 k9 t9 K1 h2 N1 _
  */
( }  v4 V6 @& n# y5 F! gvoid EXTI_Key_Config(void)1 S; _, X; ?& {
{
7 ?2 D6 ^$ Q* w        GPIO_InitTypeDef GPIO_InitStructure; : x* i& w  a( v
        EXTI_InitTypeDef EXTI_InitStructure;
4 ]% v) l7 O! ^" }& v$ H1 g3 e; b8 W1 s: w# w
        /*开启按键GPIO口的时钟*/
+ ]0 i& B3 i$ d/ `+ ?1 Z9 t        RCC_APB2PeriphClockCmd(KEY0_INT_GPIO_CLK,ENABLE);+ O2 Y  w* j  S% e* g3 w
        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);        * t* ]! z$ K3 |) s3 r7 S
        RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);; ^/ q- }: ]  M9 t) g, c0 z3 C5 Z7 x
        RCC_APB2PeriphClockCmd(KEY3_INT_GPIO_CLK,ENABLE);/ o3 X' @5 l. J  z/ h- K
        RCC_APB2PeriphClockCmd(KEY4_INT_GPIO_CLK,ENABLE);        / E; D; F/ t/ f$ a5 _
        RCC_APB2PeriphClockCmd(KEY5_INT_GPIO_CLK,ENABLE);
3 E" @, ~* k' @- d4 m' H( h        RCC_APB2PeriphClockCmd(KEY6_INT_GPIO_CLK,ENABLE);
, H( y3 _: i6 B- W7 L- O4 x        RCC_APB2PeriphClockCmd(KEY7_INT_GPIO_CLK,ENABLE);        # m% g+ r/ T+ u' I! x/ D6 ~
        RCC_APB2PeriphClockCmd(KEY8_INT_GPIO_CLK,ENABLE);+ }! e' @) L/ a8 S# ~, P
        RCC_APB2PeriphClockCmd(KEY9_INT_GPIO_CLK,ENABLE);2 O$ C) P: e3 A6 D, u- M3 J
        RCC_APB2PeriphClockCmd(KEY10_INT_GPIO_CLK,ENABLE);        * x# w0 ^# @5 |- g/ V7 g
        /* 配置 NVIC 中断*/5 Z& |5 f' k0 t$ z) B3 \
        NVIC_Configuration();. [& F! b# S/ {) u; h, A& r7 w
  N7 y" G+ M) f3 V" G
/*--------------------------KEY0配置-----------------------------*/- |: ]' Y' Z- d) {5 Q
        /* 选择按键用到的GPIO */        0 T2 g, b; X& V) F5 j) X
  GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;  q3 [) Y" f6 b
  /* 配置为浮空输入 */       
* O) E% }) I% Z4 }  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;
8 e* N9 g8 c2 f  GPIO_Init(KEY0_INT_GPIO_PORT, &GPIO_InitStructure);' t. b, }/ B# c3 }. G- d  [
/ |6 C5 r( j9 H6 E+ y& f
        /* 选择EXTI的信号源 */; N2 h0 [' R6 O3 ?
  GPIO_EXTILineConfig(KEY0_INT_EXTI_PORTSOURCE, KEY0_INT_EXTI_PINSOURCE); 5 l+ x/ g( r# F  |
  EXTI_InitStructure.EXTI_Line = KEY0_INT_EXTI_LINE;0 q9 z7 ^7 e5 q: S
       
( s( W* T5 y5 x        /* EXTI为中断模式 */' J* a6 [8 V; ]' m
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
0 U6 X1 r1 Z5 v$ ?        /* 下降沿中断 */& f- h  U3 _4 x7 P& M; k% s
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;- v. J7 g, G4 k2 M4 U) Z) |% Q8 N/ u3 [
  /* 使能中断 */       
( H8 K' M# S. a; D  EXTI_InitStructure.EXTI_LineCmd = ENABLE;$ d$ K4 B: D3 o" S
  EXTI_Init(&EXTI_InitStructure);        ) L/ N# j# E; V$ c7 b- _' Z+ ~) h3 N
/*--------------------------KEY1配置-----------------------------*/1 T' T- |: w! |1 I& z  U9 s3 v
        /* 选择按键用到的GPIO */       
+ g, Y0 T1 `) u: i% f* R0 E, W) L  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;4 q) H/ c+ G$ y  V' h! L& m# K
  /* 配置为浮空输入 */       
7 d; C4 T4 O7 m/ U! A2 Q% k  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
# F( v7 A4 b: a# F3 Y" f  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
# B, D- m* J- z0 s( k% o) J
* L8 i  b" \% i: p, d3 M        /* 选择EXTI的信号源 */
* U6 D- d5 h8 ~9 U6 y$ ~  GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); $ p1 K$ g" o& o/ ?+ N* e
  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;$ L, d$ t7 H" l4 H
       
: k% ]1 E  v5 B$ l; H) O        /* EXTI为中断模式 */
6 a: ^) n# j4 e6 m  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  F9 A4 U/ c3 u8 c# ^4 a        /* 上升沿中断 *// Y! Y8 B: V) e6 h
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
/ s' W5 r, [1 q; v5 R# q2 S/ y5 m! [  /* 使能中断 */        9 k8 z7 g! K/ u
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
' b. C- D! T* i* ^- \  EXTI_Init(&EXTI_InitStructure);6 w9 Q' u: b; n$ H1 P9 f) P
       
- ~" f  c1 _6 v6 f3 I  /*--------------------------KEY2配置-----------------------------*/
9 z+ c- j6 H1 G6 E! f! T+ X( o- H0 |        /* 选择按键用到的GPIO */        1 W  D  w: q4 ?% C2 h, ?
  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
3 x, {, G0 i) y. n8 I: ^- O  /* 配置为浮空输入 */       
  }8 Q8 X, L/ L3 Q  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
. M$ ?( i+ c1 a: X, x+ B! B  GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);
# j6 G4 y1 l- u2 M) {  X        /* 选择EXTI的信号源 */3 V% b% v5 ?) _- s4 ^
  GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);
* {1 W3 w) h7 s$ y  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;& p% I! @8 w6 x! @" k# R; @! M9 Q' {
       
7 g. z$ R5 _3 {/ u# L3 g' i) s        /* EXTI为中断模式 */
/ `6 \3 f# o% Z- p. D, {0 B7 \$ H  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
' F  y2 u9 ~+ Q9 x5 R        /* 下降沿中断 */
* y5 ^, \; P/ J4 z! }; B  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;, d' x# L! l, V, W! F
  /* 使能中断 */       
& [' Q8 m* a2 J% m& j  EXTI_InitStructure.EXTI_LineCmd = ENABLE;5 k6 \; ^' q/ y3 `# o. W5 h
  EXTI_Init(&EXTI_InitStructure);
8 F+ }0 F. A1 g: t: J' w        5 d9 T: N; w/ Y' P6 z
        /*--------------------------KEY3配置-----------------------------*/
) H  A  ?, L7 b' b9 ~        /* 选择按键用到的GPIO */       
- S$ e6 F. _! @/ l& |. v  GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;: P, I6 c# |$ ^, \* `6 [. @2 y
  /* 配置为浮空输入 */       
! l: }% \, u, z* D. h! a# P  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
. u( ]7 C! e  r" d9 J/ L% F  GPIO_Init(KEY3_INT_GPIO_PORT, &GPIO_InitStructure);
6 d+ H$ H+ s/ e% T$ A        /* 选择EXTI的信号源 */
* X& ?" w: h4 {+ y. x5 u  GPIO_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE, KEY3_INT_EXTI_PINSOURCE);
" ?# f: L0 V* Q7 r  EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE;; i6 X# f: }& c8 E% K
       
$ A& O+ |% M8 I        /* EXTI为中断模式 */
1 L+ T  w" J4 w" |1 c$ n: B2 o: `% I  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;# e8 L. t+ f" Q; z4 c3 f# p) \% R
        /* 下降沿中断 */# V8 }3 d* c5 P# r% e' a9 l0 @
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
6 b4 A5 z% X$ G% R/ w  /* 使能中断 */       
; w! T$ N! a' s" M4 R  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
& B: O, e6 b+ {0 G* f& D' }  EXTI_Init(&EXTI_InitStructure);
0 v$ J2 T1 N' l! j2 K( ?6 d6 y$ |        & ^' t/ q+ L4 S/ m

- J; U8 h/ t' u+ i1 i//--------------------------KEY4配置-----------------------------: A) L! f4 m% O' c7 F8 P" K9 N9 x
        // 选择按键用到的GPIO
- ?3 Q3 }+ a1 u- X  GPIO_InitStructure.GPIO_Pin = KEY4_INT_GPIO_PIN;
9 Z/ h  a4 }4 |$ s  // 配置为浮空输入        
! D8 J, n( O! a! F* O* m  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
* B' f* B: _8 S% \; x  GPIO_Init(KEY4_INT_GPIO_PORT, &GPIO_InitStructure);
' J# j$ u& j( I        // 选择EXTI的信号源 # V5 B/ n% [$ A: M
  GPIO_EXTILineConfig(KEY4_INT_EXTI_PORTSOURCE, KEY4_INT_EXTI_PINSOURCE);
4 k# d  F6 @. e  EXTI_InitStructure.EXTI_Line = KEY4_INT_EXTI_LINE;
) ^6 I5 `' M) C& I        , [$ }# W  X+ _
        // EXTI为中断模式 9 b$ L4 j) y: T# J5 _
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
2 D: D+ d5 T, `( l4 V        // 下降沿中断 ( p$ p" I+ w  V9 v/ W. a. s
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;: r( f# \5 k( o* B1 E4 Z3 Q" k
  // 使能中断        
8 L) T8 ~+ A3 b% n  EXTI_InitStructure.EXTI_LineCmd = ENABLE;4 p: e5 M; e/ K+ u) }
  EXTI_Init(&EXTI_InitStructure);
- \2 P+ F9 ~( g0 ?# n+ [: U2 p+ O       
& g/ b# V- a1 Z' S        //--------------------------KEY5配置-----------------------------5 Z. b8 `* t% y& U0 ], l
        // 选择按键用到的GPIO ( o0 R3 d0 b: L& G
  GPIO_InitStructure.GPIO_Pin = KEY5_INT_GPIO_PIN;+ _  ~2 l' R# Z$ }) w+ |9 H
  // 配置为浮空输入         - Y/ j( Y9 {5 o3 `9 B6 _$ s
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;$ y3 E+ ~; u6 F0 b8 C
  GPIO_Init(KEY5_INT_GPIO_PORT, &GPIO_InitStructure);, ]1 }1 r/ z( {, c7 Z2 ^
        //选择EXTI的信号源 9 ?" U5 @3 K9 W/ P3 k7 I
  GPIO_EXTILineConfig(KEY5_INT_EXTI_PORTSOURCE, KEY5_INT_EXTI_PINSOURCE);
; k! W( q' u, w  EXTI_InitStructure.EXTI_Line = KEY5_INT_EXTI_LINE;7 S0 E+ U! t9 o# D, L/ @
        & y7 C  s' b- A$ o1 h2 V. J
        // EXTI为中断模式 3 V5 `7 _8 s5 k( }  Z7 }1 k/ `3 I
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
* t* F" P; L9 e8 `( I9 Q' y& A) X        // 下降沿中断
# A7 j$ |! G6 a9 U/ a6 I  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
+ Q6 z9 ]3 I4 J4 F. f  // 使能中断 % U2 e9 h: w/ e5 o, Z' o
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;( L) A5 L8 K/ v) r
  EXTI_Init(&EXTI_InitStructure);' M9 s  d/ C1 E) c6 u
        * H9 ^8 U" H# P  T! L, {2 s/ l; S
        /*--------------------------KEY6配置-----------------------------*/2 {3 T, V! R& a
        /* 选择按键用到的GPIO */        6 C/ z6 v- N9 j. j3 p( X5 N
  GPIO_InitStructure.GPIO_Pin = KEY6_INT_GPIO_PIN;5 ~/ X% n3 ]* |
  /* 配置为浮空输入 */       
( R, P! B6 O( x, g5 \. c7 o  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;7 S9 A5 x7 L2 D5 n# I. ^
  GPIO_Init(KEY6_INT_GPIO_PORT, &GPIO_InitStructure);
  F, k* k+ {, s4 o  @        /* 选择EXTI的信号源 */
/ ?* ?( M$ S. h+ L. Y  GPIO_EXTILineConfig(KEY6_INT_EXTI_PORTSOURCE, KEY6_INT_EXTI_PINSOURCE);
% ~8 ^: ]0 Q: O8 @& m  EXTI_InitStructure.EXTI_Line = KEY6_INT_EXTI_LINE;
0 d8 h; a2 |, y       
3 U$ c; ^  p% W        /* EXTI为中断模式 */
* m, O# v% r4 j) X, F0 H  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;2 }$ b" s7 D, }1 _  c' ]
        /* 下降沿中断 */
3 k; G, a5 M$ P9 v: g  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;6 i" |. _# }5 B  r8 C5 c7 ^$ a% o* {
  /* 使能中断 */       
; C2 V  Q# o! U4 s6 Y. m8 p  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  R5 f+ }- ]3 g7 |4 O  EXTI_Init(&EXTI_InitStructure);
- l! }1 j8 {4 {2 L0 P' h- J" c8 y5 a        - P- P7 G4 |! B9 j
        /*--------------------------KEY7配置-----------------------------*/0 u: {" P' s3 s; s7 t6 X" M. H
        /* 选择按键用到的GPIO */       
! y/ `, r3 B. b; c  GPIO_InitStructure.GPIO_Pin = KEY7_INT_GPIO_PIN;/ j: ?3 o# @# q% o7 |  v
  /* 配置为浮空输入 */       
# `8 W% j% ]: O, ]+ @  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
, o* E5 ^8 y4 O) Q: p2 y  p0 J  GPIO_Init(KEY7_INT_GPIO_PORT, &GPIO_InitStructure);
& }7 c! j, E* h+ _5 A        /* 选择EXTI的信号源 */4 V3 O9 c( {# |5 k- [% ~$ V
  GPIO_EXTILineConfig(KEY7_INT_EXTI_PORTSOURCE, KEY7_INT_EXTI_PINSOURCE); : S  W6 \# R' I+ \4 v
  EXTI_InitStructure.EXTI_Line = KEY7_INT_EXTI_LINE;: d8 x; U( w1 M5 G( g: I) e
        6 U! a- ~$ s3 T- u3 f$ q% `
        /* EXTI为中断模式 */. P: R. K2 }$ a- G" u, {& ?
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;! |7 s5 p+ F: K
        /* 下降沿中断 */
$ i1 J, i+ m3 W  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;/ F* @# ]$ `1 P) e8 ?4 Z
  /* 使能中断 */       
9 ?7 {3 A# h1 S2 X3 M' s  EXTI_InitStructure.EXTI_LineCmd = ENABLE;& E0 [* t6 M7 a4 F
  EXTI_Init(&EXTI_InitStructure);
; F$ v9 v! Z' V       
$ r- ]* B( l/ J! J1 U4 V        /*--------------------------KEY8配置-----------------------------*/7 r: J+ n2 B* v5 ?
        /* 选择按键用到的GPIO */        - x# Z2 [$ G3 H7 m- R6 F7 L
  GPIO_InitStructure.GPIO_Pin = KEY8_INT_GPIO_PIN;
( A3 H. Y4 `' A2 g7 A1 Y  /* 配置为浮空输入 */        0 [: v2 y* \  G+ M" a
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;8 O2 t7 s" h9 }) d. M
  GPIO_Init(KEY8_INT_GPIO_PORT, &GPIO_InitStructure);+ L. A' @* m  `7 C' @" ]
        /* 选择EXTI的信号源 */% [' {+ _- B& z" o
  GPIO_EXTILineConfig(KEY8_INT_EXTI_PORTSOURCE, KEY8_INT_EXTI_PINSOURCE);
/ z2 b3 y  g  A  EXTI_InitStructure.EXTI_Line = KEY8_INT_EXTI_LINE;
8 ~4 |" Y+ b  v# l, e+ g" u% b       
. \$ Z% T/ A7 s: M8 u* }        /* EXTI为中断模式 */
9 a5 x4 p. R$ n' ]  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;/ `& N, b' Y) [. Y0 F* L  g/ J
        /* 下降沿中断 */
/ l5 J6 ]/ k) y1 K. x4 \  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
% B  O6 F: z* \7 a  /* 使能中断 */        ( L# B- v6 q/ D* ?
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;8 {( M  t/ @0 X/ N; V& o0 O2 ^
  EXTI_Init(&EXTI_InitStructure);
3 f) h9 [3 @8 @) G2 `        4 W% c! S5 q: z, ]9 C4 o$ z
        /*--------------------------KEY9配置-----------------------------*/
# A7 ~" j5 G/ N. c$ F8 Y  @        /* 选择按键用到的GPIO */       
2 H3 k# B9 n: @9 O  GPIO_InitStructure.GPIO_Pin = KEY9_INT_GPIO_PIN;3 y, ]* f3 T% K. f' L4 j% c8 I
  /* 配置为浮空输入 */       
  r: A1 G8 p' R; ^  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;2 f3 ^! S0 H0 g
  GPIO_Init(KEY9_INT_GPIO_PORT, &GPIO_InitStructure);0 |+ }) O4 A, Y  w
        /* 选择EXTI的信号源 */& w% M) t7 E5 M; V4 j
  GPIO_EXTILineConfig(KEY9_INT_EXTI_PORTSOURCE, KEY9_INT_EXTI_PINSOURCE);
, G+ T- d8 z/ G- \# J$ h0 @8 E9 w9 E  EXTI_InitStructure.EXTI_Line = KEY9_INT_EXTI_LINE;
3 |. s; m* @5 |' o; X: y  ]1 y1 I8 T       
7 h1 D9 M% o! Y4 E$ s3 i        /* EXTI为中断模式 */
0 }$ }& K8 ?0 ^+ h' |% n' a' b  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
' _; X  ?1 D7 W' w8 c; `6 F        /* 下降沿中断 */% L4 f! [5 O/ q% {2 Y5 a+ q' k9 a
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
/ I! N  x$ g  N1 j8 p! a  /* 使能中断 */        1 V3 A+ {& n; B  q! F1 T$ y; c/ |
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
" q. t1 y0 @! L' f! Q  p  r( t  EXTI_Init(&EXTI_InitStructure);
: v' o+ g8 j/ w/ p$ n- u3 x' U        / F2 T7 _8 n3 e, u6 B; ^
        /*--------------------------KEY10配置-----------------------------*/
" W, g2 \( S& ^+ `. t- S        /* 选择按键用到的GPIO */       
! D: J* |8 W7 |& _" `  G  GPIO_InitStructure.GPIO_Pin = KEY10_INT_GPIO_PIN;
& _- ^6 A3 W8 |: g* \  /* 配置为浮空输入 */        ! D) m3 L) F2 s, X) e: O6 T
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;* a! F8 p& ~) C3 A8 T, u) G1 J
  GPIO_Init(KEY10_INT_GPIO_PORT, &GPIO_InitStructure);
7 D5 i6 B7 N4 d. S        /* 选择EXTI的信号源 */+ b, C0 M% s( d
  GPIO_EXTILineConfig(KEY10_INT_EXTI_PORTSOURCE, KEY10_INT_EXTI_PINSOURCE);
/ V. [. c: @6 h/ z+ v0 b4 l  EXTI_InitStructure.EXTI_Line = KEY10_INT_EXTI_LINE;
: D, c1 e5 Q2 a        % B- T: A( h8 y9 {
        /* EXTI为中断模式 */7 z2 P3 E% f8 T4 \, K
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;& E/ k% C$ j9 N2 ]' M+ `& V+ J
        /* 下降沿中断 */
: P* \" D' k/ Q7 S  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
8 i2 }2 Y9 p( Q; b4 I  R7 c) J0 D  /* 使能中断 */        ! }# `4 U% G6 }+ `0 ]' ^8 D
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- R# M% n* y- |+ n) X% f. H8 Z# a  EXTI_Init(&EXTI_InitStructure);
4 @- d0 w0 |% B4 [4 }}
  B+ H7 k, D( e! i* O5 w
6 v7 X+ }( _8 E% l+ `/ Uvoid KEY0_IRQHandler(void)8 i6 H# _; }+ d3 E2 Z1 d
{
& F# k/ B$ N3 }' c& n9 B! p        if(EXTI_GetITStatus(KEY0_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
/ q4 ?& E; S: P7 y! `1 f9 k  w        {
* a& v* g3 ~. p8 _: i                delay_ms(20);3 F/ k: \0 u5 }2 w
                if(KEY0==0)        % R& `( p' ~  \! r# u
                {
9 P6 e2 i2 y# p/ `& y                        Bee_1();
7 }6 n8 N5 l  _- r" v- ]& A  z5 R                        delay_ms(100);( O4 Q6 E$ e! {9 F' d- L# N+ R2 s
                        Bee_0();* k9 C' K2 @: [+ n' _2 D7 t; ~
                        relay_flag=0;' m9 d# a  R/ g" U4 `1 z
                        chargetime=0;
/ D% Z2 X6 t  K                        keyflag=0;& Q) s" j, n4 x  \9 F
                }
" |% v2 i" ~8 o  R7 m2 p3 p$ g, F                EXTI_ClearITPendingBit(KEY0_INT_EXTI_LINE);   //清除 LINE0上的中断标志位        4 w2 `6 T9 V, z0 [* B- q
        }
6 ~1 ~3 n, [8 V}
0 W& \( [: l6 [) p6 h3 D3 ?; {4 \
$ c+ L& w# u3 q/ }. W" `. p9 n# Rvoid KEY1_IRQHandler(void)
: u- D: s; e2 r' P4 c. d{
8 S- a: v: o9 B+ T( S! j* {& r        if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
1 V1 J+ \5 g7 z( f$ v3 k8 }" u4 C        {4 ?% f+ W1 g5 V9 V) m% k; b
                delay_ms(20);6 o% x& p' H! o& v+ x, ]
                if(KEY1==0)       
: U& I: M7 {! y8 U                {
+ a# f8 @6 b; H# W* M( U5 _                        Bee_1();' `% s' }/ ^' _* |4 w
                        delay_ms(100);* V! M5 P: V6 L3 J' ]
                        Bee_0();
9 s2 B, e/ Q. N( ~5 K                        relay_flag=1;
, L, `+ e9 |6 w1 n                        chargetime=0;8 E; u8 `& P4 l+ J2 B
                        keyflag=0;/ P- w  v$ Z0 c' T' Z' G2 m
                }  F- c9 f2 R  F, B
                EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);   //清除 LINE1上的中断标志位        + Y. y- a+ U+ |2 t6 P5 N
        }6 U" p7 c8 A5 o* Y& W7 t* {
}4 r5 B' J& X7 `. @
5 x3 D; B. f1 i4 A" ^  I
void KEY2_IRQHandler(void)5 h& B6 l0 B) L: ~# K3 [
{9 f" U- Y/ U. w9 {. v! c
        if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
6 j3 o- z; u, V9 T4 r! E        {
, ^) [+ Y3 O! W) o! K                delay_ms(20);# @1 ?- g( Z1 I4 N: E
                if(KEY2==0)       
& I3 M& A+ i7 r2 {                {" n. r( l, K, \; E* h! ]1 G/ P% S& b
                        Bee_1();+ I# {# @8 k! w) t
                        delay_ms(100);& Q3 i6 T8 w7 R& [. f; C
                        Bee_0();9 f; }" Q5 i: {  e/ b. X
                        relay_flag=2;, J( o' F& W# ?9 L/ x
                        chargetime=0;        : c, }: A- Y$ U& [  q3 r& |
                  keyflag=0;
. c0 |; p7 Z5 G, E9 S                }
# }# u/ z$ U( h& q& F: Y                EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);   //清除 LINE2上的中断标志位       
% d8 X% T( \  F( t        }- ^# Q$ O% B, G+ I
}" v, F8 j* V8 P; L) D; G

; k2 ~1 U! w  S: r( z( _void KEY3_IRQHandler(void)5 r$ z% ^0 X2 r- s! M
{( Y) z( |1 Z: A% ]& k, D; b6 `
        if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
% |! f7 a# J6 h. O* Z        {: v6 d- W( p7 ?* A( ~! R3 i
                delay_ms(20);" T6 b$ _) M5 j  l; D
                if(KEY3==0)       
5 n/ T6 V  [+ y  D$ }: D                {
: }! p  A* r4 n6 B( O$ ?  l                        Bee_1();* w  C8 w5 G1 @( ?/ F) i7 B7 ^
                        delay_ms(100);
0 P" Z8 t- u. E2 V                        Bee_0();
& \0 ^' d0 T2 C                        relay_flag=3;3 w! C$ y& L% Z1 x- `3 b
                        chargetime=0;
( u6 B  ]+ ^, x                        keyflag=0;                        / q# i6 O: X) {. r& O
                }# ^2 N' S8 B0 ^, R2 u* a; Q3 |
                EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE);   //清除 LINE3上的中断标志位        , R- \; n' B# P) U7 V
        }
$ A6 ?, w% }3 S) P$ [6 M}
1 a( C# p6 ]* b! W. j2 P' g6 e3 ]
void KEY4_IRQHandler(void)9 ~8 K& w) \/ E, m- e  f
{  V' }# [+ Y( q+ m
        if(EXTI_GetITStatus(KEY4_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 3 Z% t1 m: V; a/ A, g
        {
( |1 \6 `/ s  P+ G0 Y- t$ v                delay_ms(20);
+ a  \" u! F7 t+ N3 y  V6 f8 y                if(KEY4==0)       
2 \' j$ z9 d9 N* |                {2 W6 f/ w6 ?/ ]
                        Bee_1();
; e  {0 F& s! q6 u                        delay_ms(100);6 ?/ o$ B$ i; [, t
                        Bee_0();
& H1 f0 }1 _2 n* u* T2 e: I1 Z                        relay_flag=4;/ ?6 }& p+ e3 ?- k& j' s$ f9 T1 M
                        chargetime=0;
) x4 O& r$ \2 ?1 V                        keyflag=0;1 x4 P5 }, U) D! \) O
                }
  G2 i% J/ p: ^! x1 J! `- q2 y# O1 w4 p; ~                EXTI_ClearITPendingBit(KEY4_INT_EXTI_LINE);   //清除 LINE4上的中断标志位        - l/ E8 W" M& n, [: p4 w7 G
        }
5 x. [- _: k% f}" e4 N4 n# ~5 q: T; O4 }" M: e6 B

6 t+ v. y( Q: m, lvoid KEY5_IRQHandler(void), W6 P' y9 r3 g$ s* Q, B
{
' ]* ^8 i6 ~. a' V  A. m' m# o5 d2 ~        if(EXTI_GetITStatus(KEY5_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
$ D' x# C$ A6 a' N        {6 E4 c* f# B% U& t9 L
                delay_ms(20);
3 V  R' f" B: F) S, Y$ v+ ^" h1 a. l                if(KEY5==0)        6 J. K. X' z+ o4 r0 O+ i" G
                {
( |0 y' y8 c  A# G- K) i* ~6 B4 a                        Bee_1();
5 k1 @/ S6 h1 Y- C0 b                        delay_ms(100);
$ }) K& e& E* E# Z3 T/ u                        Bee_0();% _  \1 V- r4 ]# D" ~3 K' V# r# d
                        relay_flag=5;; @) z; r5 g3 }+ p& s! }4 r
                        chargetime=0;        8 x& r. v8 b* Z( l, J9 N
                        keyflag=0;
* ~. R3 H  m& P* H8 n% J                }
$ i7 S' m/ m! Z* l4 D+ d; n                EXTI_ClearITPendingBit(KEY5_INT_EXTI_LINE);   //清除 LINE5上的中断标志位       
1 r4 |2 c- x, y3 A        }
0 I% h0 ]  h/ R) I       
! S$ }' n; L; \0 s) X1 T9 \        if(EXTI_GetITStatus(KEY7_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 ( v" s- p4 j; y, }; R/ [3 i
        {
5 c( r: {- _. M! O# b8 N9 \                delay_ms(20);
' M! |& d- Q# W                if(KEY7==0)       
4 e0 A* q/ X8 v7 o                {$ c  `, G6 v9 ?8 u4 {: y
                        Bee_1();2 }& c3 P! ?0 K" O" B' X- R8 r" r
                        delay_ms(100);6 o% }8 @+ \8 d" B2 R1 s; J- T; I
                        Bee_0();
5 }3 ^( q8 @$ |# s" C) L                        relay_flag=7;
; z  J) E- ]- m% [; f                        chargetime=0;
! j' O% [, S/ ]                        keyflag=0;. a. L6 |/ o9 C6 _
                }3 ?: D' b) k8 M6 ?
                EXTI_ClearITPendingBit(KEY7_INT_EXTI_LINE);   //清除 LINE7上的中断标志位  I" z* p2 T' Y
        }. E& O7 e) C, y$ J- n0 g) |. S
        if(EXTI_GetITStatus(KEY8_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生 % M; [5 h. c* ~& `2 T) R
        {/ H, c# e7 k9 c- `7 \
                delay_ms(20);% o5 b: U7 N7 j6 h' s7 @3 a
                if(KEY8==0)        5 S* b# E: A# u; l
                {
- g- R' t1 `5 @! D' Z: i/ \                        Bee_1();- ~  B" q! k7 p: m- G5 ]6 p& R
                        delay_ms(100);
, I) ~/ |- ^  v: I                        Bee_0();) J) \0 n: t' m) \) r' P' X/ B  t
                        relay_flag=8;/ F7 q0 T8 b! l5 w* r
                        chargetime=0;/ g0 t9 D& U' L  Q8 N
                        keyflag=0;' i5 t9 z7 L' {' U
                }
! n. _  v4 b7 T6 P8 d! M- e                EXTI_ClearITPendingBit(KEY8_INT_EXTI_LINE);   //清除 LINE8上的中断标志位        2 I& B0 s0 Q) z& |5 @
        }" D) P% |9 F% I' w, X
       
' m* o/ f" c5 n7 ]5 \        if(EXTI_GetITStatus(KEY9_INT_EXTI_LINE)!=RESET)//判断某个线上的中断是否发生
  c# Z$ i) V0 [4 R: E2 D/ g# [$ ]        {* V9 {. i1 a3 f- q# K" [  c# e
                delay_ms(20);2 D% v6 x/ L/ N( U, t/ G- C5 K
                if(KEY9==0)       
- \# d! e' ~+ z9 B  A9 o, `                {
+ ?; m! M& X; ]; b% k                        Bee_1();  F8 j5 ^4 ~+ p6 H- B& C% N& _
                        delay_ms(100);+ y  H* l0 z2 k9 e$ P3 J9 k0 V
                        Bee_0();
9 z3 `' }2 C# w3 p% W$ s                        relay_flag=9;
1 {. B4 I# p+ t8 {: W4 D( O9 z6 u, S                        chargetime=0;        % H( X# p" r$ |  v% s  P
                        keyflag=0;
- t0 f! c  {1 z' }. [                }  j: L/ O. S' a, t# J* h' u" k6 @
                EXTI_ClearITPendingBit(KEY9_INT_EXTI_LINE);   //清除 LINE9上的中断标志位
: i/ `+ ]7 J/ Y2 B$ @3 Z: x2 U9 Y        }
4 D8 H' ~1 Y: {# O3 X) ^2 i}
! F1 T8 c) A2 o1 z
  |% K& _$ m3 }2 N- [2 z. L! N

该用户从未签到

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

点评

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

该用户从未签到

4#
 楼主| 发表于 2019-7-13 08:56 | 只看该作者
孤狼越孤城 发表于 2019-7-12 16:16
. y0 C$ x* W9 I, v( M最好不要在中断里面用延时吧

0 k( X4 u! {5 }* x5 \# p4 K去抖动怎么处理呢?请指点啊, @4 X2 ~3 j$ N

点评

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

该用户从未签到

5#
发表于 2019-7-16 08:55 | 只看该作者
maidouzhu 发表于 2019-7-13 08:56
/ A* Y! Y2 h1 J" J/ ?- E8 m去抖动怎么处理呢?请指点啊
* L$ w5 l/ x) U4 ~% u
你就一个键按下就设置对应标志位就行了,然后主函数判断标志位变化去做相应动作,做完再复位标志位就行了。
9 k: Z$ j, ^; U/ j$ D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 18:17 , Processed in 0.156250 second(s), 28 queries , Gzip On.

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

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

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