当前位置:网站首页>Blue Bridge Cup embedded_ STM32 learning_ Key_ Explain in detail
Blue Bridge Cup embedded_ STM32 learning_ Key_ Explain in detail
2022-07-06 01:44:00 【Moqim Flourite.】
Code
source : Blue Bridge Cup Official ;
Configuration code
#include "key.h"
// KEY Interface initialization
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;// Set structural variables
// allow GPIOA and GPIOB The clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// Turn on the clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// PA0 and PA8 Floating input ( Reset state , It can be omitted )
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8;// Select pin
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// Choice mode ,key Recommended pull-up GPIO_Mode_IPU
GPIO_Init(GPIOA, &GPIO_InitStructure);// Initialize pins GPIOA
// PB1 and PB2 Floating input ( Reset state , It can be omitted )
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;// Select pin
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;// Choice mode
GPIO_Init(GPIOB, &GPIO_InitStructure);// Initialize pins GPIOB
}
// KEY scanning
unsigned char KEY_Scan(void)
{
unsigned char ucKey_Val = 0;
// Judge B1 and B2 Whether to press 1111 1110 1111 1111
if(~GPIO_ReadInputData(GPIOA) & 0x101)// Take the opposite first and then ,0000 0001 0000 0001, as long as GPIOA_0 and GPIOA_8 There is a press
{
Delay_KEY(10); // Time delay 10ms Desquamation
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))// Determine which press
//ucKey_Val = 1;
return 1;// return 1, And jump out of the function
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8))
//ucKey_Val = 2;
return 2;
}
// Judge B3 and B4 Whether to press
else if(~GPIO_ReadInputData(GPIOB) & 6)
{
//0000 0000 0000 0110
Delay_KEY(10); // Time delay 10ms Desquamation
if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1))
ucKey_Val = 3;
if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2))
ucKey_Val = 4;
}
return ucKey_Val;
}
void Delay_KEY(unsigned int ms)// Delay chattering
{
unsigned int i, j;
for(i=0; i<ms; i++)
for(j=0; j<7992; j++); // SYSCLK = 72MHz
// for(j=0; j<1598; j++); // SYSCLK = 8MHz
}
Application code
#include "key.h"
#include "led.h"
unsigned char ucLed = 1;//LED Display parameters
unsigned char ucKey_Long;// Last key value
unsigned long ulTick_ms, ulKey_Time;// current time , Last time
void KEY_Proc(void);// Statement KEY_Proc function
int main(void)
{
SysTick_Config(72000); // timing 1ms(HCLK = 72MHz)
KEY_Init();// Key initialization
LED_Init();//LED initialization
BUZ_Init();// Buzzer initialization
while(1)
{
KEY_Proc();
LED_Disp(ucLed);
}
}
void KEY_Proc(void)
{
unsigned char ucKey_Val;
ucKey_Val = KEY_Scan();// Get the key value
if(ucKey_Val != ucKey_Long)// When the current key value is not equal to the last key value
{
ucKey_Long = ucKey_Val;// Update key value
ulKey_Time = ulTick_ms;// Update time
}
else
ucKey_Val = 0;// Otherwise, the current key value is cleared
if(ucKey_Val == 1) // B1 Short press
{
ucLed <<= 1;// Every time you press , Running water lights up the next light
if(ucLed == 0) ucLed = 1;
}
if(ucKey_Val == 2) // B2 Short press
{
ucLed >>= 1;
if(ucLed == 0) ucLed = 0x80;
}
if(ucKey_Long == 1) // B1 Long press
{
if(ulTick_ms-ulKey_Time > 800)// When the current time is greater than the last time 800ms when
{
ulKey_Time = ulTick_ms;// Update time
ucLed <<= 2;
if(ucLed == 0) ucLed = 1;
}
}
if(ucKey_Long == 2) // B2 Long press
{
if(ulTick_ms-ulKey_Time > 800)
{
// ulKey_Time = ulTick_ms;
ucLed >>= 2;
if(ucLed == 0) ucLed = 0x80;
}
}
if(ucKey_Long == 3) // B3 Long press
GPIO_ResetBits(GPIOB, GPIO_Pin_4);// Turn on the buzzer
else
GPIO_SetBits(GPIOB, GPIO_Pin_4);
}
// SysTick Interrupt handling
void SysTick_Handler(void)
{
ulTick_ms++;// Every time 1ms Current time plus 1
}
Quick configuration
Open the official peripheral routine in the library file , find GPIO——
stay IOToggle" Under the folder , open “main.c”——
Copy and paste the basic configuration directly , Then modify the pin ;
Just recite the rest by yourself hhhh.
边栏推荐
猜你喜欢
2022 PMP project management examination agile knowledge points (8)
leetcode3、實現 strStr()
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
[flask] official tutorial -part3: blog blueprint, project installability
Tensorflow customize the whole training process
Numpy array index slice
[solved] how to generate a beautiful static document description page
Folio. Ink is a free, fast and easy-to-use image sharing tool
c#网页打开winform exe
一图看懂!为什么学校教了你Coding但还是不会的原因...
随机推荐
[le plus complet du réseau] | interprétation complète de MySQL explicite
Sword finger offer 12 Path in matrix
yii中console方法调用,yii console定时任务
SPIR-V初窺
Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
[flask] static file and template rendering
2022 Guangxi Autonomous Region secondary vocational group "Cyberspace Security" competition and its analysis (super detailed)
[flask] response, session and message flashing
Code Review关注点
MUX VLAN configuration
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
You are using pip version 21.1.1; however, version 22.0.3 is available. You should consider upgradin
[technology development -28]: overview of information and communication network, new technology forms, high-quality development of information and communication industry
[flask] official tutorial -part3: blog blueprint, project installability
Redis list
Basic operations of databases and tables ----- default constraints
Format code_ What does formatting code mean
Crawler request module
selenium 等待方式
一图看懂!为什么学校教了你Coding但还是不会的原因...