当前位置:网站首页>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.
边栏推荐
- Thinking about the best practice of dynamics 365 development collaboration
- 剑指 Offer 12. 矩阵中的路径
- [network attack and defense training exercises]
- A glimpse of spir-v
- 2 power view
- Accelerating spark data access with alluxio in kubernetes
- internship:项目代码所涉及陌生注解及其作用
- Format code_ What does formatting code mean
- How to get all sequences in Oracle database- How can I get all sequences in an Oracle database?
- 竞赛题 2022-6-26
猜你喜欢
Leetcode skimming questions_ Sum of squares
【已解决】如何生成漂亮的静态文档说明页
【SSRF-01】服务器端请求伪造漏洞原理及利用实例
1. Introduction to basic functions of power query
A picture to understand! Why did the school teach you coding but still not
Yii console method call, Yii console scheduled task
Docker compose配置MySQL并实现远程连接
2022年PMP项目管理考试敏捷知识点(8)
Win10 add file extension
NLP fourth paradigm: overview of prompt [pre train, prompt, predict] [Liu Pengfei]
随机推荐
正则表达式:示例(1)
Leetcode3, implémenter strstr ()
2022年广西自治区中职组“网络空间安全”赛题及赛题解析(超详细)
Initialize MySQL database when docker container starts
[flask] obtain request information, redirect and error handling
Internship: unfamiliar annotations involved in the project code and their functions
Selenium element positioning (2)
Unity VR resource flash surface in scene
2022 Guangxi Autonomous Region secondary vocational group "Cyberspace Security" competition and its analysis (super detailed)
leetcode-2. Palindrome judgment
Redis-字符串类型
Huawei converged VLAN principle and configuration
Unity VR solves the problem that the handle ray keeps flashing after touching the button of the UI
Basic operations of database and table ----- delete data table
Cadre du Paddle: aperçu du paddlelnp [bibliothèque de développement pour le traitement du langage naturel des rames volantes]
How to get all sequences in Oracle database- How can I get all sequences in an Oracle database?
一图看懂!为什么学校教了你Coding但还是不会的原因...
dried food! Accelerating sparse neural network through hardware and software co design
Redis list
Sword finger offer 12 Path in matrix