顯示器實作 – Charlieplexing(查理複用演算法)實現3個GPIO控制6個LED燈
Charlieplexing(查理複用演算法)是一種使用少量I / O引腳控制許多LED的技術。Charlieplexing技術以其發明者Charlie Allen命名,他于1995年發明了該技術。查理複用演算法以N 個 IO接腳驅動 N*(N-1) 個 LED 燈。
|
Number of Pins |
How many LEDs can you drive? |
|
|
LEDs Charlieplexed |
LEDs Traditional |
|
|
n |
n * (n − 1) |
(n / 2)2 |
電路圖
程式列表
Python – ePy-Lite_Charlieplexing.py
|
""" ePy-Lite_Charlieplexing.py Reference: http://razzpisampler.oreilly.com/ch04.html
------------------------------------------ ePy-Lite LED Pin Pin ---------------------------------------- P6 P8 P7 """
from machine import Switch #Get button KEY library from machine import Pin from utime import sleep_ms
pin_led_states = [ [-1, -1, -1], # 0 [ 1, 0, -1], # 1 [ 0, 1, -1], # 2 [-1, 1, 0], # 3 [-1, 0, 1], # 4 [ 1, -1, 0], # 5 [ 0, -1, 1] # 6 ]
class Charlieplexing: def __init__(self, LEDPin1,LEDPin2,LEDPin3): self.LEDPin1=LEDPin1 self.LEDPin2=LEDPin2 self.LEDPin3=LEDPin3
def light_led(self, led_number): pin_state=pin_led_states[led_number][0] if pin_state == -1: self.LEDPin1.init(Pin.IN, Pin.PULL_NONE) else: self.LEDPin1.init(Pin.OUT, value=pin_state)
pin_state=pin_led_states[led_number][1] if pin_state == -1: self.LEDPin2.init(Pin.IN, Pin.PULL_NONE) else: self.LEDPin2.init(Pin.OUT, value=pin_state)
pin_state=pin_led_states[led_number][2] if pin_state == -1: self.LEDPin3.init(Pin.IN, Pin.PULL_NONE) else: self.LEDPin3.init(Pin.OUT, value=pin_state)
def key_int(): global KeyDone KeyDone = True
# Start Function if __name__ == '__main__': KeyA = Switch('keya') #Create button A KeyA. (key_int) KeyDone = False
LDP1=Pin.board.P6 LDP2=Pin.board.P7 LDP3=Pin.board.P8 LEDx6 = Charlieplexing(LDP1,LDP2,LDP3)
while True: for x in range(7): LEDx6.light_led(x) sleep_ms(100)
if KeyDone == True: #Press A Key break
LEDx6.light_led(0)
KeyA.callback(None) |
考文獻
l Wikipedia https://en.wikipedia.org/wiki/Charlieplexing