当前位置:网站首页>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.
边栏推荐
- 阿里测开面试题
- leetcode-2. Palindrome judgment
- 【全网最全】 |MySQL EXPLAIN 完全解读
- MySQL learning notes 2
- A Cooperative Approach to Particle Swarm Optimization
- 02.Go语言开发环境配置
- [flask] obtain request information, redirect and error handling
- How does Huawei enable debug and how to make an image port
- Basic operations of database and table ----- delete data table
- leetcode刷题_平方数之和
猜你喜欢

Docker compose配置MySQL并实现远程连接

C web page open WinForm exe

Poj2315 football games

c#网页打开winform exe
![[flask] official tutorial -part3: blog blueprint, project installability](/img/fd/fc922b41316338943067469db958e2.png)
[flask] official tutorial -part3: blog blueprint, project installability
![[flask] official tutorial -part2: Blueprint - view, template, static file](/img/bd/a736d45d7154119e75428f227af202.png)
[flask] official tutorial -part2: Blueprint - view, template, static file

UE4 unreal engine, editor basic application, usage skills (IV)

3D vision - 4 Getting started with gesture recognition - using mediapipe includes single frame and real time video

Leetcode skimming questions_ Sum of squares

一圖看懂!為什麼學校教了你Coding但還是不會的原因...
随机推荐
[the most complete in the whole network] |mysql explain full interpretation
Redis list
【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
[Yu Yue education] Liaoning Vocational College of Architecture Web server application development reference
国家级非遗传承人高清旺《四大美人》皮影数字藏品惊艳亮相!
Leetcode1961. Check whether the string is an array prefix
SPIR-V初窺
Idea sets the default line break for global newly created files
Redis string type
Mongodb problem set
c#网页打开winform exe
Selenium waiting mode
Code review concerns
Open source | Ctrip ticket BDD UI testing framework flybirds
剑指 Offer 38. 字符串的排列
module ‘tensorflow. contrib. data‘ has no attribute ‘dataset
CocoaPods could not find compatible versions for pod 'Firebase/CoreOnly'
Huawei Hrbrid interface and VLAN division based on IP
How to get all sequences in Oracle database- How can I get all sequences in an Oracle database?
[detailed] several ways to quickly realize object mapping