STM32開發,HAL函數實現LED數碼管功能

1 概述

1.1 資源概述

開發板:正點原子STM32F103 Nano開發板
CUBEMX版本:1.3.0
MDK版本:5.23
主控芯片型號:STM32F103RBT6
正點原子開發板

1.2 實現功能

本實驗,定時器以2ms時間刷新數碼管,以1S週期時間,更新數碼管顯示,同時DS0閃爍 來指示程序運行。顯示內容爲HELLO。

2 硬件相關知識

2.1電路圖

採用38譯碼器和移位寄存器實現。
數碼管相關部分電路圖

2.2 字符查詢

字符查詢,極性是共陰,排列順序是a-dp
字符查詢
tips
如果我們要實現小數點,有一個捷徑,不用重新生成字符,在原來字符上增加一個或0x01(共陰adp方式)的操作,如H.代碼爲0x6e|0x01
小數點

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燈全滅,等待下一個計時器中斷到來。
亮燈時序邏輯

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 實驗結果

實驗結果如下
實驗結果

5 TIPS

調整LED亮度的幾種方式
1,電路方法:減小限流電阻阻值,從而增大LED的電流,達到增加亮度目的。
2,軟件方法:增加LED在單位時間內的總亮時長,方式有兩種,增加刷新頻率以及增大單個刷新週期內的點亮時間。
3,物理方法:如果LED有透光保護膜,增加透光膜的透明度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章