树莓派驱动4位数码管显示时间

数码管的显示分为静态和动态两种。静态就是一个GPIO控制一个LED小灯管。
但是随着控制数码管数量的增加,GPIO口就占用太多了,所以多个数码管可以有 共阴 和 共阳 两种共享引脚。这个时候如果采用静态点亮数码管的方式,共享引脚的数码管显示完全一样。所谓动态方式,就是通过GPIO选择引脚,选择要点亮的某个数码管,然后通过共享引脚点亮LED小灯管。然后快速切换点亮其他数码管,由于点亮的切换频率非常快所以感觉上数码管一直亮着。

当然也可以使用辅助芯片,如MAX7129等,只需要用更加简化的方式控制显示数据。
点击查看详细文档

这里我使用树莓派自己编码,动态刷新各个数码管。买的数码管有24位引脚,37个led小灯,这个掩饰只使用了4 × 7 = 28 个led灯。
代码:https://github.com/kongove/toys/blob/master/RaspberryPi/leds-example.py
新版本的Python RPi.GPIO里支持提供了一些事件检测函数,可以简化程序,我还没升级。

#
#     __2_
#    |     |    |  0 ->  011 1111 -> 0x3f
#  1 |     | 3  |  1 ->  010 0001 -> 0x21
#    |__7__|    |  2 ->  111 0110 -> 0x76
#    |     |    |  4 ->  ...
#  6 |     | 4  |        ...
#    |__5__|    |  9 ->  ...      -> 0x5f
pins = [27, 17, 22, 10, 25, 24, 11] #GPIO ports
sels = [14, 15, 18, 23] #GPIO ports to select led, there are four led lights
nums = [0x3f, 0x21, 0x76, 0x5e, 0x4d, 0x5b, 0x7b, 0x0e, 0x7f, 0x5f] #0,1,2,3~9 对应编码

演示视频:(为了效果明显这里显示的是 分钟 和 秒)
http://player.youku.com/player.php/sid/XNzAxOTQxODk2/v.swf

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.