|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
AT32-SUFR板载了两个独立按键,两个按键直接连接到mcu的IO口,当按键按下时IO电平为高电平,当没有按键按下时IO电平为低电平,MCU通过检测IO上的电平即可知道当前按键是否按下。
3 {0 G, @1 J; @1 i, Z! U: L$ t" ^ I
资源准备2 i( x1 F. X' l9 C
硬件环境:( Y; I. b. _8 r9 L. f$ l& ]
对应产品型号的AT-SURF-F437 Board
4 z8 I( l& }7 K( ]( l4 x软件环境:
+ y" L8 R# t3 f5 [' C+ k7 oAT32F435_437_Firmware_Library_V2.x.xprojectat_sufr_f437exampleskey' b3 h% [: m. [
6 v+ w1 a9 a3 p; E7 X5 J4 I硬件设计) A! i0 V' d4 H0 y. ^3 Z5 l' q
本案例使用的硬件资源有两个独立按键,对应的引脚如下:
' L4 h" {1 q# ]4 {* u1 T表-硬件资源使用! }. a( [. \; v" R' F% V$ o
1 O! b; M7 p! L1 K, u' k* F: J% N$ P0 S6 z/ e- q: L' [; L
对应的电路原理如下:0 ?8 _% k$ R l5 w1 w9 _
图-按键电路原理图
8 v/ y X# x6 n2 {
$ B. c; K1 E: M( ^) v; A: a9 Q1 `! _) k7 z
软件设计 C; h8 b0 z: c$ M; [
1) 按键测试
) J. l1 R& P1 @! Y) {/ k将两个按键用到的IO口配置成输入模式8 q7 D5 P9 w' P- {6 _
读取IO状态,判断是否有按键发生
- A1 v3 Z+ }1 m, A4 M2 m2 j4 i+ F2) 代码介绍
& M% p6 D$ {5 A, Fmain函数代码描述% H4 a4 q3 x7 @( W3 F; Q
- int main(void)
- {
- /* 初始化系统时钟 */
- system_clock_config();
- /* 初始化中断优先级分组 */
- nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
- /* 初始化延时函数 */
- delay_init();
- /* 初始化LCD */
- lcd_init(LCD_DISPLAY_VERtiCAL);
- /* 初始化按键 */
- key_init();
- /* 显示信息 */
- lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"Key Test");
- lcd_string_show(10, 60, 280, 24, 24, (uint8_t *)"Press any key to begin");
- while(1)
- {
- /* 按键检测 */
- key_value = key_press();
- switch(key_value)
- {
- /* 按键1按下 */
- case KEY_1:
- lcd_string_show(10, 100, 310, 24, 24, (uint8_t *)"key value: key 1");
- break;
- /* 按键2按下 */
- case KEY_2:
- lcd_string_show(10, 100, 310, 24, 24, (uint8_t *)" key value: key 2");
- break;
- default:
- break;
- }
- }
- }
% W: ^; w0 `9 C& V+ O ; g5 |' P0 ]4 Z& H
$ I6 B; o# @8 O% \ ^" t7 M! u
void key_init(void)函数代码描述
. s. T1 F- k' L' v2 d V6 f) o6 b) _3 t: F" W7 R- k0 }
- /**
- * @brief key init.
- * @param none.
- * @retval none.
- */
- void key_init(void) q; Z. u" w/ s7 i5 V0 E# o8 X
, |3 `) t' E" | k
: B5 l) s/ {% dkey_type at32_key_press(void)函数代码描述0 k2 E$ k& Z6 ^9 B* h" M
+ p' D I9 S, h7 J; E
- /**
- * @brief returns which key have press down
- * @param none
- * @retval the key have press down
- */
- key_type at32_key_press(void)% z/ v$ H4 b; n+ f, P) C7 R
6 W' f2 N# h; I. |
! N5 v" g0 ~# r
下载验证% |2 ^5 J0 i3 k/ ?$ \
如果有按键按下,被按下的按键会通过LCD屏显示出来。
/ \2 V% ? y- K! t图-实验效果7 \& t: s. ` w1 s8 o$ u# @" g
5 e) p+ |2 t4 ]5 ]! w
* Z9 ^/ K6 b! q( {( _
0 y" n& P, b1 o1 ~5 f c: q4 l' Q9 b
8 L" V0 R* t/ s, N' u |
|