历史上的今天
今天是:2025年01月09日(星期四)
2019年01月09日 | STM32入门开发--按键模块实现按键点灯
2019-01-09 来源:eefocus
1、实现效果
通过I/O口,操作按键,使得按键与LED一一对应,实现按键按下灯亮,再按下灯灭。支持连续按键。
2、实现思路
a. 要实现灯亮,首先应该初始化LED模块的时钟,使得该端口的时钟使能。
b. 初始化按键,按键对应的端口PORTA,PORTE使能,其次设置为输入模式,
KEY0,KEY1为低电平有效,KEY_UP高电平有效

硬件图可知,在设计中,应该在内部设置为上拉下拉输入,即KEY0,KEY1为上拉(输入高电平,本身为低电平有效),KEY_UP为下拉(输入低电平,本身为高电平有效)。

根据模式配置图,即要设置GOIPx—ODR寄存器的3/4位为1,才能保证为上拉输入。
c. 实现相应的初始化之后,循环检测是否有按键按下,KEY0,KEY1为0(低电平有效)则代表按键按下,KEY_UP为1(高 电平有效)代表按下。
3、key.c参考代码如下:
#include "key.h"
void delay_lx(unsigned int num)
{
unsigned int i = 0,j = 0;
for (;i { for (;j<1800;++j) ; } } void key_init(void) { RCC->APB2ENR |= 1<<6; // 使能PORTE RCC->APB2ENR |= 1<<2; // 使能PORTA GPIOA->CRL &= 0XFFFFFFF0; // 设置为输入模式 GPIOA->CRL |= 0X00000008; // 10--上拉/下拉输入 00--输入模式 GPIOE->CRL &= 0XFFFF00FF; GPIOE->CRL |= 0X00008800; GPIOE->ODR |= 3<<3;// 3/4上拉有效 } unsigned int key_scan(unsigned int mode) { static unsigned int key_up = 1; // 按键按下标志 if(mode) key_up = 1; if (key_up&&(KEY0==0||KEY1==0||WK_UP==1)) { delay_lx(2000); key_up = 0; if (KEY0 == 0) return 1; else if (KEY1 == 0) return 2; else if (WK_UP == 1) return 3; } else if (KEY0==1&&KEY1==1&&WK_UP==0) key_up = 1; return 0; }
史海拾趣
|
移动式无线视频监控,指系统的视频采集前端是可移动的视频采集终端,对不同的临时监控需求点进行监控。可移动的视频采集终端由于监控点不固定,因此,它必须利用无线公网作为监控数据的传输网络。 移动视频监控系统原理 移动视 ...… 查看全部问答> |
|
在2440.h中这么写的 #define ADC_BASE 0xB1800000 // 0x58000000 而在map.a中是这样写的, DCD 0x91800000, 0x58000000, 1 ; A/D convert register 0x91800000: 虚拟地址 0x58000000: 物理地 ...… 查看全部问答> |
|
安装了IAR5.2,破解失败,怎么回事啊,用5.2的朋友进来看看 Fatal Error[Cp001]: Copy protection check, No valid license found for this product对程序进行编译就会有这个错误,用软件破解了啊,也在网上查了,但是还是没有解决我卸载好几遍了希望高手帮助啊… 查看全部问答> |




