|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
AT32-SUFR板载了两个独立按键,两个按键直接连接到mcu的IO口,当按键按下时IO电平为高电平,当没有按键按下时IO电平为低电平,MCU通过检测IO上的电平即可知道当前按键是否按下。
5 L( ~/ }' w9 S4 d6 M7 A# Z6 i G( v
资源准备, l( R* ?+ k3 C/ M) c
硬件环境:
7 b7 I1 j- H9 ^: c2 n对应产品型号的AT-SURF-F437 Board8 ] J1 i( U& P7 w7 ?
软件环境:
C0 ~: H1 }5 }6 O( ZAT32F435_437_Firmware_Library_V2.x.xprojectat_sufr_f437exampleskey- _) C9 g; K! ^/ p* P5 V5 T5 F
. u. s' `8 X& Q: ~, Y
硬件设计( f, Z5 @7 ^; I* ]6 Y+ D
本案例使用的硬件资源有两个独立按键,对应的引脚如下:
, U' P' ^% o! z7 v, H表-硬件资源使用3 j( _4 W# Q2 V) g" Z
6 c8 v0 _" j- b! `1 z
9 d' m9 J; p9 T& ~4 J E对应的电路原理如下:
2 ]4 A) r' R, T+ E- }; e图-按键电路原理图
% w- ~( [$ @; G; Y
, M; T/ v( I# z8 r: N( W
" m' C4 ?6 L& T) U软件设计; |4 L8 T; t# w( J0 [
1) 按键测试
5 m0 e& R( ?4 a; U! c: l! d将两个按键用到的IO口配置成输入模式
+ z, U% }: T/ Y% q) i, d/ @读取IO状态,判断是否有按键发生1 Y: T) G4 @; _0 a
2) 代码介绍
1 j8 e0 n0 j. C7 U- F* ^main函数代码描述( E G, \6 R) c/ o
- 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;
- }
- }
- }- |4 A1 M: |1 C' z$ t" D" Q9 S L. z
- P, s; ~8 `6 e: J& \
/ p7 B4 @" @0 n8 }" Dvoid key_init(void)函数代码描述$ U# z; D M9 b, Z' M; d
- X% L) ?' a! z' V- /**
- * @brief key init.
- * @param none.
- * @retval none.
- */
- void key_init(void)' F6 h- S) W, I) t) C8 y( ]
6 `" j( X' w: V/ i4 b" j" `' k, I4 E, d/ r2 L1 B
key_type at32_key_press(void)函数代码描述" B B6 A9 s+ Z$ B+ ^$ b! V3 C- n, d
9 w' U: P! j7 m* W: x6 a) z- /**
- * @brief returns which key have press down
- * @param none
- * @retval the key have press down
- */
- key_type at32_key_press(void)! q- @/ M& k1 W8 W3 _, R/ d) U
- R% _0 o+ T% }( z) y, q
. u- J" o, A) F下载验证, A2 A6 s4 R! D9 M$ A: R9 P9 O
如果有按键按下,被按下的按键会通过LCD屏显示出来。
/ R8 A; \5 Y9 Z/ U. f; T& t. E( X图-实验效果
: {% g; y/ \" y! v& g
9 K$ H* H3 r" ]+ r( p6 i3 K
3 K, T4 U8 g, c" x+ N+ ~
# N8 V: _8 r) u7 k2 c9 F- |7 o, |. E* ~% I7 m" E3 B
) y( y1 X' w, u0 C, L
|
|