RT Thread中的數碼管顯示Demo

2021-10-04 02:46:51 字數 2301 閱讀 3380

因為數碼管顯示的過程中,經常會使用延時函式,在裸機中實現起來常常會長時間占用cpu。

使用rt-thread的rt_thread_mdelay可以通過執行緒排程的方法,合理使用cpu資源。

新建乙個smg.c檔案:

/*

* * spdx-license-identifier: apache-2.0

* * change logs:

* date author notes

* 2020-03-18 shineroyal the first version

*/#include

#include

#include

74hc138操作線

#define led_a0 get_pin(c,10)

//a0位址線

#define led_a1 get_pin(c,11)

//a1位址線

#define led_a2 get_pin(c,12)

//a2位址線

74hc595操作線

#define led_ds get_pin(b,3)

//資料線

#define led_lclk get_pin(b,4)

//鎖存時鐘線

#define led_sck get_pin(b,5)

//時鐘線

//0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f, .,全滅

const

static rt_uint8_t smg_num=

;static uint32_t smg_value[8]

=;//數碼管顯示值

static

intrt_hw_smg_init()

init_board_export

(rt_hw_smg_init)

;static

void

smg_set_pos

(rt_uint8_t num)

static

void

smg_set_refresh

(void

)static

void

smg_set_data

(rt_uint8_t data)

smg_set_refresh()

;}void

smg_set_value

(uint32_t value)

}static

intsmg_refresh_entry

(void

*param)

for(

; curpos <

8; curpos++)}

}static

intsmg_refresh_init()

else

}(smg_refresh_init)

;

在需要呼叫的地方進行外部宣告及呼叫:

/*

* * spdx-license-identifier: apache-2.0

* * change logs:

* date author notes

* 2019-09-09 rt-thread first version

*/#include

#include

#include

#define dbg_tag "main"

#define dbg_lvl dbg_log

#include

/* please define the led0 pin for your board, such as: pa5 */

#define led0_pin get_pin(c, 0)

extern

void

smg_set_value

(uint32_t value)

;int

main

(void

)return rt_eok;

}

即可實現數碼管對數的顯示。

附程式中的數碼管接線圖:

數碼管硬體電路設計圖如下:

數碼管顯示

數碼管顯示 最近因為對突然對電子感興趣,前幾天在路過電子 時買了乙個數碼管。因為以前總是紙上談兵,根本沒實驗過,連數碼見都沒見過,所以開始覺得將這塊數碼管顯示出來是非常具有挑戰性的工作。今天正好有空,拿來了我的數碼管,並在網上看了一些資料,才發現並不是想象中的那麼難,其實更準確的說是太簡單了。不到半...

數碼管顯示

一 區分數碼管的類別 共陰數碼管 即所有數碼管的陰極接在一起。要使某個數碼管點亮,只需置上高電平,中該位置 1 共陽數碼管 即所有數碼管的陽極接在一起。要使某個數碼管點亮,只需置上低電平,中該位置 0 二 單個數碼管顯示 a h 表示單個數碼管上面的8個led。根據共陰共陽的特性,點亮相應的led,...

數碼管顯示

數碼管由8個led組成,對應乙個i o口的輸出.根據連線方式不同分為共陽和共陰數碼管 可以看到,由於結構不同,共陽和共陰使led亮起的輸出電平也不同,如下是兩種連線方式對應的16進製製碼 當我們要對多個數碼管進行控制的時候,不僅需要控制顯示內容 段碼 還要控制顯示的位置 位碼 簡單一點的方法可以用另...