摇杆控制LED灯的亮度

系统概要

在该系统中,所用到的技术有ADC、DMA、TIM、USART。有些可以没有必要使用,但为了作为前一段时间的总结,所以把这几种都给使用上了。说一下做这个的思路,之前每一块都已经学习过,并且都已经实现了,所以想着做这个小项目来练练手。在这里面ADC和DMA读取摇杆的位置,TIM用来输出PWM控制LED的亮度,USART串口用来输出打印一些运行时的信息。如下图所示:
在这里插入图片描述

系统实现

项目的文件结构图:
在这里插入图片描述
看一下项目的主要代码吧!
项目的所有源代码:https://github.com/Dynamicwang/Control-light.git
下面主要来看一下主函数(main.c):

#include "usart.h"
#include "TIM.h"
#include "adc.h"

u8 Input_Value = 0;
extern uint16_t Conver_Value[10];
int i;
float temp;

void Init(void)
{
		USART1_Config();
		TIM3_Config(1000);
		ADC1_Config();
}

int main(void)
{
	Init();
	
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	while(1)
	{
		temp = 0;
		for(i = 0;i < 10;i++)
		{
			temp += Conver_Value[i];
		}
		temp = temp * 3.3 /40960 *1000;
		TIM3_Config((int)(temp/3300 * 1000));
	}
}

void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
	{
		USART_ClearFlag(USART1,USART_FLAG_RXNE);
		Input_Value = USART_ReceiveData(USART1);
	}
}

在主函数中,我们首先初始化各个文件中的配置,然后ADC软件触发,主函数进入死循环,轮询操作。首先我们将ADC采集的十次摇杆的值进行求和。求完和后对该数值进行转换。最后将计算的值归一化到0-1000范围内,最后一步配置TIM输出的PWM的高电平持续时间。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值