python 模拟数码管,绘制数码管图像,可以调节共阴共阳
1、数码管编码表
# 定义共阳数码管的编码表
table = [0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e]
# 定义共阴数码管的编码表
table2 = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]
2、绘制数码管
# author:兴于诗 CSDN
import matplotlib.pyplot as plt
import numpy as np
segments = {
'A': [(0.45, 0.55), (0.74, 0.55), (0.69, 0.50), (0.5, 0.50)],
'B': [(0.75, 0.54), (0.75, 0.26), (0.7, 0.29), (0.7, 0.49)],
'C': [(0.75, 0.25), (0.75, 0), (0.7, 0.05), (0.7, 0.21)],
'D': [(0.74, 0), (0.45, 0), (0.5, 0.05), (0.69, 0.05)],
'E': [(0.44, 0), (0.44, 0.25), (0.49, 0.21), (0.49, 0.05)],
'F': [(0.44, 0.26), (0.44, 0.54), (0.49, 0.49), (0.49, 0.29)],
'G': [(0.45, 0.25),(0.5, 0.28), (0.69, 0.28),(0.74, 0.25), (0.69, 0.22), (0.5, 0.22)],
'DP': [(0.8, 0.05), (0.85, 00.05), (0.85, 0.1), (0.8, 0.1)]
}
def draw_segment(ax, segment):
x = [p[0] for p in segment]
y = [p[1] for p in segment]
ax.fill(x, y, 'red')
def draw_digit(value,type="LOW"):
# HIGH:共阳
# LOW:共阴
if type=="LOW":
pass
elif type=="HIGH":
value=~value
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.axis('off')
for segment, state in zip(segments.keys(), [bool(value & (1 << i)) for i in range(8)]):
if state:
draw_segment(ax, segments[segment])
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.show()
# HIGH:共阳
# LOW:共阴
# 定义共阳数码管的编码表
table = [0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e]
# # 定义共阴数码管的编码表
# table = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]
#=====测试======
#1、 生成数码管1图片
value = 0xF9
draw_digit(value,type="HIGH")
#2、 生成数码管1-9 a-F图片
for i in table:
draw_digit(i,type="HIGH")
结果: