|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
AT32-SUFR板载了两个独立按键,两个按键直接连接到mcu的IO口,当按键按下时IO电平为高电平,当没有按键按下时IO电平为低电平,MCU通过检测IO上的电平即可知道当前按键是否按下。
" g6 j6 f: Y5 {# \" l6 d
* }8 Q1 J2 o; L7 @; x$ P资源准备; ?+ r) o6 M' C; _
硬件环境:
- ?+ k1 [( z4 ~0 {$ p# w对应产品型号的AT-SURF-F437 Board# v7 v9 e' r6 j7 y" f% ?
软件环境:
, _ |2 l- M! ~4 p) b, fAT32F435_437_Firmware_Library_V2.x.xprojectat_sufr_f437exampleskey+ W2 g2 d: L* L' Z$ B( y1 y
' h' N; I. V, J- U2 ^8 N硬件设计% }( T/ l8 F m2 x. C
本案例使用的硬件资源有两个独立按键,对应的引脚如下:
& c. x4 u1 O# K表-硬件资源使用
' W/ `6 W% e; V8 @& S# I. d
1 Q6 X' t5 D9 D3 T' Z
$ b4 h& p% y& Q" b( s% D
对应的电路原理如下:
, J) X8 E8 b9 j4 a图-按键电路原理图8 I" E+ d$ D$ k+ {) l
u2 D- K% [4 e$ Q) X
. g0 f. N2 j, a8 Q; U' w软件设计- C9 t/ @" P# ]
1) 按键测试, I. {/ H- h* B% i4 R
将两个按键用到的IO口配置成输入模式/ i7 x3 O( t( [" u4 W+ X
读取IO状态,判断是否有按键发生
; u: R$ N. T% |" R2) 代码介绍$ w. R. G6 Y. G7 ?4 o6 A4 N
main函数代码描述
6 d7 ^# A) ?3 x" 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 u" M7 L: P. M0 F2 y
; T+ g. I% z4 A4 U; T8 ^2 n; H9 y: S- M# |
void key_init(void)函数代码描述
$ d" Z- t0 `' y9 l* \8 y5 ^) [3 U5 i$ ~/ |! u* v8 N
- /**
- * @brief key init.
- * @param none.
- * @retval none.
- */
- void key_init(void)# w6 l* B- Z/ @( Y- \3 }
% ^. y" D7 S) ]- D5 s9 v- q: \$ ~) v' ^( S# c$ r+ z( `9 D
key_type at32_key_press(void)函数代码描述
# E O: B# Q2 x, v* j: d
$ u- @$ U# [) B. _% v- /**
- * @brief returns which key have press down
- * @param none
- * @retval the key have press down
- */
- key_type at32_key_press(void)% A5 r1 C5 n* h/ C9 o' e9 u- A5 ]
/ A/ Q" v& D$ y/ m4 M3 E6 x7 W; ]; M3 K+ ~8 v" J
下载验证" u! u- ^, m! h# n4 ]4 T4 X2 m
如果有按键按下,被按下的按键会通过LCD屏显示出来。
; J4 R# q; {3 m5 ~, @# ]- q2 K4 [图-实验效果% O$ q) E: {6 j+ \, T& o1 {
+ d/ J; i3 d1 o/ v1 f
2 S: Q7 j# Y8 S) n" s% ~. `3 J# M3 J/ b& Q
_4 J2 O9 N2 P$ T
6 z* Y: T, R- h2 ? |
|