|
程序说明$ h/ Q4 q: Z9 Y! A 此程序通过键盘扫描实现了时钟可调的功能,键盘使用行列式扫描的方法,并且将扫描到的按键值用用来调表!& _. e3 T/ c9 N$ C& D' S 利用键盘上的值来调表, 利用键盘上的值来调表,按键2为模式选择位,模式1调秒、模式2调分、模式3调小时, 如果模式为4则让模式为0,计数器使能,时钟开始工作3 l. G) T( D: i, O- i * 按键3让时钟加1调表的时候systick定时器、计数器被失能,时钟停止; * 按键4让时钟减1调表的时候systick定时器、计数器被失能,时钟停止;。 此时钟用数码管,时钟显示方式为“时时分分秒秒”。 1.其中键盘的分布如下所示:8 a1 w: H$ k. [% d- b- X2 ~ 键盘) J& Y: d) A+ H6 W E -8------————9------————A-------------B------GPIO_Pin_7 | | | |2 p- d" n4 o+ N( o' o' @ | | | | -4------————5-------——---6-------------7------GPIO_Pin_6+ }0 F T1 l3 I2 a. ^; P | | | |* s& c+ h4 R) t# |6 w& X2 a | | | | -0------————1--------------2-------------3------GPIO_Pin_5 GPIO_Pin_1 GPIO_Pin_2 GPIO_Pin_3 GPIO_Pin_4 2.有关键盘的扫描按如下方法扫描:9 ^. {7 x8 ^: C9 [ o 键盘扫描函数0 z% S- n- T7 u7 r7 m0 d% Y ①.先将 GPIO_Pin_5设置为低电平,GPIO_Pin_6、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下, 查表得键值0x00,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x01,若不为0则扫描GPIO_Pin_3;. Y# X% c' Y5 M- F4 E% \0 v2 D) S3 ] 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x02,若不为0则扫描GPIO_Pin_4;2 Q* o' \. e# ]5 M0 O3 W+ \8 o 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x03,若不为0则进行下一轮扫描; ②. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_5、GPIO_Pin_7设置为高电平+ p0 e4 `) L& s1 O3 Q * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,: `; p. Q! j4 k% y6 \ v 查表得键值0x04,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下,- i, {2 |$ c2 d {5 m3 m+ P9 f' Q 查表得键值0x05,若不为0则扫描GPIO_Pin_3;/ Y; k r6 s9 O- u1 U 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下,# q8 V# `" E0 \1 t @( Q: \" ~3 Z 查表得键值0x06,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x07,若不为0则进行下一轮扫描;- l/ n. t+ @3 ^1 @ ③. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_4、GPIO_Pin_5设置为高电平: p5 u9 }; O& L * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,* v. j/ y9 P/ D& w0 d 查表得键值0x08,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x09,若不为0则扫描GPIO_Pin_3;2 r; j2 D. W; c k- T6 c 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x0A,若不为0则扫描GPIO_Pin_4;" v% f% n/ w2 K* o; ` 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x0B,若不为0则进行下一轮扫描; & l: h% v" l+ _/ f$ I3 s# @' f 若要显示则只需将变量jianzhi送入到lcd显示程序中去即可: U `8 @2 k. x2 g 3。以下是键盘扫描函数: void jiansao(void)3 H% z; q! H# @! B, v! v { GPIO_WriteBit(GPIOD,GPIO_Pin_6|GPIO_Pin_7, Bit_SET); GPIO_WriteBit(GPIOD, GPIO_Pin_5, Bit_RESET); kongzhi=0; for(i=0;i |
微信公众号
手机版
RE:数码管显示(可调用三按键,可加减,模式选择)