蜂鸣器 STM32单片机
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(100);
}
}
C4程序
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
uint16_t timeCnt = 0; // 总计时单位:ms
uint16_t period; // 蜂鸣器一个周期总时长
while(1)
{
timeCnt = 0;
// 倒计时总共15000ms(15秒)
while(timeCnt < 15000)
{
if(timeCnt < 10000)
{
// 0~10s:固定周期200ms响一次
period = 200;
}
else
{
// 10~15s:周期从200ms线性减小到50ms,频率加快
// timeCnt范围:10000 ~ 15000,区间5000ms
period = 200 - (timeCnt - 10000) * 150 / 5000;
}
GPIO_ResetBits(GPIOB,GPIO_Pin_12); // 蜂鸣器响
Delay_ms(period / 2);
GPIO_SetBits(GPIOB,GPIO_Pin_12); // 蜂鸣器停
Delay_ms(period / 2);
timeCnt += period;
}
// 15秒倒计时结束,蜂鸣器停止3秒,重新开始一轮倒计时
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(3000);
}
}
评论 (0)
登录后可以发表评论
立即登录还没有评论,快来发表第一条评论吧!