您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關樹莓派Python如何用2位數碼管顯示CPU溫度,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
概述
前兩天 我們學習使用1位數碼管顯示個位數字倒計時,這次我們學習使用2位數碼管顯示CPU的溫度。
通過本節課,我們能學習到:
2位數碼管的顯示原理
視覺暫留顯示技巧
所需硬件
樹莓派 x1
面包板 x1
杜邦線 x9
2位數碼管 x1
原理說明
我們今天使用的是 3261BS 型號的2位共陽數碼管,先看看它的電路原理圖:
通過 上一篇 的學習,我們能夠看懂1位數碼管的電路圖了,而2位數碼管可以簡單的理解為2個1位數碼管的組合。
我們看最下面的一張圖,10號引腳和5號引腳,分別是數碼管第一個數字和第二個數字的公共陽極。
目標一:讓數碼管1和數碼管2的 A 管分別亮起來
數碼管 | 期望達到的效果 | 需要做的電路控制 |
---|---|---|
數碼管1 | A 管亮 | 10號引腳高電壓,3號引腳低電壓 |
數碼管2 | A 管亮 | 5 號引腳高電壓,3號引腳低電壓 |
這個和操作1位數碼管是一樣的,但再看看接下來的目標可能就比較麻煩了:
目標二:讓數碼管1的 A 管亮,同時讓數碼管2的 A 管不亮
數碼管 | 期望達到的效果 | 需要做的電路控制 |
---|---|---|
數碼管1 | A 管亮 | 10號引腳高電壓,3號引腳低電壓 |
數碼管2 | A 管不亮 | 5號引腳高電壓,3號引腳高電壓 |
問題出來了:因為3號引腳是共用的,所以這種電路控制無法實現。那怎么解決這個問題呢?為了解決這個問題,這里我們需要借助 視覺暫留
視覺暫留
這個原理最早源于電影制作。科學實驗證明,人眼在某個視像消失后,仍可使該物像在視網膜上滯留0.1-0.4秒左右。電影膠片以每秒24格畫面勻速轉動,一系列靜態畫面就會因視覺暫留作用而造成一種連續的視覺印象,產生逼真的動感。家里常用的日光燈也是這個原理,日光燈并非一直亮著的,而是在以很快的頻率進行亮滅亮滅,當閃爍的頻率達到每秒25次以上的時候,人眼就認為是一直亮著的。
可以利用這個原理,只要在足夠短的時間間隔里分別顯示2個數碼管的數字,在人的視覺上就會認為這2個數字是同時顯示的。那我們在電路控制采用的辦法就是對3號引腳進行分時分配:0.01秒用于數碼管1的 A 管,接下來的0.01秒用于數碼管2的 A 管,這樣1秒鐘之內可以刷新50次,確保數碼管沒有閃爍感。
連線圖
在開始連接硬件電路之前,首先要做的事是將樹莓派電腦關機,并斷開電源。因為如果樹莓派主板帶電的時候,進行插接電路可能會導致電子元器件的燒毀,所以一定要記住:
連接電路的時候主板必須斷電。
示例代碼
#!/usr/bin/env python
# encoding: utf-8
'''
接線圖:
RPi digital
7 <---> 10
11 <---> 5
13 <---> 3
15 <---> 9
29 <---> 8
31 <---> 6
33 <---> 7
35 <---> 4
37 <---> 1
'''
import RPi.GPIO as GPIO
import time
import os
# 數碼管1-2正極分別使用的針腳
LED_POWER_1 = 7
LED_POWER_2 = 11
# A-G管分別使用的針腳
LED_A = 13
LED_B = 15
LED_C = 29
LED_D = 31
LED_E = 33
LED_F = 35
LED_G = 37
# 獲取CPU溫度
def get_cpu_temperature():
return os.popen('vcgencmd measure_temp').read()[5:7]
# 重置數碼管,熄滅所有數字
def reset():
GPIO.output((LED_POWER_1, LED_POWER_2), GPIO.LOW)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.HIGH)
# 設置第幾個數碼管亮起
def set_position(position):
if position == 1:
GPIO.output(LED_POWER_1, GPIO.HIGH)
else:
GPIO.output(LED_POWER_2, GPIO.HIGH)
# 顯示數字0
def show0(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F), GPIO.LOW)
# 顯示數字1
def show1(p):
reset()
set_position(p)
GPIO.output((LED_B, LED_C), GPIO.LOW)
# 顯示數字2
def show2(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_D, LED_E, LED_G), GPIO.LOW)
# 顯示數字3
def show3(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_G), GPIO.LOW)
# 顯示數字4
def show4(p):
reset()
set_position(p)
GPIO.output((LED_B, LED_C, LED_F, LED_G), GPIO.LOW)
# 顯示數字5
def show5(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_C, LED_D, LED_F, LED_G), GPIO.LOW)
# 顯示數字6
def show6(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.LOW)
# 顯示數字7
def show7(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C), GPIO.LOW)
# 顯示數字8
def show8(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.LOW)
# 顯示數字9
def show9(p):
reset()
set_position(p)
GPIO.output((LED_A, LED_B, LED_C, LED_D, LED_F, LED_G), GPIO.LOW)
GPIO.setmode(GPIO.BOARD)
# 初始化引腳輸出模式
GPIO.setup((LED_POWER_1, LED_POWER_2, LED_A, LED_B, LED_C, LED_D, LED_E, LED_F, LED_G), GPIO.OUT)
function_directory = locals()
try:
while True:
cpu_temperature = get_cpu_temperature()
print 'CPU temperature = %s°C'%(cpu_temperature)
loop = 0
while loop < 200:
loop += 1
# 先顯示高位
position = 1
for n in cpu_temperature:
function_directory['show%s'%(n)](position)
time.sleep(0.01)
position += 1
except KeyboardInterrupt:
GPIO.cleanup()
保存為digital-2.py,并運行之。
sudo python digital-2.py
關于樹莓派Python如何用2位數碼管顯示CPU溫度就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。