
程序说明 此程序通过键盘扫描实现了时钟可调的功能,键盘使用行列式扫描的方法,并且将扫描到的按键值用用来调表! 利用键盘上的值来调表, 利用键盘上的值来调表,按键2为模式选择位,模式1调秒、模式2调分、模式3调小时, 如果模式为4则让模式为0,计数器使能,时钟开始工作' Q7 Z9 Q7 X/ B * 按键3让时钟加1调表的时候systick定时器、计数器被失能,时钟停止; * 按键4让时钟减1调表的时候systick定时器、计数器被失能,时钟停止;。 C( W+ ] n" G+ z( b 此时钟用数码管,时钟显示方式为“时时分分秒秒”。. } ]/ C3 g) i- F, I7 K 1.其中键盘的分布如下所示: 键盘! x# R0 ^ E, k; ^ -8------————9------————A-------------B------GPIO_Pin_7: A/ a, }8 i4 e/ e | | | |2 l4 F9 Z" T9 V! U5 R# i | | | |% g% k( Y x0 c- S7 w; ^9 [ -4------————5-------——---6-------------7------GPIO_Pin_6 | | | |# K# ?% q6 [* \/ e2 T& Z/ q | | | |/ O, {2 k# n0 ?& { -0------————1--------------2-------------3------GPIO_Pin_5! B0 @; D! t) U- S8 Y$ b. n GPIO_Pin_1 GPIO_Pin_2 GPIO_Pin_3 GPIO_Pin_4: Q) R$ p, f c 2.有关键盘的扫描按如下方法扫描: 键盘扫描函数, T: e3 r3 g# S ①.先将 GPIO_Pin_5设置为低电平,GPIO_Pin_6、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,, ^. w9 f$ t$ L) e$ F+ M6 s3 s5 } 查表得键值0x00,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下, 查表得键值0x01,若不为0则扫描GPIO_Pin_3; 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下,7 S: \( D! O- Z; {% J! Q8 Q 查表得键值0x02,若不为0则扫描GPIO_Pin_4; 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x03,若不为0则进行下一轮扫描; ②. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_5、GPIO_Pin_7设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下,1 w, W5 {# l- e* D) ]. @2 Y 查表得键值0x04,若不为0则扫描GPIO_Pin_2;, t7 J3 e- U( D8 H$ q8 `# y6 ] 扫描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,说明有键按下, 查表得键值0x06,若不为0则扫描GPIO_Pin_4;" t, A" K# Y! [) u 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x07,若不为0则进行下一轮扫描; ③. 再将 GPIO_Pin_6设置为低电平,GPIO_Pin_4、GPIO_Pin_5设置为高电平 * 依次扫描GPIO_Pin_1 ,判断GPIO_Pin_1 是否为0,若GPIO_Pin_1为0,说明有键按下, 查表得键值0x08,若不为0则扫描GPIO_Pin_2; 扫描GPIO_Pin_2 ,判断GPIO_Pin_2 是否为0,若GPIO_Pin_2 为0,说明有键按下,% r' W8 X1 E, E; Q 查表得键值0x09,若不为0则扫描GPIO_Pin_3;% O, S! W5 v2 C% _8 [ 扫描GPIO_Pin_3 ,判断GPIO_Pin_3是否为0,若GPIO_Pin_3 为0,说明有键按下,0 ?2 v8 W2 e, c 查表得键值0x0A,若不为0则扫描GPIO_Pin_4;5 y+ ] \/ y+ U) b 扫描GPIO_Pin_4 ,判断GPIO_Pin_4 是否为0,若GPIO_Pin_4为0,说明有键按下, 查表得键值0x0B,若不为0则进行下一轮扫描; 若要显示则只需将变量jianzhi送入到lcd显示程序中去即可/ b8 I' f, S( V7 b5 \& m" |/ ~. s 3。以下是键盘扫描函数:/ X1 L6 g! M: N. V: f3 Q void jiansao(void)9 a$ w+ R! z( R# D7 ~ { GPIO_WriteBit(GPIOD,GPIO_Pin_6|GPIO_Pin_7, Bit_SET); GPIO_WriteBit(GPIOD, GPIO_Pin_5, Bit_RESET); {5 F8 e% Y$ m) c+ x) L3 l kongzhi=0;/ d6 m& M D5 ? for(i=0;i |
RE:数码管显示(可调用三按键,可加减,模式选择)