
程序说明, r7 H, J8 m+ T! N' w 此程序通过键盘扫描实现了时钟可调的功能,键盘使用行列式扫描的方法,并且将扫描到的按键值用用来调表! 利用键盘上的值来调表, 利用键盘上的值来调表,按键2为模式选择位,模式1调秒、模式2调分、模式3调小时,0 ?: @/ q/ _" Y 如果模式为4则让模式为0,计数器使能,时钟开始工作 * 按键3让时钟加1调表的时候systick定时器、计数器被失能,时钟停止; m8 H0 M- N H' e * 按键4让时钟减1调表的时候systick定时器、计数器被失能,时钟停止;。& I8 D8 |1 A a9 X' j 此时钟用数码管,时钟显示方式为“时时分分秒秒”。 1.其中键盘的分布如下所示:9 u7 d0 M! O) t$ O- { 键盘 - U: | Y: v1 P -8------————9------————A-------------B------GPIO_Pin_7 | | | | A/ c' R' J/ n, I% o3 A% Q | | | | -4------————5-------——---6-------------7------GPIO_Pin_6( l7 A) ?( ~. g | | | |4 f6 U) }6 i ?9 a9 P1 D | | | |6 U. q |* q! x* K6 o -0------————1--------------2-------------3------GPIO_Pin_54 D: V, K5 ~8 X5 g9 Q GPIO_Pin_1 GPIO_Pin_2 GPIO_Pin_3 GPIO_Pin_4 2.有关键盘的扫描按如下方法扫描: 键盘扫描函数 ①.先将 GPIO_Pin_5设置为低电平,GPIO_Pin_6、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,3 q' K1 F8 R) K+ | 查表得键值0x00,若不为0则扫描GPIO_Pin_2;' G, A1 d5 y! F7 [ 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x01,若不为0则扫描GPIO_Pin_3;; X; F2 `1 o: n$ { 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x02,若不为0则扫描GPIO_Pin_4;1 a0 w8 j% A. o O* b8 K6 d/ ]. c/ T( i 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下,& R, X M3 }2 p$ R 查表得键值0x03,若不为0则进行下一轮扫描; ②. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_5、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,: V3 }5 [- W; P7 @0 H' P 查表得键值0x04,若不为0则扫描GPIO_Pin_2;% i. U: i, j$ o1 F' b: ]3 ?) S( j5 X 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x05,若不为0则扫描GPIO_Pin_3; 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下,% f) T$ C3 T; R: ] 查表得键值0x06,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x07,若不为0则进行下一轮扫描;1 a9 ~$ f8 a6 e4 u ③. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_4、GPIO_Pin_5设置为高电平6 u' I# u6 H: q * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,$ F' R/ [3 U) K$ e" H% M8 x 查表得键值0x08,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下,* Q+ |7 U, ]; \ 查表得键值0x09,若不为0则扫描GPIO_Pin_3; 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下, 查表得键值0x0A,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x0B,若不为0则进行下一轮扫描; 若要显示则只需将变量jianzhi送入到lcd显示程序中去即可 3。以下是键盘扫描函数:( h; u4 S& O8 Q1 {. l6 Z void jiansao(void) {8 i u/ g S7 i6 m; d$ d0 E8 Y9 | ) |# Z- I8 ]5 n+ J) K/ F2 N GPIO_WriteBit(GPIOD,GPIO_Pin_6|GPIO_Pin_7, Bit_SET);: y% N" U3 d" k, j GPIO_WriteBit(GPIOD, GPIO_Pin_5, Bit_RESET);) [; [3 M4 f% x! S+ ~: S kongzhi=0; for(i=0;i |
RE:数码管显示(可调用三按键,可加减,模式选择)