【接線】
作者共發了4篇帖子。
![]() |
【接線】 |
![]() |
【程序】
#include "stm32f10x.h" #define _BV(n) (1 << (n)) #define K1 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) // 延時函數 void delay() { uint32_t i; for (i = 0; i < 20000; i++); } int main(void) { GPIO_InitTypeDef init; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 開啟PB時鐘 // PB8~15為輸出 init.GPIO_Pin = 0xff00; init.GPIO_Speed = GPIO_Speed_50MHz; init.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOB, &init); // PB0~7為輸入 init.GPIO_Pin = 0x00ff; init.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOB, &init); while (1) { // 當按鍵1按下時 if (!K1) { delay(); if (!K1) { GPIOB->ODR ^= _BV(8); // 反轉繼電器所在引腳的電平 while (!K1); } } } } |
![]() |
【說明】 |
![]() |
【程序2:每隔一定時間自動吸合和釋放繼電器】
#include <stm32f10x.h> void delay(void) { uint32_t i; for (i = 0; i < 8000000; i++); } int main(void) { GPIO_InitTypeDef init; init.GPIO_Pin = GPIO_Pin_8; init.GPIO_Speed = GPIO_Speed_50MHz; init.GPIO_Mode = GPIO_Mode_Out_OD; // 必須為開漏輸出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_Init(GPIOB, &init); while (1) { GPIOB->ODR ^= GPIO_Pin_8; // 反轉PB8上的電平 delay(); // 延時 } } |