完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
使用查询方式检测按键
2)、官方裸机编程指导手册:kendryte_standalone_programming_guide,用于查阅SDK中接口说明。
1)、设置引脚复用功能:由硬件原理图可知:我们需要将IO12和IO16设置为GPIOHS功能,如下图: 2)、LED初始化,如下图: 3)、按键初始化,如下图: 4)、检测按键状态,并根据按键状态,对LED进行控制,如下图: 根据上述实现步骤,最终代码如下: #include #include #include #define LED_R_PIN (12) #define LED_R_GPIOHSNUM (0) #define LED_R_FUNC (FUNC_GPIOHS0+LED_R_GPIOHSNUM) #define KEY_BT1_PIN (16) #define KEY_BT1_GPIOHSNUM (1) #define KEY_BT1_FUNC (FUNC_GPIOHS0+KEY_BT1_GPIOHSNUM) /********************************* * 管脚功能初始化 ********************************/ void init_hardware(void) { // 将红色LED管脚设置复用为GPIOHS fpioa_set_function(LED_R_PIN, LED_R_FUNC); // 将按键管脚设置复用为GPIOHS fpioa_set_function(KEY_BT1_PIN, KEY_BT1_FUNC); } /********************************* * LED初始化 ********************************/ void init_led(gpio_pin_value_t value) { // 设置输出 gpiohs_set_drive_mode(LED_R_GPIOHSNUM, GPIO_DM_OUTPUT); // 设置初始电平状态 gpiohs_set_pin(LED_R_GPIOHSNUM, value); } /********************************* * 控制LED亮灭 ********************************/ void ctl_led(gpio_pin_value_t value) { gpiohs_set_pin(LED_R_GPIOHSNUM, value); } /********************************* * 按键初始化 ********************************/ void init_key(void) { // 设置输入 gpiohs_set_drive_mode(KEY_BT1_GPIOHSNUM, GPIO_DM_INPUT); } /********************************* * 获取按键状态 ********************************/ gpio_pin_value_t get_key_statue(void) { return gpiohs_get_pin(KEY_BT1_GPIOHSNUM); } int main() { gpio_pin_value_t led_r_value = GPIO_PV_HIGH; // LED初始电平 unsigned char key_release_flag = 0; // 按键松手标志 init_hardware(); // 设置管脚复用功能 init_led(led_r_value); // led初始化 init_key(); // 按键初始化 while(1) { if(get_key_statue() == 0 && key_release_flag == 0) // 按键按下 { led_r_value = !led_r_value; ctl_led(led_r_value); key_release_flag = 1; } else if(get_key_statue() == 1 && key_release_flag == 1) // 按键松开 { key_release_flag = 0; } else { key_release_flag = key_release_flag; } } return 0; }
2)、同上一节的编译方式类似,打开vscode终端,在终端中进入上一节创建的build文件夹,然后输入:cmake ../ -DPROJ=key_find -G "MinGW Makefiles" ,生成makefile文件,如下图: 3)、生成makefile文件后,输入:make ,开始编译,如下图: 4)、编译完成后,会在build目录下生成烧录文件:key_find.bin,如下图:
|
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1127浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
573浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1864浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 03:29 , Processed in 1.387236 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号