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