久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
hk32f030m單片機定時器消抖,解決按鍵按下讀取電平抖動
[打印本頁]
作者:
sr861126
時間:
2023-9-21 11:31
標題:
hk32f030m單片機定時器消抖,解決按鍵按下讀取電平抖動
用定時器按一定時間間隔掃描按鍵
#include "main.h"
#define A3_OFF GPIO_SetBits(GPIOA,GPIO_Pin_3);
#define A3_ON GPIO_ResetBits(GPIOA,GPIO_Pin_3);
#define u8 uint8_t
#define KEY0_Read GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)
unsigned char key0_flag = RESET;
#define BSRR_VAL 0x0006
uint8_t a=9;
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
u8 Key_left=1,Key_up,Key_right, Key_down;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
static uint8_t fac_us = 0;
static uint16_t fac_ms = 0;
/**
* @brief Main program.
* @param None
* @retval None
*/
void KEY_Scan(void);
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us = SystemCoreClock/8000000;
fac_ms = (uint16_t)fac_us*1000;
if( nms > 0 )
{
SysTick->LOAD=(uint32_t)nms*fac_ms; //時間加載(SysTick->LOAD為24bit)
SysTick->VAL =0x00; //清空計數器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //開始倒數
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16))); //等待時間到達
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //關閉計數器
SysTick->VAL =0X00; //清空計數器
}
}
void KEY_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Schmit = GPIO_Schmit_Disable;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void GPIO_CONIG()
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_2| GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 842; // 32M/38K = 842.10
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_Pulse =421;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE);
//中斷優先級NVIC設置
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
TIM_CtrlPWMOutputs(TIM2, ENABLE);
}
//定時器3中斷服務程序
void TIM2_IRQHandler(void) //TIM2中斷
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查TIM2更新中斷發生與否
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update ); //清除TIMx更新中斷標志
// NEC_IR_Remote_Periodic_Task();
KEY_Scan();
}
}
void KEY_Scan(void)
{
static unsigned int key0_cnt = 0;
if( RESET == KEY0_Read )
{
key0_cnt ++;
if( 380 == key0_cnt )
{
key0_flag =1;
}
if( key0_cnt > 38000 )
{
key0_cnt = 38000;
}
}
else
{
key0_cnt = 0;
}
}
int main(void)
{
KEY_GPIO_Init();
TIM2_Configuration();
GPIO_CONIG();
GPIO_SetBits(GPIOC,GPIO_Pin_7);
while(1)
{
// GPIO_SetBits(GPIOC,GPIO_Pin_7);
// Delay(838709);//500ms
// Delay(838709);
//else if(key!=1)
// GPIO_ResetBits(GPIOC,GPIO_Pin_7);
if( 1 == key0_flag )
{
GPIO_Toggle(GPIOC,GPIO_Pin_7); key0_flag=0;
}
}
}
復制代碼
原理圖: 無
仿真: 無
代碼:
GPIO_IOToggle.7z
(19.72 KB, 下載次數: 1)
2023-9-24 21:48 上傳
點擊文件名下載附件
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲日韩中文字幕一区
|
亚洲欧美在线一区
|
久久久久亚洲精品
|
免费在线观看一级毛片
|
亚洲欧洲日本国产
|
九九av
|
av在线电影网
|
97色伦网
|
亚洲精品日韩精品
|
伊人免费视频二
|
福利av在线
|
精品国产乱码久久久久久丨区2区
|
大学生a级毛片免费视频
|
91精品亚洲
|
国产精品日韩
|
香蕉久久a毛片
|
国产一区二区三区视频在线观看
|
欧美视频在线免费
|
亚洲欧美综合网
|
亚洲手机在线
|
欧美一区二区在线观看视频
|
国产一区二区在线播放视频
|
欧美电影免费观看
|
99久久久久久99国产精品免
|
欧美一区二区三区
|
日韩一区二区在线播放
|
亚洲精品永久免费
|
一二区视频
|
日本久久视频
|
日韩激情在线
|
狠狠干美女
|
小草久久久久久久久爱六
|
成人在线视频观看
|
黄瓜av
|
国内久久
|
亚洲成av
|
一级黄色短片
|
涩涩鲁亚洲精品一区二区
|
欧美日韩在线免费观看
|
久久av一区二区三区
|
国产精品久久久久久久久久软件
|