七段顯示器

七段顯示器(Seven-segment display)為常用顯示數字的電子元件。因為藉由七個發光二極體以不同組合來顯示數字,所以稱為「七劃管」、「七段數碼管」、「七段顯示器」,由於所有燈管全亮時所表示的是「8」,所以又稱「8字管」、「8字顯示器」。或是有些七段顯示器還會在右下角附加一個表示小數點的燈管,因此也稱八段管。一般的七段顯示器擁有八個發光二極體用以顯示十進位0至9的數字,也可以顯示英文字母,包括十六進位中的英文A至F(b,d為小寫,其他為大寫)。

實驗材料

  1. 樹莓派主機(2或3代B+)
  2. 麵包板 + T型GPIO擴展板(T-Cobbler)
  3. 電阻 x 1
  4. 七段顯示器(共陽極) x 1
  5. 杜邦線 x 9條

接線指南

請參考下圖,連接以下 GPIO(BCM)腳位:

  • 3V3
  • GPIO4
  • GPIO17
  • GPIO27
  • GPIO22
  • GPIO18
  • GPIO23
  • GPIO24
  • GPIO25

實作練習:倒數計時器

倒數計時器(從數字 9 數到 0)

Python 程式檔名:lab201.py

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

seg = (4, 17, 27, 22, 23, 24, 25, 18)

digits = {
    '.': (1, 1, 1, 1, 1, 1, 1, 0),
    '0': (0, 0, 0, 1, 0, 0, 0, 1),
    '1': (0, 1, 1, 1, 0, 1, 1, 1),
    '2': (0, 0, 1, 0, 1, 0, 0, 1),
    '3': (0, 0, 1, 0, 0, 0, 1, 1),
    '4': (0, 1, 0, 0, 0, 1, 1, 1),
    '5': (1, 0, 0, 0, 0, 0, 1, 1),
    '6': (1, 0, 0, 0, 0, 0, 0, 1),
    '7': (0, 0, 0, 1, 0, 1, 1, 1),
    '8': (0, 0, 0, 0, 0, 0, 0, 1),
    '9': (0, 0, 0, 0, 0, 1, 1, 1)
}

for n in range(0, 8):
    GPIO.setup(seg[n], GPIO.OUT)

c = 0

while True:

    for n in range(0, 8):
        GPIO.output(seg[n], digits[str(9 - c % 10)][n])

    time.sleep(.3)

    for n in range(0, 8):
        GPIO.output(seg[n], GPIO.HIGH)

    time.sleep(.3)

    c += 1

GPIO.cleanup()

實作練習:密碼顯示器

Python 程式碼 - 檔名:lab202.py

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

seg = (4, 17, 27, 22, 23, 24, 25, 18)

digits = {
    '.': (1, 1, 1, 1, 1, 1, 1, 0),
    '0': (0, 0, 0, 1, 0, 0, 0, 1),
    '1': (0, 1, 1, 1, 0, 1, 1, 1),
    '2': (0, 0, 1, 0, 1, 0, 0, 1),
    '3': (0, 0, 1, 0, 0, 0, 1, 1),
    '4': (0, 1, 0, 0, 0, 1, 1, 1),
    '5': (1, 0, 0, 0, 0, 0, 1, 1),
    '6': (1, 0, 0, 0, 0, 0, 0, 1),
    '7': (0, 0, 0, 1, 0, 1, 1, 1),
    '8': (0, 0, 0, 0, 0, 0, 0, 1),
    '9': (0, 0, 0, 0, 0, 1, 1, 1)
}

def display(num):
    for n in range(0, 8):
        GPIO.output(seg[n], digits[str(num)][n])

    time.sleep(.3)

    for n in range(0, 8):
        GPIO.output(seg[n], GPIO.HIGH)

    time.sleep(.1)

for n in range(0, 8):
    GPIO.setup(seg[n], GPIO.OUT)

for num in raw_input('Number? '):
    display(num)

c = 0

GPIO.cleanup()

測試方法:

請看到「Number?」提示後,輸入 3.14159265359 數字。

results matching ""

    No results matching ""