tft每日頭條

 > 生活

 > 單片機8位數碼管顯示特定數字

單片機8位數碼管顯示特定數字

生活 更新时间:2025-02-02 19:02:27

下面分享下自己在數據采集器項目時,需要較多的LED顯示狀态,但是單片機的IO口不夠用,使用38譯碼器擴展單片機IO口。

單片機原理圖

數據采集器項目,使用74HC138D芯片(38譯碼器)擴展IO口控制LED燈,原理圖如下。使用74HC138D芯片的A0、A1、A3、E3與單片機(STM32F407)的GPIO_A2、GPIO_A3、GPIO_A4、GPIO_A0相連。由原理看出,低電平時LED導通。

單片機8位數碼管顯示特定數字(使用38譯碼器擴展單片機IO口)1

38譯碼器工作原理分析

通過74HC138D數據手冊的真值表得出,控制原理,如下圖所示。當E1、E2接低電平、E3接高電平時,可通過輸入端(A2、A1、A0)實現輸出端(Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7、Y8)的分别控制。

單片機8位數碼管顯示特定數字(使用38譯碼器擴展單片機IO口)2

A2、A1、A0均為低電平時,輸出端Y0低電平,燈D1亮,其他滅。

A2低、A1低、A0高電平時,輸出端Y1低電平,燈D2亮,其他滅。

A2低、A1高、A0低電平時,輸出端Y2低電平,燈D3亮,其他滅。

A2低、A1高、A0高電平時,輸出端Y3低電平,燈D4亮,其他滅。

A2高、A1低、A0低電平時,輸出端Y4低電平,燈D5亮,其他滅。

A2高、A1低、A0高電平時,輸出端Y5低電平,燈D6亮,其他滅。

A2高、A1高、A0低電平時,輸出端Y6低電平,燈D7亮,其他滅。

A2高、A1高、A0高電平時,輸出端Y7低電平,燈D8亮,其他滅。

測試代碼分析

這裡以8個LED燈實現流水燈的代碼進行演示,代碼如下。在主函數中調用led_74hc138()函數,即可實現流水燈程序。

void led_74hc138(void)

{

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_0, GPIO_PIN_SET);//使能38控制器的控制端

//實現D1亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

//實現D2亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

//實現D3亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

//實現D4亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

//實現D5亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

//實現D6亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

//實現D7亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

//實現D8亮

Delay(0xFFFFFF);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

HAL_GPIO_WritePin( GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

}

void Delay(__IO uint32_t nCount) //簡單的延時函數

{

for (; nCount != 0; nCount--);

}

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved