a.七段顯示器

七段顯示器的相關教學資料

import RPi.GPIO as GPIO

import time

GPIO.setwarnings(False)

NUMBER = [0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F] #代表 0x3F-->0, 0x06-->1, 23456789

NUMBER_TEXT = [7,1,5,8] #要顯示在LED上的數字

# GPIO DEFINE

seg_data_list = [3,5,7,8,10,11,12,13] #分別為7段顯示器 第1234567 (對應到樹莓派平台的接腳)

seg_com_list = [15,16,18,19] #分別為 LED 第1234共接點 (對應到樹莓派平台的接腳)

# Use physical pin numbers

GPIO.setmode(GPIO.BOARD)

# 7SEG DATA

for i in range(8):

GPIO.setup(seg_data_list[i], GPIO.OUT)

for i in range(8):

GPIO.output(seg_data_list[i], True)

# 7SEG COM SCAN

for i in range(4):

GPIO.setup(seg_com_list[i], GPIO.OUT)

for i in range(4):

GPIO.output(seg_com_list[i], True)

SegCount = 0 #4個LED要顯示的位置 SegCount = 0 第一顆顯示,SegCount = 1 第二顆顯示

dot = 0 #0不顯示冒號 1顯示

print ("03.7SEG number Starting... ")

while True:

# close scan

for i in range(4):

GPIO.output(seg_com_list[i], True) #將7段顯示器的共陰點設為高電位,高電位的意思--->把七段顯示器關閉

time.sleep(0.001)

# data

seg7_data = NUMBER[NUMBER_TEXT[SegCount]]

if dot == 1 :

seg7_data = seg7_data | 0x80

else:

seg7_data = seg7_data & 0x7F

data_index = 0x01

for i in range(8):

if (seg7_data & data_index) == 0 :

GPIO.output(seg_data_list[i], True)

else:

GPIO.output(seg_data_list[i], False)

data_index = data_index << 1

# open scan

GPIO.output(seg_com_list[SegCount], False) #讓共陰為低電位 , 7段顯示器 可以正常顯示

#GPIO.output(18, True)

time.sleep(0.003)

SegCount = SegCount + 1 #讓 SegCount 保持 0123 0123 0123 ,SegCount用來控制那一個7段顯示器要顯示

SegCount = SegCount % 4