
程序说明3 c) V) J! w% `7 ]7 x( w$ e. C 此程序通过键盘扫描实现了时钟可调的功能,键盘使用行列式扫描的方法,并且将扫描到的按键值用用来调表! 利用键盘上的值来调表, 利用键盘上的值来调表,按键2为模式选择位,模式1调秒、模式2调分、模式3调小时, 如果模式为4则让模式为0,计数器使能,时钟开始工作 * 按键3让时钟加1调表的时候systick定时器、计数器被失能,时钟停止; * 按键4让时钟减1调表的时候systick定时器、计数器被失能,时钟停止;。6 G, x# u3 a- ?$ H( _9 U, k 此时钟用数码管,时钟显示方式为“时时分分秒秒”。 1.其中键盘的分布如下所示: 键盘! W9 U) {4 y, g9 V 9 h( x! v, f5 E( V8 H- N -8------————9------————A-------------B------GPIO_Pin_7 | | | | | | | |- U D6 \5 M- T" X) O -4------————5-------——---6-------------7------GPIO_Pin_6 | | | |, D, T6 [$ [# D0 Q. d | | | |% y' X) Z ^0 W! ?# ?# K -0------————1--------------2-------------3------GPIO_Pin_5# S L' U5 ^. K! S# O9 b GPIO_Pin_1 GPIO_Pin_2 GPIO_Pin_3 GPIO_Pin_4* E s5 t! s, c* s1 |: @2 P! m 2.有关键盘的扫描按如下方法扫描:2 a, ]- @, q( E$ }, U* C 键盘扫描函数 ①.先将 GPIO_Pin_5设置为低电平,GPIO_Pin_6、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,+ ]) {; Z$ E. f 查表得键值0x00,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下,( e+ [. Z1 u7 M 查表得键值0x01,若不为0则扫描GPIO_Pin_3; 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x02,若不为0则扫描GPIO_Pin_4;5 Y" |2 m7 c/ _0 ~ 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下,, e/ ?4 e8 w+ a, h! d6 V5 K 查表得键值0x03,若不为0则进行下一轮扫描;4 O! D' r9 N% M6 R1 \, t- D ②. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_5、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下," ^! z* l/ i, y" }0 S7 J 查表得键值0x04,若不为0则扫描GPIO_Pin_2;6 O# n& f) g+ E2 X9 \ 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下,* I3 Z! V/ d/ B8 d 查表得键值0x05,若不为0则扫描GPIO_Pin_3; 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x06,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下,# h1 v9 o6 l' c* E 查表得键值0x07,若不为0则进行下一轮扫描;: b/ B* Y$ v% L! ~+ ]7 T& P2 G. ~ ③. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_4、GPIO_Pin_5设置为高电平/ n9 o) M+ c* Z2 c8 r * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,4 P- Z# A! s6 N9 f) V& V 查表得键值0x08,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x09,若不为0则扫描GPIO_Pin_3;7 ]; |* S& d' N+ D, r4 s9 r" E+ e& d 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下,# J* m+ S9 {2 V; t6 o5 ~* j5 b4 _ 查表得键值0x0A,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下,2 }3 l6 E& z* t3 Y0 s 查表得键值0x0B,若不为0则进行下一轮扫描; 若要显示则只需将变量jianzhi送入到lcd显示程序中去即可6 e6 E: ? W$ v1 C; `3 x. X& c 3。以下是键盘扫描函数: void jiansao(void)/ B: x# H* W9 B* X( e {9 K. ]) L1 z$ d( x GPIO_WriteBit(GPIOD,GPIO_Pin_6|GPIO_Pin_7, Bit_SET);6 m: a' R- ]- N( _1 Z GPIO_WriteBit(GPIOD, GPIO_Pin_5, Bit_RESET);# ]* N; i' L& M+ @0 x4 s+ }) t0 J9 N kongzhi=0;$ x3 N" y0 U w4 O/ J for(i=0;i |
RE:数码管显示(可调用三按键,可加减,模式选择)