STM32_project:led_beep

STM32_project:led_beep_第1张图片代码: 

主要部分:

#include "stm32f10x.h"                  // Device header
#include "delay.h"

// 给蜂鸣器IO口输出低电平,响,高,不向。
//int main (void)
//{
//    // 开启时钟
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,  ENABLE); // rcc外设时钟控制的APB2外设接口, 第一个参数选择点亮那个口,第二个参数使能或者失能
//    // 初始化gpioA的PIN0口
//    GPIO_InitTypeDef GPIO_InitStruct;
//    //GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
//    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD ; // 开漏输出,高电平没有驱动能力
//    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
//    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//    GPIO_Init(GPIOA, &GPIO_InitStruct); // 用结构体初始化gpio口
//    
  GPIO_SetBits(GPIOA, GPIO_Pin_0);
  GPIO_ResetBits(GPIOA, GPIO_Pin_0);
  GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // Bit_RESET
    GPIO_Write;
//    const int delay_time = 100; // 用来定义常量,有作用域的限制。具有类型检查。
//                                              // const 定义的常量在程序运行时会分配内存,并且具有类型信息不是简单的文本替换。
//   while(1)
//   {
//       GPIO_ResetBits(GPIOA, GPIO_Pin_0);
//       Delay_ms(delay_time);
//       GPIO_SetBits(GPIOA, GPIO_Pin_0);
//       Delay_ms(delay_time);
//       GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); 
//       Delay_ms(delay_time);
//       GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); 
//       Delay_ms(delay_time);
//       
//       GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); // Bit_RESET 强制类型转换
//       Delay_ms(delay_time);
//       GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)(1)); // Bit_RESET
//       Delay_ms(delay_time);
//   }
//}

// 常量定义
const int delay_time = 100; // 用来定义常量,有作用域的限制。具有类型检查。
                                                 // const 定义的常量在程序运行时会分配内存,并且具有类型信息不是简单的文本替换。
// 函数声明                                   
void liushui(void); 
void liushui1(void); 
void beep(void);
void led_1(void);

int main (void)
{
    // 开启时钟
    // 可以通过按位或,选择多个引脚。
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,  ENABLE); // rcc外设时钟控制的APB2外设接口, 第一个参数选择点亮那个口,第二个参数使能或者失能
    // 初始化gpioA的PIN0口
    GPIO_InitTypeDef GPIO_InitStruct_A;
    GPIO_InitStruct_A.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
    //GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD ; // 开漏输出,高电平没有驱动能力
    GPIO_InitStruct_A.GPIO_Pin = GPIO_Pin_All;    // PIN0 ~ PIN15 选中所有引脚。
    GPIO_InitStruct_A.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct_A); // 用结构体初始化gpio口
    
    // 初始化gpioB的PIN口
    GPIO_InitTypeDef GPIO_InitStruct_B;
    GPIO_InitStruct_B.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
    GPIO_InitStruct_B.GPIO_Pin = GPIO_Pin_All;    // PIN0 ~ PIN15 选中所有引脚。
    GPIO_InitStruct_B.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct_B); // 用结构体初始化gpio口
    
//  GPIO_SetBits(GPIOA, GPIO_Pin_0);
//  GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 可以同时设置多个引脚
//  GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // Bit_RESET
//  GPIO_Write;

   while(1)
   {
       liushui();
       beep()  ;
       liushui1();
       beep()  ;
       led_1();
   }
}

void led_1()
{
    int led1 [4] = {0x0081, 0x0042, 0x0024, 0x0018};
    int i;
    for(i=0; i <=3 ; i++) 
    {
        GPIO_Write(GPIOA, ~led1[i]);
        Delay_ms(delay_time);
    }
    beep();
    for(i=3; i >= 0 ; i--) 
    {
        GPIO_Write(GPIOA, ~led1[i]);
        Delay_ms(delay_time);
    }
    beep();
}

void beep()
{
   GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 响
   Delay_ms(delay_time);
   GPIO_SetBits(GPIOB, GPIO_Pin_12);
   Delay_ms(delay_time);
   GPIO_ResetBits(GPIOB, GPIO_Pin_12); // 响
   Delay_ms(delay_time);
   GPIO_SetBits(GPIOB, GPIO_Pin_12);
}

void liushui()
{
    GPIO_Write(GPIOA, ~0x0001);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0002);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0004);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0008);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0010);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0020);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0040);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0080);
    Delay_ms(delay_time);
}
void liushui1()
{
    GPIO_Write(GPIOA, ~0x0080);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0040);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0020);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0010);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0008);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0004);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0002);
    Delay_ms(delay_time);
    GPIO_Write(GPIOA, ~0x0001);
    Delay_ms(delay_time);
}

你可能感兴趣的:(STM32江协科技,stm32,嵌入式硬件,单片机)