STM32 通过按键 控制屏幕的亮度 屏幕的亮度要配成10个挡位 SW5 升高亮度 按键SW6 降低亮度

思索模块:

按键中断,LCD屏幕,通用定时器计时亮度

按键中断

技巧

通用第一步:开时钟

第二步:配模式

第三步:复用要看AFIO需要需要配置

第四步:其他模块(第一步同样时钟,模式)

最后一部:使能--使能放在最后一部,如果放在前面使能一配置,有些信息将无法修改。

cs 复制代码
#include "key.h"

void KEY_Init(void)
{
    // 1.GPIO配置
    // 1.1 PF10 下拉输入模式
    // 1.1.1 开时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPFEN;
    // 1.1.2 下拉输入模式  CNF 10 MODE 00 ODR 0
    GPIOF->CRH |= GPIO_CRH_CNF10_1;
    GPIOF->CRH &= ~GPIO_CRH_CNF10_0;
    GPIOF->CRH &= ~GPIO_CRH_MODE10;
    GPIOF->ODR &= ~GPIO_ODR_ODR10;

    GPIOF->CRH |= GPIO_CRH_CNF11_1;
    GPIOF->CRH &= ~GPIO_CRH_CNF11_0;
    GPIOF->CRH &= ~GPIO_CRH_MODE11;
    GPIOF->ODR &= ~GPIO_ODR_ODR11;
    // 2.AFIO配置 线这么连
    // 2.1开时钟
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
    AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI10_PF;

    AFIO->EXTICR[2] |= AFIO_EXTICR3_EXTI11_PF;
    // 3.EXTI配置 上升沿还是下降沿触发
    // 3.1 EXTI特殊 不需要配置时钟信号
    // 3.2 上升沿触发
    EXTI->RTSR |= EXTI_RTSR_TR10;
    EXTI->RTSR |= EXTI_RTSR_TR11;
    // 3.3 中断使能
    EXTI->IMR |= EXTI_IMR_MR10;
    EXTI->IMR |= EXTI_IMR_MR11;

    // 4.NVIC配置 中断优先级
    // 4.1 NVIC划分多少用于嵌套优先级,多少用于排队对优先级
    NVIC_SetPriorityGrouping(3); // 让4个bit全是嵌套优先级
    // 4.2 给我们的中断设置一个具体的优先级
    NVIC_SetPriority(EXTI15_10_IRQn, 3);
    // 4.3NVIC有自己的使能位,需要给当前中断配置使能
    NVIC_EnableIRQ(EXTI15_10_IRQn);
}



uint8_t light_count = 0;
void EXTI15_10_IRQHandler(void)
{
    if (EXTI->PR & EXTI_PR_PR10)
    {
        EXTI->PR |= EXTI_PR_PR10;

        Delay_ms(10);

        if ((GPIOF->IDR & GPIO_IDR_IDR10) != 0)
        {
            if (light_count > 0)
            {
                light_count--;
            }
        }
    }
    if (EXTI->PR & EXTI_PR_PR11)
    {
        EXTI->PR |= EXTI_PR_PR11;

        Delay_ms(10);

        if ((GPIOF->IDR & GPIO_IDR_IDR11) != 0)
        {
            if (light_count < 10)
            {
                light_count++;
            }

        }
    }
}

LCD屏幕

技巧:

FNF0:表示第FNF标志位两位。

FNF0_0:表示第FNF的低位

FNF0_1:表示第FNF的高位

都是1,用&~和|来清零和置1。

cs 复制代码
#include "lcd.h"

void Lcd_Init(void){
    //开始时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;

    //配置推挽输出模式
    GPIOB->CRL |= GPIO_CRL_CNF0_1;
    GPIOB->CRL &= ~GPIO_CRL_CNF0_0;
    GPIOB->CRL |= GPIO_CRL_MODE0;

    
}

通用定时器计时亮度

技巧:

手册从头往下查询寄存器,使能最后开启,这里直接将使能封装成函数了。

cs 复制代码
#include "tim3.h"


void TIM3_Init(void){
    //2.定时器 tim5 的配置
    //2.1 先放时钟
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    //三大块
    // 控制器(时钟源)配置 默认不改就是就是72MHz
    //时基单元
    //输入和输出通道
    //2.2 时基单元
    //2.2.1 计数方向(默认像上,其实可以不用配置)
    // TIM3->CR1 |= TIM_CR1_DIR;
    //2.2.2 预分频 
    TIM3->PSC = 7200 - 1;
    //2.2.3 自动重装载
    TIM3->ARR = 100 - 1;
    //3 输入输出通道
    //3.1 让通道2使用输出模式(默认就是输出,可以不用配置)
    TIM3->CCMR2 &= ~TIM_CCMR2_CC3S;
    //3.2 配置比较寄存器 具体的比较模式 (8选1 我们选择PWM模式1)
    TIM3->CCMR2 |= (TIM_CCMR2_OC3M_1|TIM_CCMR2_OC3M_2);
    TIM3->CCMR2 &= ~TIM_CCMR2_OC3M_0;
    //3.3 低电平有效,为了让CCR的值 能很好地表示亮度
    TIM3->CCER |= TIM_CCER_CC3P;
}


void TIM3_PWMStart(void){
    //计数器是使能
    TIM3->CR1 |= TIM_CR1_CEN;
    //通道2使能
    TIM3->CCER |= TIM_CCER_CC3E;
}

void TIM3_PWMStop(void){
    //关闭计数器使能
    TIM5->CR1 &= ~TIM_CR1_CEN;
    //关闭通道2使能
    TIM3->CCER &= ~TIM_CCER_CC3E;
}

void TIM3_SetDuty(uint16_t duty){
    TIM3->CCR3 = duty;
}

main.c

技巧:

引入头文件

初始化

while循环打底

cs 复制代码
#include "lcd.h"
#include "key.h"
#include "tim3.h"

extern light_count;
int main(void)
{
	
	KEY_Init();
	Lcd_Init();
	TIM3_Init();
	TIM3_PWMStart();
	while (1)
	{
		TIM3_SetDuty(light_count*10);	
	}
	
}
相关推荐
szxinmai主板定制专家9 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
HQB202612 小时前
屹晶微电子 EG1130|2‑24V 输入 / 最高 28V 输出 内置 MOS 异步升压 DC‑DC|SOT23‑6|摄像头 / 车充 / 电池充电电源
嵌入式硬件·硬件工程
泛凡(Linyongui)13 小时前
基于 CW32L010 的智能厨卫调温旋钮方案--低成本 EC21 编码旋钮全解析
单片机·嵌入式硬件·c#
十年磨一剑~14 小时前
Linux 内核中断处理机制与软硬件协同流程
linux·嵌入式硬件
糖糖单片机设计15 小时前
基于单片机的热水器节能控制系统
单片机·嵌入式硬件
数字新视界16 小时前
数字孪生技术赋能智能化转型与创新实践
嵌入式硬件·物联网·系统架构·机房管理·动力与环境监控系统
HQB202616 小时前
屹晶微电子 EG1195|10‑120V/10A+ 外置 MOS 异步降压控制器|ESOP‑8|电动车转换器 / 快充 / 工业电源
嵌入式硬件·硬件工程
不悔哥17 小时前
开源LineageOS:旧手机刷上开源系统
嵌入式硬件·智能手机·开源
服务器硬件项目经理18 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习
一次调频AGCAVC18 小时前
一次调频系统控制柜的组成及一次调频装置主机功能详述
人工智能·嵌入式硬件