赞
踩
#include "stm32f10x.h" // 设备头文件 #include "Delay.h" int main(void) { // 开启GPIOA外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; // GPIO初始化结构体 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置GPIOA引脚0为推挽输出模式,最大输出速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); // 使用指定的配置初始化GPIOA while (1) { // 将GPIOA的引脚0置为低电平(复位状态) GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 延迟500毫秒 Delay_ms(500); // 将GPIOA的引脚0置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 延迟500毫秒 Delay_ms(500); // 将GPIOA的引脚0写为低电平 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 延迟500毫秒 Delay_ms(500); // 将GPIOA的引脚0写为高电平 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // 延迟500毫秒 Delay_ms(500); } }
#include "stm32f10x.h" // Device header #include "Delay.h" int main(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //打开GPIOA的时钟 GPIO_Init(GPIOA,&GPIO_InitStructure); while(1) { // 因为是低电平点亮,所以要取反 GPIO_Write(GPIOA,~0x0001); //0000 0000 0000 0001 Delay_ms(500); GPIO_Write(GPIOA,~0x0002); //0000 0000 0000 0010 Delay_ms(500); GPIO_Write(GPIOA,~0x0004); //0000 0000 0000 0100 Delay_ms(500); GPIO_Write(GPIOA,~0x0008); //0000 0000 0000 1000 Delay_ms(500); GPIO_Write(GPIOA,~0x0010); //0000 0000 0001 0000 Delay_ms(500); GPIO_Write(GPIOA,~0x0020); //0000 0000 0010 0000 Delay_ms(500); GPIO_Write(GPIOA,~0x0040); //0000 0000 0100 0000 Delay_ms(500); GPIO_Write(GPIOA,~0x0080); //0000 0000 1000 0000 Delay_ms(500); } }
#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); GPIO_ResetBits(GPIOB,GPIO_Pin_12); Delay_ms(100); GPIO_SetBits(GPIOB,GPIO_Pin_12); Delay_ms(700); } }
LED.c
#include "stm32f10x.h" // Device header //初始化LED灯 void LED_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2); } //开灯 void LED1_ON(void) { GPIO_ResetBits(GPIOA,GPIO_Pin_1); } //关灯 void LED1_OFF(void) { GPIO_SetBits(GPIOA,GPIO_Pin_1); } //实现翻转 void LED1_Turn(void) { // 判断此时IO口的状态,高->低|低->高 if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0) { GPIO_SetBits(GPIOA,GPIO_Pin_1); // 输出高电平 } else { GPIO_ResetBits(GPIOA,GPIO_Pin_1); // 输出低电平 } } void LED2_ON(void) { GPIO_ResetBits(GPIOA,GPIO_Pin_2); } void LED2_OFF(void) { GPIO_SetBits(GPIOA,GPIO_Pin_2); } void LED2_Turn(void) { if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0) { GPIO_SetBits(GPIOA,GPIO_Pin_2); } else { GPIO_ResetBits(GPIOA,GPIO_Pin_2); } }
Key.c
#include "stm32f10x.h" // Device header #include "Delay.h" void Key_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); } // 获取按键数值 uint8_t Key_GetNum(void) { uint8_t keyNum=0; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0) { //消抖 Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0); Delay_ms(20); keyNum=1; } if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0) { //消抖 Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0); Delay_ms(20); keyNum=2; } return keyNum; }
main.c
#include "stm32f10x.h" // Device header #include "Delay.h" #include "LED.h" #include "Key.h" uint8_t keyNum; int main(void) { LED_Init(); Key_Init(); while(1) { keyNum=Key_GetNum(); if(keyNum==1) { LED1_Turn(); } if(keyNum==2) { LED2_Turn(); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。