1.先上圖

2.接線圖
3.實作效果
觸碰一下震動傳感器,燈亮起,過一會兒燈熄滅
4.原理
當震動傳感器io為低電平打開繼電器,高電平關閉繼電器,觸碰震動傳感器時io接收低電平,
附上代碼
在這里插入代碼片
#include "stm32f10x.h"
#include "relay.h"
#include "led.h"
#include "shake.h"
#include "exti.h"
void delay(uint16_t time)
{
uint16_t i = 0;
while(time--)
{
i=12000;
while(i--);
}
}
## 主函式
int main()
{
Shake_Init();//震動io呼叫
LED_Init();//ledio呼叫
Relay_Init();//繼電器io呼叫呼叫各個模塊的io口,io口默認高阻態無電平
exti_init();//中斷io呼叫
//拉高函式GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//GPIO_ResetBits(GPIOA,GPIO_Pin_3);//拉低函式,將3電平拉低
GPIO_SetBits(GPIOA,GPIO_Pin_3);//拉高函式,將3電平拉高,初始化繼電器為關閉狀態
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_3);//拉低函式,將3電平拉低,打開繼電器,初始化繼電器為關閉狀態
delay(1000);
GPIO_SetBits(GPIOA,GPIO_Pin_3);//拉高函式,將A3電平拉高
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_3);//拉高函式,將3電平拉高,初始化繼電器為關閉狀態
}
}
}
***
## 振動傳感器.c檔案
***
#include "stm32f10x.h"
#include "shake.h"
void Shake_Init()//驅動振動傳感器
{
GPIO_InitTypeDef shake_init;//結構體變數名
//打開gpioA時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//配置gpioA結構體
shake_init.GPIO_Pin = GPIO_Pin_0;
shake_init.GPIO_Speed=GPIO_Speed_10MHz;
shake_init.GPIO_Mode =GPIO_Mode_IPD;
//gpioA初始化
GPIO_Init(GPIOA, &shake_init);
}
## 繼電器.c檔案
#include "relay.h"
#include "stm32f10x.h"
void Relay_Init(void)
{
GPIO_InitTypeDef Relay_init;//結構體變數名
//1.打開繼電器gpioA時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//2.gpioA3結構體的配置
Relay_init.GPIO_Pin =GPIO_Pin_3;//選擇引腳
Relay_init.GPIO_Speed=GPIO_Speed_10MHz;//選擇電平大小,初始狀態無電平
Relay_init.GPIO_Mode =GPIO_Mode_Out_PP;//用推挽輸出
//3.gpio初始化
GPIO_Init(GPIOA, &Relay_init);//選擇gpio埠,加入配置好的結構體
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272566.html
標籤:其他
下一篇:使用正點原子stm32f103zet6+rt_thread+eps8266+mqtt實作硬體和服務器之間的通信(二)
