当前位置:网站首页>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.
边栏推荐
- C web page open WinForm exe
- Ali test open-ended questions
- 国家级非遗传承人高清旺《四大美人》皮影数字藏品惊艳亮相!
- How to get all sequences in Oracle database- How can I get all sequences in an Oracle database?
- Leetcode skimming questions_ Verify palindrome string II
- Leetcode3. Implement strstr()
- 【已解决】如何生成漂亮的静态文档说明页
- 2022年PMP项目管理考试敏捷知识点(8)
- Docker compose configures MySQL and realizes remote connection
- 【Flask】获取请求信息、重定向、错误处理
猜你喜欢
![[flask] official tutorial -part2: Blueprint - view, template, static file](/img/bd/a736d45d7154119e75428f227af202.png)
[flask] official tutorial -part2: Blueprint - view, template, static file

TrueType字体文件提取关键信息

国家级非遗传承人高清旺《四大美人》皮影数字藏品惊艳亮相!

Win10 add file extension

1. Introduction to basic functions of power query

leetcode-两数之和

MUX VLAN configuration

一图看懂!为什么学校教了你Coding但还是不会的原因...

A Cooperative Approach to Particle Swarm Optimization

Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
随机推荐
Redis-列表
一图看懂!为什么学校教了你Coding但还是不会的原因...
Redis-字符串类型
[机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
Card 4G industrial router charging pile intelligent cabinet private network video monitoring 4G to Ethernet to WiFi wired network speed test software and hardware customization
CocoaPods could not find compatible versions for pod 'Firebase/CoreOnly'
2 power view
Internship: unfamiliar annotations involved in the project code and their functions
Basic process and testing idea of interface automation
Leetcode1961. Check whether the string is an array prefix
Maya hollowed out modeling
Unity VR solves the problem that the handle ray keeps flashing after touching the button of the UI
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
leetcode刷题_平方数之和
Kubernetes stateless application expansion and contraction capacity
Reasonable and sensible
Docker compose configures MySQL and realizes remote connection
Code review concerns
Leetcode3. Implement strstr()
[detailed] several ways to quickly realize object mapping