蜂鸣器 STM32单片机

C
#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程序
C
#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)

登录后可以发表评论

立即登录
💬

还没有评论,快来发表第一条评论吧!