Python七段数码管显示器实现两位数计数程序
以下是使用Python语言实现一个七段数码管显示器的程序代码,该程序可以实现从00到99的两位数计数功能。
import RPi.GPIO as GPIO
import time
# 定义数字0到9的七段数码管显示
DIGITS = {
0: (1, 1, 1, 1, 1, 1, 0),
1: (0, 1, 1, 0, 0, 0, 0),
2: (1, 1, 0, 1, 1, 0, 1),
3: (1, 1, 1, 1, 0, 0, 1),
4: (0, 1, 1, 0, 0, 1, 1),
5: (1, 0, 1, 1, 0, 1, 1),
6: (1, 0, 1, 1, 1, 1, 1),
7: (1, 1, 1, 0, 0, 0, 0),
8: (1, 1, 1, 1, 1, 1, 1),
9: (1, 1, 1, 1, 0, 1, 1),
}
# 定义每个数码管的GPIO口
DIGIT_PINS = (21, 20, 16, 12, 25, 24, 23)
# 定义每个数字的GPIO口
NUM_PINS = (17, 27, 22, 5, 6, 13, 19)
# 初始化GPIO口
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
for pin in DIGIT_PINS:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
for pin in NUM_PINS:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.HIGH)
def display_number(number):
'''
将数字显示在数码管上
'''
digits = [int(d) for d in str(number).zfill(2)]
for i, digit in enumerate(digits):
for j, value in enumerate(DIGITS[digit]):
GPIO.output(NUM_PINS[j], value)
GPIO.output(DIGIT_PINS[i], GPIO.HIGH)
time.sleep(0.001)
GPIO.output(DIGIT_PINS[i], GPIO.LOW)
def count():
'''
从00到99计数
'''
for i in range(100):
display_number(i)
time.sleep(0.5)
if __name__ == '__main__':
try:
count()
except KeyboardInterrupt:
GPIO.cleanup()
在这个程序中,我们定义了两个函数:
display_number(number):将一个两位数的数字显示在数码管上。count():从00到99计数,每隔0.5秒显示一个数字。
我们使用字典 DIGITS 存储数字0到9的七段数码管显示,使用元组 DIGIT_PINS 存储每个数码管的GPIO口,使用元组 NUM_PINS 存储每个数字的GPIO口。
在 display_number(number) 函数中,我们将两位数的数字转换成两个数字,然后将每个数字的七段数码管显示在屏幕上。我们使用 str(number).zfill(2) 将数字转换成两位数字符串,并使用 int(d) 将每个数字转换成整数。我们使用 enumerate() 函数迭代一个可遍历的对象,并返回每个元素的索引和值。我们使用 GPIO.output(pin, value) 将数字和数码管的GPIO口连接,控制七段数码管的亮灭。
在 count() 函数中,我们使用 range(100) 生成0到99的数字,然后调用 display_number(number) 函数显示每个数字。我们使用 time.sleep(0.5) 使程序暂停0.5秒,以便我们可以看到每个数字的显示效果。
最后,在 if __name__ == '__main__': 代码块中,我们使用 try...except KeyboardInterrupt: 结构调用 count() 函数,并在程序被中断时清理GPIO口。
注意: 该程序需要在安装了 RPi.GPIO 库的Raspberry Pi设备上运行。请确保您的设备已连接七段数码管并已正确连接GPIO口。
使用方法:
- 将代码保存为
.py文件,例如counter.py - 运行代码:
python counter.py - 观察七段数码管显示从00到99的计数过程
- 按
Ctrl+C停止程序
希望本代码能够帮助您实现七段数码管的计数功能。如果您有任何问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/m3Qw 著作权归作者所有。请勿转载和采集!