Project 1: Using three-color lights to achieve multiple color changes

1. Purpose of the experiment

Use library functions to write, and be familiar with the use of GPIO.

2. Experimental principle

Use the PWM principle to realize the color change, so that the three kinds of monochromatic light have different duty ratios in one cycle.

3. Circuit diagram

 

 4. Code implementation

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

The code is very simple, please correct me~

Guess you like

Origin blog.csdn.net/qq_47541315/article/details/120006932