项目一:利用三色灯实现多种颜色变化

1、实验目的

运用库函数编写,熟悉GPIO的运用。

2、实验原理

运用PWM原理实现颜色变化,使一个周期内三种单色光不同的占空比。

3、电路原理图

 

 4、代码实现

main

#include "led.h"
#include "stdio.h"
#include "delay.h"
#include "stm32f10x.h"
 u8 UART3_data,UART1_data;
 u8 UART3_rcv[20],UART3_rcv_count;
 u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;
int main(void)
{

	delay_init();
	led_init();
  while (1)
  {	 
	//每1次改变色
		int num;
		for(num=1;num<=12;num++)
		{
			led_pwm(num);
			
		}	 
     led_mode_A();		
	}
}

led.c

#include "led.h"
#include "stdio.h"
#include "led.h"
#include "delay.h"
void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct_A,GPIO_InitStruct_B;
	//打开引脚A,B的时钟
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
	// 配置管脚
	GPIO_InitStruct_B.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct_B.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStruct_B.GPIO_Speed=GPIO_Speed_50MHz;
	// 配置管脚A
	GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_7;
	GPIO_InitStruct_A.GPIO_Speed=GPIO_Speed_50MHz;
	//A,B管脚的的初始化
	GPIO_Init(GPIOB,&GPIO_InitStruct_B);
	GPIO_Init(GPIOA,&GPIO_InitStruct_A);
	//
	GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);
	GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
	GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);
}
void  led_pwm(int k)
{
	  int i=2000;//两秒变化周期
    for (;i>0;i--)
		{
			//
		GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
		GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
		switch(k)
		{
			case 1:
							delay_us(200);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(400);
			break;
			case 2:
							delay_us(300);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(100);
			break;
			case 3:
							delay_us(50);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(550);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(200);
			break;
			case 4:
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(400);
			break;
			case 5:
							delay_us(300);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(100);
			break;
			case 6:
							delay_us(50);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(550);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(200);
			break;
			case 7:
							delay_us(200);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(400);
			break;
			case 8:
							delay_us(300);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(100);
			break;
			case 9:
							delay_us(50);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(550);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(200);
			break;
		case 10:
							delay_us(200);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(400);
			break;
			case 11:
							delay_us(300);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(300);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(100);
			break;
			case 12:
							delay_us(50);
							GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
							delay_us(550);
							GPIO_ResetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
							delay_us(200);
							GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
							delay_us(200);
			break;
		}	
		}
}
void  led_mode_A(void)
{
    GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);
		delay_ms(20000);
		GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);
		
		GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		delay_ms(20000);
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
		
		GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
		delay_ms(20000);
		GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);

}
	
	

led.h

#ifndef __LED_H
#define __LED_H

#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void  led_init(void);
void  led_pwm(int k);
void  led_mode_A(void);

//引脚定义
/****************************************************/
//红色灯

#define LED_R_GPIO_PIN     GPIO_Pin_7
#define LED_R_GPIO_PORT    GPIOA

//绿色灯

#define LED_G_GPIO_PIN     GPIO_Pin_0
#define LED_G_GPIO_PORT    GPIOB

//蓝色灯

#define LED_B_GPIO_PIN     GPIO_Pin_1
#define LED_B_GPIO_PORT    GPIOB

/*******************************************************/

#endif

代码很小白,各位看官观多指正哦~

猜你喜欢

转载自blog.csdn.net/qq_47541315/article/details/120006932