项目一:利用三色灯实现多种颜色变化
Posted 鑫仔_要变强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目一:利用三色灯实现多种颜色变化相关的知识,希望对你有一定的参考价值。
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
代码很小白,各位看官观多指正哦~
以上是关于项目一:利用三色灯实现多种颜色变化的主要内容,如果未能解决你的问题,请参考以下文章
使用Arduino SCoop库实现三色灯交替闪烁并伴有警报声500-750HZ
一种4Gwifi远程控制三色灯蜂鸣报警器支持ERP安灯系统MESAPS对接