|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
AT32-SUFR板载了两个独立按键,两个按键直接连接到mcu的IO口,当按键按下时IO电平为高电平,当没有按键按下时IO电平为低电平,MCU通过检测IO上的电平即可知道当前按键是否按下。/ Z* O3 c2 I! K3 d# _" h$ N
- R4 `2 U8 i. _6 f
资源准备
5 F1 I6 G6 ?8 ~. \+ t: O硬件环境:
2 @3 ~3 G H% j/ ^对应产品型号的AT-SURF-F437 Board6 m' Y# O1 v6 s
软件环境:$ m1 A+ e3 r h. D d4 S) y9 T
AT32F435_437_Firmware_Library_V2.x.xprojectat_sufr_f437exampleskey& T) x) N! e3 E+ d8 `
9 E. x p9 [3 r: v3 x# ^* V硬件设计
; g+ B3 J& O7 {7 C* s本案例使用的硬件资源有两个独立按键,对应的引脚如下:
+ ~6 |* c) i8 G表-硬件资源使用: s6 q% f4 W) ]3 U
: f( S, {* S/ f2 a2 l- U
! Q8 r4 H6 m- H: k9 U对应的电路原理如下:+ n- L4 T3 d" J5 n
图-按键电路原理图
) M' v, h3 w4 U }) d2 ^ N
+ P8 P4 Z) `2 N9 h9 ~
3 Y+ I2 j$ T1 k" s4 Z" `6 ^+ ^软件设计
N, |$ T6 m. T' {& E9 k$ s1) 按键测试
( j( b9 n7 }; O. E+ u/ v将两个按键用到的IO口配置成输入模式
8 c- }' n3 _9 z1 _" ?: S& \4 O读取IO状态,判断是否有按键发生
! R9 [1 [6 i. P _3 h/ g2) 代码介绍
2 A* p5 V8 S0 k. Q# @4 O, ]main函数代码描述
* [" d4 s t- P7 y( {- 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 i$ A8 \3 C0 z7 F& u . _( [& Q! Y7 _' r3 C
4 j7 }* K4 z' }6 e
void key_init(void)函数代码描述 z; R: D2 h* t T# A2 i" B
% s! E, O1 u$ B- /**
- * @brief key init.
- * @param none.
- * @retval none.
- */
- void key_init(void)
3 l3 {2 a0 G& _3 Y + `" Y) G0 h3 R D, m+ F
" Q: Y+ v0 e4 J; A
key_type at32_key_press(void)函数代码描述( D8 O2 m. k% g/ d( B* {7 D
4 a4 Z: T0 t# y; E" |. j# X' f9 d- U- /**
- * @brief returns which key have press down
- * @param none
- * @retval the key have press down
- */
- key_type at32_key_press(void)% r; X0 E$ z0 b2 v/ [- u
" K$ Q$ u4 n" e5 r% h$ `! t
& ^, k$ U& ^- R/ n V下载验证 {, G3 N0 N; s+ D, }# ?
如果有按键按下,被按下的按键会通过LCD屏显示出来。
/ D7 e6 @3 Z% `( F# \3 Z+ d! U图-实验效果
% F. U% q) F4 e8 O0 u- v( Y- v" ]- j) Q# u, D" d
, f. }9 s/ i c
0 ?. d- q. }7 p: ~8 N% m
. E5 H5 N* e$ g5 _" W/ z2 @! D" |/ m# N% m. n7 p0 Y- [0 q- [
|
|