树莓派与GPIO:74HC595控制LED数码管

当初入手树莓派的一个重要原因就是看中了它的GPIO。利用GPIO和python脚本(当然也可以是C等等),可以玩出很多花来。最简单的例子,控制一只LED是亮灯还是灭灯。这当然没啥稀奇,但改下python脚本,有规律的亮和灭,就能模拟汽车转向灯。再改改,还能模拟大楼晚上防飞机撞的双闪灯效果出来。当然这些效果最多也就两个三极管加两三个电阻电容就能实现,这种特效就是五毛特效还有的找。但这不是重点,重点在于,没有GPIO的树莓派可玩性大大降低。

LED数码管是常见的东东,本质上就是8个独立的LED被封装在一起,其中7个组成了“8”字,还有一个小数点。我们可以用8个GPIO去控制这些LED的亮与灭,让亮的LED拼成想要的数字。这当然是可行的,但是会消耗宝贵的GPIO引脚。因此稍微有技术含量一点的做法是用一片串入并出的IC,如74HC595来减少GPIO的消耗。具体原理请参阅http://blog.mangolovecarrot.net/2015/06/03/raspi-study0801/,谨向原作者表示感谢,尤其是那个动图对理解74HC595的工作原理很有启发。但可能与原作者用的数码管类型或引脚编号不同,我实际调试成功的驱动单管电路图如下:

树莓派与GPIO:74HC595控制LED数码管_第1张图片

其中,8字数码管是共阳的,图中段码前的数字代表实际的物理引脚号,规则是如图放置,逆时针数,左下为1,左上为10。3号脚悬空不管。74HC595也一样,引脚向下,缺口向左,逆时针数。1号脚接数码管g,2号脚接f,......,7号脚接数码管a,15号脚接数码管dp。

Vcc接树莓派GPIO3.3V引脚,DS接树莓派PIN13,SHCP接PIN11,STCP接PIN15。

python脚本编写是按ABCDEFG DP的顺序来。参考代码如下(仅以显示5为例):

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)  # Serail Data
GPIO.setup(11,GPIO.OUT)  # Serail Data Confirm
GPIO.setup(15,GPIO.OUT)  # Output Data

def InputBit():
    GPIO.output(11,False)
    GPIO.output(11,True)

def ShowLED():
    GPIO.output(15,False)
    GPIO.output(15,True)   


def Show5():

    # Data 0 A
    GPIO.output(13,False)
    InputBit()

    # Data 1 B
    GPIO.output(13,True)
    InputBit()

    # Data 2 C
    GPIO.output(13,False)
    InputBit()

    # Data 3 D
    GPIO.output(13,False)
    InputBit()

    # Data 4 E
    GPIO.output(13,True)
    InputBit()

    # Data 5 F
    GPIO.output(13,False)
    InputBit()
   
    # Data 6 G
    GPIO.output(13,False)
    InputBit()

    # Data 7 DOT
    GPIO.output(13,True)
    InputBit()

    # Output
    ShowLED()   
   

def main():
    Show5()


if __name__ == "__main__":
 main()





你可能感兴趣的:(树莓派,&,Arduino,Raspberry,树莓派,74HC595)