欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32开发,HAL函数实现LED数码管功能

程序员文章站 2022-06-08 19:57:13
...

1 概述

1.1 资源概述

开发板:正点原子STM32F103 Nano开发板
CUBEMX版本:1.3.0
MDK版本:5.23
主控芯片型号:STM32F103RBT6
STM32开发,HAL函数实现LED数码管功能

1.2 实现功能

本实验,定时器以2ms时间刷新数码管,以1S周期时间,更新数码管显示,同时DS0闪烁 来指示程序运行。显示内容为HELLO。

2 硬件相关知识

2.1电路图

采用38译码器和移位寄存器实现。
STM32开发,HAL函数实现LED数码管功能

2.2 字符查询

字符查询,极性是共阴,排列顺序是a-dp
STM32开发,HAL函数实现LED数码管功能

3 程序实现

此程序在正点原子的程序基础上进行修改
1,主程序

//共阴数字数组,字符内容 HELLO,全灭

u8 smg_num[]={0x6e,0x9e,0x1c,0x1c,0xfc,0x00};

int main(void)
{
		
    HAL_Init();                    	//初始化HAL库    
    Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M
    delay_init(72);                 //初始化延时函数
	uart_init(115200);				//初始化串口
    LED_Init();                     //初始化LED
    LED_SMG_Init();  //数码管初始化	
    TIM3_Init(19,7199);//2ms定时显示,可以修改此值修改亮度	
	while(1)
	{	
	}
}

u8 smg_wei=0;//数码管位选
u8 smg_duan=0;//数码管段选
u16 t=0;

//回调函数,定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if((htim==(&TIM3_Handler))&&(LED0==GPIO_PIN_SET))
    {
       
		for (smg_wei=0;smg_wei<5;smg_wei++)//5个数码管显示对应位置的字符
		{
		LED_Write_Data(smg_num[smg_wei],smg_wei);//数码管显示
	    LED_Refresh();//刷新显示	 
		}
		LED_Write_Data(smg_num[5],4);//将数码管位4熄灭
	    LED_LCLK=1;
	    delay_us(1);
	    LED_LCLK=0;	  		
    }
	t++;
		if(t==500)//数码管每秒更新(2ms*500=1s)
		{
			t=0;
			LED0=!LED0;
		}
}

主程序时序分析,中断触发刷新LED,总计刷新5个LED,在最后一次将LED灯全灭,等待下一个计时器中断到来。
STM32开发,HAL函数实现LED数码管功能

2,相关函数

//74HC138驱动
//数码管位选
//num:要显示的数码管编号 0-7(共8个数码管)
void LED_Wei(u8 num)
{
    LED_A0=num&0x01;
	LED_A1=(num&0x02)>>1;
	LED_A2=(num&0x04)>>2;
}
//74HC595驱动
//数码管显示
//duan:显示的段码
//wei:要显示的数码管编号 0-7(共8个数码管)
void LED_Write_Data(u8 duan,u8 wei)
{
	u8 i;
	for( i=0;i<8;i++)//先送段
	{
		LED_DS=(duan>>i)&0x01;
		LED_SCK=0;
		delay_us(1);
		LED_SCK=1;
	}
    LED_Wei(wei);//后选中位
}
//74HC595驱动
//数码管刷新显示
void LED_Refresh(void)
{
	LED_LCLK=1;
	delay_us(200);//调节此参数可以控制亮度
	LED_LCLK=0;
}

4 实验结果

实验结果如下
STM32开发,HAL函数实现LED数码管功能

5 TIPS

调整LED亮度的几种方式
1,电路方法:减小限流电阻阻值,从而增大LED的电流,达到增加亮度目的。
2,软件方法:增加LED在单位时间内的总亮时长,方式有两种,增加刷新频率以及增大单个刷新周期内的点亮时间。
3,物理方法:如果LED有透光保护膜,增加透光膜的透明度。