這節課,來學習如何控制雙位數碼管來顯示時間的秒數。
電路原理
要使用一個電子元器件,首先是要掌握它的電路原理圖,來看一下雙位數碼管的電路原理圖:
關鍵看最下面的電路原理圖
10號引腳和5號引腳,分別是數碼管第一個數字和第二個數字的公共陽極。
如果要讓數碼管1的A管亮起來,需要10號引腳高電壓,3號引腳低電壓
如果要讓數碼管2的A管亮起來,需要5號引腳高電壓,3號引腳低電壓
再看一種情況:
讓數碼管1的A管亮B管亮,同時讓數碼管2的A管不亮B管亮
需要10號引腳高電壓,3號9號引腳低電壓
需要5號引腳高電壓,3號高電壓,9號低電壓
由于2個不同數碼管的A管的陰極共用了3號引腳,發現有沖突了:
要讓數碼管亮起來,10號和5號引腳必然是高電壓
那么如果2個A管,一個要亮,另一個要不亮的時候,3號引腳因為共用,所以就無法實現了。
那么解決這個問題的辦法是什么呢?
刷新機制
大家知道,看電影是由一張一張的靜態圖片連續播放來實現的,這是利用了人眼的視覺殘留效應
也就是當光線進入人眼之后,會殘留大約0.04秒,因此只要在1秒種之內連續播放25張圖片,人眼就認為是連續的動畫
大家家里常用的日光燈也是這個原理,日光燈并非一直亮著的,而是在以很快的頻率進行亮滅亮滅,
當閃爍的頻率達到每秒25次以上的時候,人眼就認為是一直亮著的。
可以利用這個原理,來實現2個數碼管的看起來同時不同的數字。
辦法就是對3號引腳的使用進行分時分配,也就是0.01秒用于數碼管1的A管,然后接下來的0.01秒用于數碼管2的A管
這樣,1秒鐘之內可以刷新50次,確保沒有閃爍感
這樣,3號引腳就可以通過分時分配用于2個數碼管了,也就是讓2個數碼管閃爍足夠快來實現目標。
全部燈管接線
樹莓派GPIO的7號口,用杜邦線連接到單位數碼管的10號引腳
樹莓派GPIO的8號口,用杜邦線連接到單位數碼管的5號引腳
樹莓派GPIO的11號口,用杜邦線連接到單位數碼管的3號引腳
樹莓派GPIO的12號口,用杜邦線連接到單位數碼管的9號引腳
樹莓派GPIO的13號口,用杜邦線連接到單位數碼管的8號引腳
樹莓派GPIO的15號口,用杜邦線連接到單位數碼管的6號引腳
樹莓派GPIO的16號口,用杜邦線連接到單位數碼管的7號引腳
樹莓派GPIO的18號口,用杜邦線連接到單位數碼管的4號引腳
樹莓派GPIO的21號口,用杜邦線連接到單位數碼管的1號引腳
樹莓派GPIO的22號口,用杜邦線連接到單位數碼管的2號引腳
實際接線圖如下:
顯示數字01
首先做一個循環,然后顯示左邊數字位0,然后休眠0.01秒,然后關閉左邊數字顯示,然后顯示右邊數字1,然后休眠0.01秒,然后關閉右邊數字顯示
繼續循環,也就是循環一次為0.02秒,那么1秒鐘,需要循環大約50次
假設總共亮3秒鐘,總共循環次數為150次
要顯示左邊數字0,需要將ABCDEF管亮起來
需要7號口為True,8號口為False,也就是右邊先不亮
需要11/12/13/15/16/18設置為False,21/22設置為True
休眠0.01秒
然后先將7號口設置為False,8號口設置為True,也就是左邊不亮,右邊亮
顯示數字1,需要將BC管亮起來
需要12/13設置為False,11/15/16/18/21/22設置為True
可以使用函數來分別定義從數字0和1的顯示控制
編寫代碼如下:
運行結果如下:
顯示當前時間秒數
先增加數字2到9的顯示函數
然后在循環內部,根據datetime模塊的now函數取得當前的秒數
將秒數分成左邊的數字和右邊的數字,顯示出來
假設總共循環2分鐘,也就是120秒,大約總共循環次數為6000次
可以將循環次數設置為6000次
編寫代碼如下:
運行結果如下:
課后作業
1.考慮如何實現將前面溫度傳感器獲得的溫度數據顯示到這個雙位數碼管上,溫度超過15度則蜂鳴器報警。