|

本帖最后由 LaoFan 于 2021-4-24 22:36 编辑
for延时
while (1)
{ int i=0;
for(i=0;i<5000000;i++);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
for(i=0;i<5000000;i++);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
轮询记数点灯
while (1)
{
count++;
if(count>=500000)
{
count=0;
if(flg==0)
{
flg=1;
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);//高电平
}
else
{
flg=0;
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);//低电平
}
}
轮询计数并列点灯
while (1)
{
count++;
if(count>=500000)
{
count=0;
if(flg==0)
{
flg=1;
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//高电平
}
else
{
flg=0;
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//低电平
}
}
count1++;
if(count1>=1000000)
{
count1=0;
if(flg1==0)
{
flg1=1;
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);//高电平
}
else
{
flg1=0;
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);//低电平
}
}
按键消抖传统延时
while (1)
{
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按键是否按下
{
for(uint32_t i=0;i<10000;i++);//延时
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按键是否按下
{
printf("按键按下\n");
step=1;
}
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按键是否松开
{
for(uint32_t i=0;i<10000;i++);//延时
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按键是否松开
{
printf("按键松开\n");
step=0;
}
}
}
}
按键消抖状态机方式
while (1)
{
switch(step)
{
case 0:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET)//按键是否按下
{
count++;
if(count>=10000)//延时
{
count=0;
printf("按键按下\n");
step=1;
}
}
else
{
count=0;
}
}
break;
case 1:
{
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET)//按键是否松开
{
printf("按键松开\n");
step=0;
}
}
break;
}
|
|