【2k行代码】基于stm32f4xx粤嵌GEC-M4的按键密码锁、呼吸灯、蜂鸣器音乐、超声波测距及倒车雷达、温湿度检测、光敏电阻自动灯光调节、USART串口控制系统
前文:
blog.csdn.net/weixin_53403301/article/details/121684671
blog.csdn.net/weixin_53403301/article/details/121671026
在此基础上增加了光敏电阻自动灯光调节 并增加了音频精度和国际标准音名
音乐播放部分参考:
blog.csdn.net/weixin_53403301/article/details/121735779
【极限精度】基于stm32f4xx的蜂鸣器音乐播放及国际绝对音名标准频率定义(32位无符号整型精度、十二等律体系、A4=440.01000Hz)
资源:
download.csdn.net/download/weixin_53403301/85147738
第一个循环是按键密码锁 每次按下按键就会有对应LED灯点亮 同时蜂鸣器响一声 输入正确的密码才能进入第二模式 密码是四位 默认4321 输入错误则LED及蜂鸣器报警两次
第二模式即呼吸灯、蜂鸣器播放音乐系统 按键1播放生日快乐 按住按键2实现呼吸灯明暗循环变化 按键3播放Linkin Park的In The End
音乐播放截止前 长按按键1或按键3即能实现循环播放 按键4终止循环
第三模式是温湿度检测及超声波测距系统 通过USART串口显示数据 这里超声波测距模块的TX接到PB8 RX接到PB9
LED的PF10一直随距离变换而闪烁 按键1开启蜂鸣器报警 按键4关闭蜂鸣器 蜂鸣器报警和PF10的闪烁频率相同 距离越近 频率越快 同样此功能可以通过串口输入“S”“Q”来控制
在串口输入L即开启随湿度变化的呼吸灯 湿度越高 呼吸灯越亮 输入E开启流水灯循环 输入D关闭呼吸灯
长按0.5秒按键2则可以实现打断循环 按键3用于终止程序(return 0)
第四模式是光敏电阻的自动灯光调节系统 LED的PF9、PE13和14可以随着光照度变化而自动调节亮度 光照度越高 LED灯光越暗 反之越亮
代码如下:
# include "stm32f4xx.h"
# include "GPIO.h"
# include "DELAY.h"
# include "GPIO_BUS.h"
# include "MUSIC_NOTE.h"
# include "PITCH.h"
# include <stdio.h>
unsigned int times=0;
unsigned int S=0;
int32_t jugg_temp=0;
uint8_t temp_buf[5]={0};
static uint16_t tim13_period=0;
#pragma import(__use_no_semihosting_swi)
struct __FILE { int handle; };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f)
{
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
USART_ClearFlag(USART1,USART_FLAG_TXE);
return ch;
}
void init_TIM14_ADC()
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
TIM_TimeBaseInitStruct.TIM_Prescaler = 0;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = 100-1;
TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_Pulse = 0;
TIM_OC1Init(TIM14,&TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM14,ENABLE);
TIM_Cmd(TIM14,ENABLE);
}
void init_TIM1_ADC()
{
GPIO_InitTypeDef GPIOE_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIOE_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIOE_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOE_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOE_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOE_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_TIM1);
GPIO_Init(GPIOE,&GPIOE_InitStruct);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 100-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC3Init(TIM1,&TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_Cmd(TIM1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIOE_InitStruct.GPIO_Pin = GPIO_Pin_14;
GPIOE_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOE_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOE_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOE_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_TIM1);
GPIO_Init(GPIOE,&GPIOE_InitStruct);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 100-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1,ENABLE);
TIM_Cmd(TIM1, ENABLE);
}
void init_ADC(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStruct;
ADC_InitTypeDef ADC_InitStruct;
RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF, &GPIO_InitStructure);
ADC_DeInit();
ADC_CommonInitStruct.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
ADC_CommonInitStruct.ADC_Mode=ADC_Mode_Independent;
ADC_CommonInitStruct.ADC_Prescaler=ADC_Prescaler_Div4;
ADC_CommonInitStruct.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStruct);
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStruct.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
ADC_InitStruct.ADC_NbrOfConversion=5;
ADC_InitStruct.ADC_Resolution=ADC_Resolution_8b;
ADC_InitStruct.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC3, &ADC_InitStruct);
ADC_Cmd(ADC3, ENABLE);
}
uint16_t get_ADC(uint8_t ch)
{
ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_480Cycles );
ADC_SoftwareStartConv(ADC3);
while(!ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC3);
}
void init_TEMP(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG,&GPIO_InitStructure);
PG_O(9)=1;
}
int32_t read_TEMP(uint8_t *pbuf)
{
uint32_t t=0;
int32_t i=0,j=0;
uint8_t d=0;
uint8_t *p=pbuf;
uint32_t check_sum=0;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG,&GPIO_InitStructure);
PG_O(9)=0;
delay_ms(20);
PG_O(9)=1;
delay_us(30);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG,&GPIO_InitStructure);
t=0;
while(PG_I(9))
{
t++;
delay_us(1);
if(t>=4000)
return -1;
}
t=0;
while(PG_I(9)==0)
{
t++;
delay_us(1);
if(t>=1000)
return -2;
}
t=0;
while(PG_I(9))
{
t++;
delay_us(1);
if(t>=1000)
return -3;
}
for(j=0; j<5; j++)
{
d=0;
for(i=7; i>=0; i--)
{
t=0;
while(PG_I(9)==0)
{
t++;
delay_us(1);
if(t>=1000)
return -4;
}
delay_us(40);
if(PG_I(9))
{
d|=1<<i;
t=0;
while(PG_I(9))
{
t++;
delay_us(1);
if(t>=1000)
return -5;
}
}
}
p[j]=d;
}
check_sum = (p[0]+p[1]+p[2]+p[3])&0xFF;
if(p[4] != check_sum)
return -6;
return 0;
}
void init_KEEY(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_KEEY_InitStruct);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOE,&GPIO_KEEY_InitStruct);
}
void init_BEEP(void)
{
GPIO_InitTypeDef GPIOF_BEEP_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_BEEP_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOF_BEEP_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIOF_BEEP_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_BEEP_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOF_BEEP_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOF,&GPIOF_BEEP_InitStruct);
}
void close_BEEP(void)
{
GPIO_InitTypeDef GPIOF_BEEP_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_BEEP_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOF_BEEP_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIOF_BEEP_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_BEEP_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOF_BEEP_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOF,&GPIOF_BEEP_InitStruct);
}
void init_GPIO_EF_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_Init(GPIOE,&GPIO_InitStruct);
}
void init_USART1(unsigned int Baud)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_KEEY_InitStruct);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_BaudRate = Baud;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void init_TX(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
void init_RX(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
void init_TIM14_PF9(void)
{
GPIO_InitTypeDef GPIOF_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIOF_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOF_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOF_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_TIM14);
GPIO_Init(GPIOF,&GPIOF_InitStruct);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 100-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM14,TIM_IT_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM14, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
TIM_Cmd(TIM14, ENABLE);
TIM_CtrlPWMOutputs(TIM14,ENABLE);
}
void init_TIM1_PE13(void)
{
GPIO_InitTypeDef GPIOE_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIOE_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIOE_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOE_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOE_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOE_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_TIM1);
GPIO_Init(GPIOE,&GPIOE_InitStruct);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 100-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM1, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void init_TIM1_PE14(void)
{
GPIO_InitTypeDef GPIOE_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIOE_InitStruct.GPIO_Pin = GPIO_Pin_14;
GPIOE_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOE_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOE_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOE_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_TIM1);
GPIO_Init(GPIOE,&GPIOE_InitStruct);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 100-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init(TIM1, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_Cmd(TIM1, ENABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
void init_TIM13_PF8_F(uint32_t freq)
{
GPIO_InitTypeDef GPIOF_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOF_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIOF_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOF_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_TIM13);
GPIO_Init(GPIOF,&GPIOF_InitStruct);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE);
TIM_TimeBaseStructure.TIM_Period = (8400000000000/freq)-1;
tim13_period = TIM_TimeBaseStructure.TIM_Period;
TIM_TimeBaseStructure.TIM_Prescaler = 1-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM13,TIM_IT_Update, ENABLE);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM13, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM13, TIM_OCPreload_Enable);
TIM_Cmd(TIM13, ENABLE);
}
void TIM13_Set_duty(uint16_t duty)
{
uint32_t cmp=0;
cmp = (tim13_period+1)*duty/100;
TIM_SetCompare1(TIM13,cmp);
}
void init_TIM3_RX(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 2-1;
TIM_TimeBaseStructure.TIM_Prescaler = 84-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3, DISABLE);
}
void init_TIM2_TX(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 5000-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE);
}
void init_TIM4_Warning(unsigned int tim)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseStructure.TIM_Period = tim-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM4, ENABLE);
}
void init_EXTI0(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_KEEY_InitStruct);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line0;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void init_EXTI4(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE,&GPIO_KEEY_InitStruct);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line4;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void close_EXTI0(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_KEEY_InitStruct);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line0;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStruct.EXTI_LineCmd = DISABLE;
EXTI_Init(&EXTI_InitStruct);
}
void close_EXTI4(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE,&GPIO_KEEY_InitStruct);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line4;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStruct.EXTI_LineCmd = DISABLE;
EXTI_Init(&EXTI_InitStruct);
}
void mainloop(void)
{
init_GPIO_EF_OUT();
init_BEEP();
init_KEEY();
MUSIC_BPM=120;
int y;
int flag=0;
delay_ms(500);
while(1)
{
int buf[4];
uint8_t key0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
uint8_t key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
uint8_t key3 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
PF_O(8)=0;
if( key0 == Bit_RESET)
{
y=0;
flag++;
while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_9);PF_O(8)=1;
uint8_t key0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if(key0 == Bit_SET)GPIO_SetBits(GPIOF,GPIO_Pin_9);break;}
delay_ms(200);PF_O(8)=0;PF_O(9)=1;
}
if( key1 == Bit_RESET)
{
y=1;
flag++;
while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_10);PF_O(8)=1;
uint8_t key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);
if(key1 == Bit_SET)GPIO_SetBits(GPIOF,GPIO_Pin_10);break;}
delay_ms(200);PF_O(8)=0;PF_O(10)=1;
}
if( key2 == Bit_RESET)
{
y=2;
flag++;
while(1){GPIO_ResetBits(GPIOE,GPIO_Pin_13);PF_O(8)=1;
uint8_t key2 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
if(key2 == Bit_SET)GPIO_SetBits(GPIOE,GPIO_Pin_13);break;}
delay_ms(200);PF_O(8)=0;PE_O(13)=1;
}
if( key3 == Bit_RESET)
{
y=3;
flag++;
while(1){GPIO_ResetBits(GPIOE,GPIO_Pin_14);PF_O(8)=1;
uint8_t key3 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
if(key3 == Bit_SET)GPIO_SetBits(GPIOE,GPIO_Pin_14);break;}
delay_ms(200);PF_O(8)=0;PE_O(14)=1;
}
if (flag >= 1){buf[flag-1]=y;}
if (flag == 4){
buf[flag-1]=y;flag=0;
if (buf[0]==3 && buf[1]==2 && buf[2]==1 && buf[3]==0)
{
PF_O(9)=1;PF_O(10)=1;PE_O(13)=1;PE_O(14)=1;PF_O(8)=0;
delay_ms(200);
PF_O(9)=0;PF_O(10)=0;PE_O(13)=0;PE_O(14)=0;PF_O(8)=1;
delay_ms(200);
break;
}
else if (buf[0]!=3 | buf[1]!=2 | buf[2]!=1 | buf[3]==0){
PF_O(9)=1;PF_O(10)=1;PE_O(13)=1;PE_O(14)=1;PF_O(8)=0;
delay_ms(200);
PF_O(9)=0;PF_O(10)=0;PE_O(13)=0;PE_O(14)=0;PF_O(8)=1;
delay_ms(200);
PF_O(9)=1;PF_O(10)=1;PE_O(13)=1;PE_O(14)=1;PF_O(8)=0;
delay_ms(200);
PF_O(9)=0;PF_O(10)=0;PE_O(13)=0;PE_O(14)=0;PF_O(8)=1;
delay_ms(200);
PF_O(9)=1;PF_O(10)=1;PE_O(13)=1;PE_O(14)=1;PF_O(8)=0;
delay_ms(200);
}
}
}
PF_O(8)=0;
init_TIM14_PF9();
init_TIM1_PE13();
init_TIM1_PE14();
PF_O(9)=1;PF_O(10)=1;PE_O(13)=1;PE_O(14)=1;
TIM_SetCompare1(TIM14,100);
TIM_SetCompare3(TIM1,100);
TIM_SetCompare4(TIM1,100);
int PWM;
TIM_Cmd(TIM13, DISABLE);
while(1)
{
if(PE_I(4)==0)
{
TIM_Cmd(TIM13, DISABLE);
TIM_Cmd(TIM14, DISABLE);
TIM_Cmd(TIM1, DISABLE);
close_BEEP();
break;
}
while(PE_I(3)==0)
{
init_TIM13_PF8_F(A5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(E6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(E6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
if(PE_I(3)==1)TIM13_Set_duty(0);break;
}
while(PA_I(0)==0)
{
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(A5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_2*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(A5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(D6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_2*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(G5);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(G6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(E6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(B5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(A5);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(F6);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(F6);
TIM13_Set_duty(25);
delay_ms(NOTE_8*1000);
init_TIM13_PF8_F(E6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(D6);
TIM13_Set_duty(25);
delay_ms(NOTE_4*1000);
init_TIM13_PF8_F(C6);
TIM13_Set_duty(25);
delay_ms(NOTE_1*1000);
if(PA_I(0)==1)TIM13_Set_duty(0);break;
}
while(PE_I(2)==0)
{
for(PWM=100;PWM>0;PWM--)
{
TIM_SetCompare1(TIM14,100-PWM);
TIM_SetCompare3(TIM1,100-PWM);
TIM_SetCompare4(TIM1,100-PWM);
delay_ms(10);
if(PE_I(2)==1)
{
TIM_SetCompare1(TIM14,100);
TIM_SetCompare3(TIM1,100);
TIM_SetCompare4(TIM1,100);
break;
}
}
for(PWM=0;PWM<100;PWM++)
{
TIM_SetCompare1(TIM14,100-PWM);
TIM_SetCompare3(TIM1,100-PWM);
TIM_SetCompare4(TIM1,100-PWM);
delay_ms(10);
if(PE_I(2)==1)
{
TIM_SetCompare1(TIM14,100);
TIM_SetCompare3(TIM1,100);
TIM_SetCompare4(TIM1,100);
break;
}
}
if(PE_I(2)==1)
{
TIM_SetCompare1(TIM14,100);
TIM_SetCompare3(TIM1,100);
TIM_SetCompare4(TIM1,100);
break;
}
}
}
}
void Count(void)
{
S=times*2*0.17;
if(jugg_temp == 0)
{
TIM_SetCompare1(TIM14,100-temp_buf[0]);
TIM_SetCompare3(TIM1,100-temp_buf[0]);
TIM_SetCompare4(TIM1,100-temp_buf[0]);
if(S==0)
{
printf(" 距离测量失败 | | 温度:%d.%d℃ | 湿度:%d.%d%%\r\n",temp_buf[2],temp_buf[3],temp_buf[0],temp_buf[1]);
printf(" | | |\r\n");
TIM_Cmd(TIM4, DISABLE);
PF_O(8)=0;
}
if(S>=1&S<30)
{
printf(" 距离过近 | | 温度:%d.%d℃ | 湿度:%d.%d%%\r\n",temp_buf[2],temp_buf[3],temp_buf[0],temp_buf[1]);
printf(" | | |\r\n");
TIM_Cmd(TIM4, DISABLE);
PF_O(8)=0;
}
if(S>=30&S<=4000)
{
printf(" | 距离:%dmm | 温度:%d.%d℃ | 湿度:%d.%d%%\r\n",S,temp_buf[2],temp_buf[3],temp_buf[0],temp_buf[1]);
printf(" | | |\r\n");
init_TIM4_Warning(S);
}
if(S>4000)
{
printf(" 超出测量范围 | | 温度:%d.%d℃ | 湿度:%d.%d%%\r\n",temp_buf[2],temp_buf[3],temp_buf[0],temp_buf[1]);
printf(" | | |\r\n");
TIM_Cmd(TIM4, DISABLE);
PF_O(8)=0;
}
}
else
{
if(S==0)
{
printf(" 距离测量失败 | | | 温湿度获取错误代码:%d \r\n",jugg_temp);
printf(" | | |\r\n");
TIM_Cmd(TIM4, DISABLE);
PF_O(8)=0;
}
if(S>=1&S<30)
{
printf(" 距离过近 | | | 温湿度获取错误代码:%d \r\n",jugg_temp);
printf(" | | |\r\n");
TIM_Cmd(TIM4, DISABLE);
PF_O(8)=0;
}
if(S>=30&S<=4000)
{
printf(" | 距离:%dmm | | 温湿度获取错误代码:%d \r\n",S,jugg_temp);
printf(" | | |\r\n");
init_TIM4_Warning(S);
}
if(S>4000)
{
printf(" 超出测量范围 | | | 温湿度获取错误代码:%d \r\n",jugg_temp);
TIM_Cmd(TIM4, DISABLE);
printf(" | | |\r\n");
PF_O(8)=0;
}
}
times=0;
S=0;
}
void lux_ADC(void)
{
uint8_t ADC_min=0,ADC_max=0;
uint8_t ADC_sj=0;
uint8_t ADC_PWM=0;
init_ADC();
init_KEEY();
init_TIM14_ADC();
init_TIM1_ADC();
ADC_min = ADC_max = get_ADC(5);
while(1)
{
ADC_sj = get_ADC(5);
if(ADC_sj < ADC_min) ADC_min = ADC_sj;
if(ADC_sj > ADC_max) ADC_max = ADC_sj;
ADC_PWM = (ADC_sj - ADC_min)*99/(ADC_max - ADC_min);
TIM_SetCompare1(TIM14,ADC_PWM);
TIM_SetCompare3(TIM1,ADC_PWM);
TIM_SetCompare4(TIM1,ADC_PWM);
if(PA_I(0)==0)
{
TIM_Cmd(TIM2, DISABLE);
TIM_Cmd(TIM3, DISABLE);
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM1, DISABLE);
TIM_ARRPreloadConfig(TIM14,DISABLE);
TIM_ARRPreloadConfig(TIM1,DISABLE);
TIM_Cmd(TIM14, DISABLE);
TIM_Cmd(TIM13, DISABLE);
USART_Cmd(USART1, DISABLE);
close_EXTI4();
close_EXTI0();
init_GPIO_EF_OUT();
init_BEEP();
PF_BUS_O(0xFFFF);
PE_BUS_O(0xFFFF);
PF_O(8)=0;
init_KEEY();
break;
}
}
}
int main(void)
{
mainloop();
init_USART1(115200);
init_TEMP();
PF_O(8)=0;
init_TX();
PB_O(8)=0;
init_RX();
init_GPIO_EF_OUT();
PF_BUS_O(0x0000);
PE_BUS_O(0x0000);
delay_ms(500);
PF_BUS_O(0xFFFF);
PE_BUS_O(0xFFFF);
PF_O(8)=0;
TIM_SetCompare1(TIM14,100);
TIM_SetCompare3(TIM1,100);
TIM_SetCompare4(TIM1,100);
printf(" by:Mike Zhou | 网易独家音乐人 | 嵌入式软件工程师 | https://music.163.com/#/artist?id=12115205\n");
printf(" | | | https://blog.csdn.net/weixin_53403301\r\n");
init_EXTI0();
init_EXTI4();
init_TIM3_RX();
init_TIM2_TX();
while(1)
{
while(!PB_I(9));
TIM_Cmd(TIM3, ENABLE);
while(PB_I(9));
TIM_Cmd(TIM3, DISABLE);
Count();
jugg_temp = read_TEMP(temp_buf);
if (PE_I(2)==0)
{
TIM_Cmd(TIM2, DISABLE);
TIM_Cmd(TIM3, DISABLE);
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM1, DISABLE);
TIM_CtrlPWMOutputs(TIM14,DISABLE);
TIM_Cmd(TIM14, DISABLE);
TIM_Cmd(TIM13, DISABLE);
USART_Cmd(USART1, DISABLE);
close_EXTI4();
close_EXTI0();
init_GPIO_EF_OUT();
init_BEEP();
PF_BUS_O(0xFFFF);
PE_BUS_O(0xFFFF);
PF_O(8)=0;
init_KEEY();
break;
}
if (PE_I(3)==0)
{
TIM_Cmd(TIM2, DISABLE);
TIM_Cmd(TIM3, DISABLE);
TIM_Cmd(TIM4, DISABLE);
TIM_Cmd(TIM1, DISABLE);
TIM_CtrlPWMOutputs(TIM14,DISABLE);
TIM_Cmd(TIM14, DISABLE);
TIM_Cmd(TIM13, DISABLE);
USART_Cmd(USART1, DISABLE);
close_EXTI4();
close_EXTI0();
init_GPIO_EF_OUT();
init_BEEP();
PF_BUS_O(0xFFFF);
PE_BUS_O(0xFFFF);
PF_O(8)=0;
init_KEEY();
return 0;
}
}
lux_ADC();
}
void EXTI0_IRQHandler(void)
{
if(EXTI_GetFlagStatus(EXTI_Line0) == SET)
{
init_BEEP();
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI4_IRQHandler(void)
{
if(EXTI_GetFlagStatus(EXTI_Line4) == SET)
{
close_BEEP();
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update) == SET)
{
PF_O(8)=!PF_O(8);
PF_O(10)=!PF_O(10);
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
{
times++;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)
{
PB_O(8)=1;
delay_us(20);
PB_O(8)=0;
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
{
char data = USART_ReceiveData(USART1);
USART_SendData(USART1,data);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
if(data=='Q')
{
close_BEEP();
}
if(data=='S')
{
init_BEEP();
}
if(data=='L')
{
init_TIM14_PF9();
init_TIM1_PE13();
init_TIM1_PE14();
}
if(data=='D')
{
TIM_Cmd(TIM1, DISABLE);
TIM_Cmd(TIM14, DISABLE);
init_GPIO_EF_OUT();
PF_O(9)=1;
PE_O(13)=1;
PE_O(14)=1;
}
if(data=='E')
{
TIM_Cmd(TIM1, DISABLE);
TIM_Cmd(TIM14, DISABLE);
init_GPIO_EF_OUT();
PF_O(9)=1;
PE_O(13)=1;
PE_O(14)=1;
for(int i=0;i<2;i++)
{
PF_O(9)=0;delay_ms(100);
PF_O(9)=1;delay_ms(100);
PE_O(13)=0;delay_ms(100);
PE_O(13)=1;delay_ms(100);
PE_O(14)=0;delay_ms(100);
PE_O(14)=1;delay_ms(100);
PF_O(9)=0;delay_ms(100);
PE_O(13)=0;delay_ms(100);
PE_O(14)=0;delay_ms(100);
PE_O(14)=0;delay_ms(100);
PE_O(13)=0;delay_ms(100);
PF_O(9)=0;delay_ms(100);
PF_O(9)=1;delay_ms(100);
PE_O(13)=1;delay_ms(100);
PE_O(14)=1;delay_ms(100);
}
}
}
}
以下是导入的函数及库
# include "stm32f4xx.h"
void delay_ms(unsigned int ms)
{
while(ms--)
{
SysTick->CTRL = 0;
SysTick->LOAD = 168000000/1000-1;
SysTick->VAL = 0;
SysTick->CTRL = 5;
while ((SysTick->CTRL & 0x00010000)==0);
}
SysTick->CTRL = 0;
}
void delay_us(unsigned int us)
{
while(us--)
{
SysTick->CTRL = 0;
SysTick->LOAD = 168000000/1000/1000-1;
SysTick->VAL = 0;
SysTick->CTRL = 5;
while ((SysTick->CTRL & 0x00010000)==0);
}
SysTick->CTRL = 0;
}
#ifndef __DELAY_H__
#define __DELAY_H__
void delay_ms(unsigned int ms);
void delay_us(unsigned int us);
#endif
#ifndef __GPIO_H__
#define __GPIO_H__
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define GPIOA_ODR_Addr (GPIOA_BASE+20)
#define GPIOB_ODR_Addr (GPIOB_BASE+20)
#define GPIOC_ODR_Addr (GPIOC_BASE+20)
#define GPIOD_ODR_Addr (GPIOD_BASE+20)
#define GPIOE_ODR_Addr (GPIOE_BASE+20)
#define GPIOF_ODR_Addr (GPIOF_BASE+20)
#define GPIOG_ODR_Addr (GPIOG_BASE+20)
#define GPIOH_ODR_Addr (GPIOH_BASE+20)
#define GPIOI_ODR_Addr (GPIOI_BASE+20)
#define GPIOA_IDR_Addr (GPIOA_BASE+16)
#define GPIOB_IDR_Addr (GPIOB_BASE+16)
#define GPIOC_IDR_Addr (GPIOC_BASE+16)
#define GPIOD_IDR_Addr (GPIOD_BASE+16)
#define GPIOE_IDR_Addr (GPIOE_BASE+16)
#define GPIOF_IDR_Addr (GPIOF_BASE+16)
#define GPIOG_IDR_Addr (GPIOG_BASE+16)
#define GPIOH_IDR_Addr (GPIOH_BASE+16)
#define GPIOI_IDR_Addr (GPIOI_BASE+16)
#define PA_O(n) BIT_ADDR(GPIOA_ODR_Addr,n)
#define PA_I(n) BIT_ADDR(GPIOA_IDR_Addr,n)
#define PB_O(n) BIT_ADDR(GPIOB_ODR_Addr,n)
#define PB_I(n) BIT_ADDR(GPIOB_IDR_Addr,n)
#define PC_O(n) BIT_ADDR(GPIOC_ODR_Addr,n)
#define PC_I(n) BIT_ADDR(GPIOC_IDR_Addr,n)
#define PD_O(n) BIT_ADDR(GPIOD_ODR_Addr,n)
#define PD_I(n) BIT_ADDR(GPIOD_IDR_Addr,n)
#define PE_O(n) BIT_ADDR(GPIOE_ODR_Addr,n)
#define PE_I(n) BIT_ADDR(GPIOE_IDR_Addr,n)
#define PF_O(n) BIT_ADDR(GPIOF_ODR_Addr,n)
#define PF_I(n) BIT_ADDR(GPIOF_IDR_Addr,n)
#define PG_O(n) BIT_ADDR(GPIOG_ODR_Addr,n)
#define PG_I(n) BIT_ADDR(GPIOG_IDR_Addr,n)
#define PH_O(n) BIT_ADDR(GPIOH_ODR_Addr,n)
#define PH_I(n) BIT_ADDR(GPIOH_IDR_Addr,n)
#define PI_O(n) BIT_ADDR(GPIOI_ODR_Addr,n)
#define PI_I(n) BIT_ADDR(GPIOI_IDR_Addr,n)
#endif
# include "stm32f4xx.h"
# include "GPIO.h"
void PA_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PA_O(i)=(num>>i)&0x0001;
}
}
unsigned int PA_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PA_I(i)<<i)&0xFFFF;
}
return num;
}
void PB_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PB_O(i)=(num>>i)&0x0001;
}
}
unsigned int PB_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PB_I(i)<<i)&0xFFFF;
}
return num;
}
void PC_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PC_O(i)=(num>>i)&0x0001;
}
}
unsigned int PC_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PC_I(i)<<i)&0xFFFF;
}
return num;
}
void PD_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PD_O(i)=(num>>i)&0x0001;
}
}
unsigned int PD_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PD_I(i)<<i)&0xFFFF;
}
return num;
}
void PE_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PE_O(i)=(num>>i)&0x0001;
}
}
unsigned int PE_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PE_I(i)<<i)&0xFFFF;
}
return num;
}
void PF_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PF_O(i)=(num>>i)&0x0001;
}
}
unsigned int PF_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PF_I(i)<<i)&0xFFFF;
}
return num;
}
void PG_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PG_O(i)=(num>>i)&0x0001;
}
}
unsigned int PG_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PG_I(i)<<i)&0xFFFF;
}
return num;
}
void PH_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PH_O(i)=(num>>i)&0x0001;
}
}
unsigned int PH_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PH_I(i)<<i)&0xFFFF;
}
return num;
}
void PI_BUS_O(unsigned int num)
{
int i;
for(i=0;i<16;i++)
{
PI_O(i)=(num>>i)&0x0001;
}
}
unsigned int PI_BUS_I(void)
{
unsigned int num;
int i;
for(i=0;i<16;i++)
{
num=num+(PI_I(i)<<i)&0xFFFF;
}
return num;
}
#ifndef __GPIO_BUS_H__
#define __GPIO_BUS_H__
void PA_BUS_O(unsigned int num);
unsigned int PA_BUS_I(void);
void PB_BUS_O(unsigned int num);
unsigned int PB_BUS_I(void);
void PC_BUS_O(unsigned int num);
unsigned int PC_BUS_I(void);
void PD_BUS_O(unsigned int num);
unsigned int PD_BUS_I(void);
void PE_BUS_O(unsigned int num);
unsigned int PE_BUS_I(void);
void PF_BUS_O(unsigned int num);
unsigned int PF_BUS_I(void);
void PG_BUS_O(unsigned int num);
unsigned int PG_BUS_I(void);
void PH_BUS_O(unsigned int num);
unsigned int PH_BUS_I(void);
void PI_BUS_O(unsigned int num);
unsigned int PI_BUS_I(void);
#endif
#ifndef __PITCH_H__
#define __PITCH_H__
#define C0 1635196
#define Db0 1732430
#define D0 1835446
#define Eb0 1944587
#define E0 2060219
#define F0 2182726
#define Gb0 2312517
#define G0 2450027
#define Ab0 2595713
#define A0 2750062
#define Bb0 2913589
#define B0 3086840
#define C1 3270393
#define Db1 3464861
#define D1 3670893
#define Eb1 3889175
#define E1 4120438
#define F1 4365452
#define Gb1 4625035
#define G1 4900054
#define Ab1 5191426
#define A1 5500125
#define Bb1 5827179
#define B1 6173681
#define C2 6540787
#define Db2 6929723
#define D2 7341786
#define Eb2 7778351
#define E2 8240876
#define F2 8730904
#define Gb2 9250070
#define G2 9800108
#define Ab2 10382853
#define A2 11000250
#define Bb2 11654358
#define B2 12347363
#define C3 13081575
#define Db3 13859446
#define D3 14683572
#define Eb3 15556702
#define E3 16481752
#define F3 17461808
#define Gb3 18500141
#define G3 19600217
#define Ab3 20765706
#define A3 22000500
#define Bb3 23308717
#define B3 24694726
#define C4 26163151
#define Db4 27718893
#define D4 29367144
#define Eb4 31113405
#define E4 32963504
#define F4 34923616
#define Gb4 37000283
#define G4 39200434
#define Ab4 41531413
#define A4 44001000
#define Bb4 46617435
#define B4 49389452
#define C5 52326302
#define Db5 55437786
#define D5 58734288
#define Eb5 62226810
#define E5 65927009
#define F5 69847233
#define Gb5 74000566
#define G5 78400868
#define Ab5 83062827
#define A5 88002000
#define Bb5 93234871
#define B5 98778905
#define C6 104652604
#define Db6 110875572
#define D6 117468576
#define Eb6 124453621
#define E6 131854019
#define F6 139694467
#define Gb6 148001132
#define G6 156801737
#define Ab6 166125654
#define A6 176004000
#define Bb6 186469742
#define B6 197557810
#define C7 209305209
#define Db7 221751144
#define D7 234937153
#define Eb7 248907243
#define E7 263708038
#define F7 279388934
#define Gb7 296002265
#define G7 313603475
#define Ab7 332251309
#define A7 352008000
#define Bb7 372939484
#define B7 395115620
#define C8 418610418
#define Db8 443502288
#define D8 469874307
#define Eb8 497814487
#define E8 527416077
#define F8 558777869
#define Gb8 592004530
#define G8 627206951
#define Ab8 664502618
#define A8 704016000
#define Bb8 745878969
#define B8 790231241
#define C9 837220836
#define Db9 887004577
#define D9 939748614
#define Eb9 995628975
#define E9 1054832155
#define F9 1117555739
#define Gb9 1184009061
#define G9 1254413903
#define Ab9 1329005236
#define A9 1408032000
#define Bb9 1491757939
#define B9 1580462482
#endif
#ifndef __MUSIC_NOTE_H__
#define __MUSIC_NOTE_H__
unsigned int MUSIC_BPM=120;
#define NOTE_4 (60/MUSIC_BPM)
#define NOTE_8 (30/MUSIC_BPM)
#define NOTE_16 (15/MUSIC_BPM)
#define NOTE_32 (7.5/MUSIC_BPM)
#define NOTE_64 (3.75/MUSIC_BPM)
#define NOTE_2 (120/MUSIC_BPM)
#define NOTE_1 (240/MUSIC_BPM)
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)