
ESP32(基于micropython)驱动四位数码管显示整数与浮点数
ESP32(基于micropython)驱动四位数码管,用于显示最多四位的有效数字,包括整数和浮点数。
·
目录
一、引言
萌新esp32之路开启!!!这几天在学习esp32,准备往物联网方向进发,以前也学过51和stm32。
本文章给出了一种面向对象的四位共阳数码管驱动方式,最后只要实例化对象,并在while循环里调用显示数字的方法即可。最大可以显示四位有效数字,也就是说可以显示整数和浮点数,并且有效数字小于四位时会在高位补0。
我没有系统学习过python,就会一些最基本的用法,并且有些地方还停留在c语言的面向过程编程,见笑了。 网上也有别人写的驱动代码,应该会比我简洁,但目前没有看到有人把小数也做了。
二、代码
2.1、创建NixieTube类
class NixieTube:
#数码管位码
position_code = {'D1':13,
'D2':12,
'D3':14,
'D4':27}
#数码管段号
section_indxe = {'a':15,
'b':2,
'c':4,
'd':16,
'e':17,
'f':5,
'g':18,
'dp':19}
#数码管段码
section_code = {0:[[section_indxe['a'], section_indxe['b'], section_indxe['c'], section_indxe['d'], section_indxe['e'], section_indxe['f']],
[section_indxe['g']]],
1:[[section_indxe['b'], section_indxe['c']],
[section_indxe['a'], section_indxe['d'], section_indxe['e'], section_indxe['f'], section_indxe['g']]],
2:[[section_indxe['a'], section_indxe['b'], section_indxe['d'], section_indxe['e'], section_indxe['g']],
[section_indxe['c'], section_indxe['f']]],
3:[[section_indxe['a'], section_indxe['b'], section_indxe['c'], section_indxe['d'], section_indxe['g']],
[section_indxe['e'], section_indxe['f']]],
4:[[section_indxe['b'], section_indxe['c'], section_indxe['f'], section_indxe['g']],
[section_indxe['a'], section_indxe['d'], section_indxe['e']]],
5:[[section_indxe['a'], section_indxe['c'], section_indxe['d'], section_indxe['f'], section_indxe['g']],
[section_indxe['b'], section_indxe['e']]],
6:[[section_indxe['a'], section_indxe['c'], section_indxe['d'], section_indxe['e'], section_indxe['f'], section_indxe['g']],
[section_indxe['b']]],
7:[[section_indxe['a'], section_indxe['b'], section_indxe['c']],
[section_indxe['d'], section_indxe['e'], section_indxe['f'], section_indxe['g'], ]],
8:[[section_indxe['a'], section_indxe['b'], section_indxe['c'], section_indxe['d'], section_indxe['e'], section_indxe['f'], section_indxe['g']],
[]],
9:[[section_indxe['a'], section_indxe['b'], section_indxe['c'], section_indxe['d'], section_indxe['f'], section_indxe['g'], ],
[section_indxe['e']]]}
#初始化数码管
def __init__(self):
#D1,D2,D3,D4
position_indxe_list = [self.position_code['D1'], self.position_code['D2'], self.position_code['D3'], self.position_code['D4']]
position_list = list()
#A,B,C,D,E,F,G,DP
section_indxe_list = [self.section_indxe['a'], self.section_indxe['b'], self.section_indxe['c'], self.section_indxe['d'],
self.section_indxe['e'], self.section_indxe['f'], self.section_indxe['g'], self.section_indxe['dp']]
section_list = list()
#初始化位码,并关闭对应位
for i in position_indxe_list:
position_list.append(Pin(i, Pin.OUT))
for p in position_list:
p.value(1)
#初始化段码,并关闭对应段
for i in section_indxe_list:
section_list.append(Pin(i, Pin.OUT))
for s in section_list:
s.value(1)
#在position位置显示number,DP等于1为显示小数点
def on(self, position='D1', number=0, DP=0):
#开启对应位
P = Pin(self.position_code[position])
P.value(0)
#开启对应段
for i in self.section_code[number][0]:
S = Pin(i)
S.value(0)
for i in self.section_code[number][1]:
S = Pin(i)
S.value(1)
#设置小数点
dp = Pin(self.section_indxe['dp'])
if DP==1:
dp.value(0)
else:
dp.value(1)
#关闭数码管显示
def off(self):
for i in self.section_indxe.values():
off = Pin(i)
off.value(1)
for i in self.position_code.values():
off = Pin(i)
off.value(1)
#数码管显示四个有效数字
def display(self, Numer=0):
num_list = list()
if type(Numer) == float:
#计算小数位数
DecimalPlaces = len(str(Numer)) - str(Numer).find(".") - 1
else:
DecimalPlaces = 0
#化整,为整除与地板除做准备
Numer = int(Numer * 10 ** DecimalPlaces)
#拆开各个数字
for i in range(4):
num_list.insert(0, Numer % 10)
Numer //= 10
#显示数字
if DecimalPlaces == 3:
self.on('D1', num_list[0], 1)
else:
self.on('D1', num_list[0])
self.off()
if DecimalPlaces == 2:
self.on('D2', num_list[1], 1)
else:
self.on('D2', num_list[1])
self.off()
if DecimalPlaces == 1:
self.on('D3', num_list[2], 1)
else:
self.on('D3', num_list[2])
self.off()
self.on('D4', num_list[3])
self.off()
如果你们使用的是共阴集数码管,只要把里面的.value(1)与.value(0)互换即可。要是你们的引脚跟我的对不上,可以调用类的属性进行修改。
2.2、举例
2.2.1、显示三位有效数字的整数721
#实例化对象
MyNixie = NixieTube()
while True:
MyNixie.display(721)
2.2.2、显示三位有效数字的浮点数7.21
MyNixie = NixieTube()
while True:
MyNixie.display(7.21)
2.2.3、修改引脚
MyNixie = NixieTube()
#修改引脚,让7.21从右到左显示
MyNixie.position_code = {'D1':27,
'D2':14,
'D3':12,
'D4':13}
while True:
MyNixie.display(7.21)
这里从右往左看是0.721的原因,是数码管的小数点只能在数字的右下角。如果我们把各个显示位拆开看,从右往左得到的就是0 7. 2 1了。
点击阅读全文
更多推荐
所有评论(0)