您的位置:首页 > 编程语言 > ASP

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

2016-08-05 18:36 525 查看
当初入手树莓派的一个重要原因就是看中了它的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的工作原理很有启发。但可能与原作者用的数码管类型或引脚编号不同,我实际调试成功的驱动单管电路图如下:



其中,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()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息