在淘宝买了几个很小巧的数码管,测试了一下很有意思
<p>3位7段数字,带一个小数点和四个图标</p><p>6个引脚,分为两排,针距2.54,排距8.55,外径13mm,厚度4mm,很小巧</p>
<p>一开始以为是内置了芯片的模块,但是6个引脚又有点多,就买回来实际测试了一下发现是纯粹的io驱动,这样一来成本就很漂亮了</p>
<p>网上搜到的图纸和规格,基本和我手头的样品一致,买到的样品</p>
<div></div>
<p>找到的图纸资料</p>
<div> </div>
<div> </div>
<div> </div>
<div></div>
<div> </div>
<div>实物接线图,原本esp32打算用相连的六个引脚,实际测试2脚和5脚分别有上下拉,程序驱动前,会有微量的笔段,所以换成了0</div>
<div>led1----esp32-0</div>
<div>led2----esp32-5</div>
<div>led3----esp32-18</div>
<div>led4----esp32-23</div>
<div>led5----esp32-19</div>
<div>
<p>led6----esp32-22</p>
<div></div>
<p>下面是显示效果,没有做录像用手机拍摄闪的比较严重,肉眼看很清晰稳定,手机拍摄照片时效果也不好,这个是用慢速拍摄的,所以有点糊</p>
</div>
<div>
<div></div>
<p> </p>
</div>
<div> </div>
<p> </p>
<pre>
<code class="language-python">import time
from machine import Pin, I2C, Timer
#因为micropython的定时器回调时间精度有限,所以主程序中不能存在大延迟的原子操作。
#比如读写文件,大型流数据收发都会导致显示出现闪烁,这种数码管在micropython上驱
#动效果不理想,但是用来调试显示程序的逻辑还是非常方便的
#显示查找表,这个是按照单段显示优化的表格,缺点是效率较低,优点是显示亮度是均匀的
tab=[(4, 3), (5, 3), (0, 3), (1, 3), (2, 3), (3, 4), (5, 4),
(0, 4), (1, 4), (2, 4), (3, 5), (4, 5), (0, 5), (1, 5),
(2, 5), (3, 0), (4, 0), (5, 0), (1, 0), (2, 0), (3, 1),
(3, 2), (0, 1), (2, 1), (4, 1), (5, 1)]
#数字笔段转换表
digi_seg=
#符号查找表
Symbol=["dot","v","w","%","om"]
#根据需要按照实际顺序调整
P_list=
seg=[]
count=0
d_buff=0
#显示实现完全在定时器回调中完成,每次中断显示一个笔段,总共26个段,
#刷新率25hz视觉上有点闪烁,50hz(定时器频率1300)视觉上比较完美
def t_cb(tim):
global count, P_list, tab, d_buff
P_list].init(mode=Pin.IN, pull=None)
P_list].init(mode=Pin.IN, pull=None)
count+=1
if count>=26:
count=0
if d_buff&(1<<count):
P_list].value(1)
P_list].init(mode=Pin.OUT)
P_list].value(0)
P_list].init(mode=Pin.OUT)
tim1 = Timer(1)
tim1.init(freq=1300, mode=Timer.PERIODIC, callback=t_cb)
#设置一个启动全亮动作
d_buff=0xffffffff
time.sleep(0.6)
d_buff=0
time.sleep(0.2)
#生成显示的排列内容
def gen_seg(digi,string):
global d_buff
d_buff=0
#判断传入的字符串包含哪些符号,并作出显示
for s in range(5):
if Symbol in string:
d_buff += 1<<(21+s)
#个位
i=digi%10
d_buff += digi_seg<<14
#十位
t=digi//10%10
#如果小数点不是点亮的,则前两位为0不显示
if not ((d_buff&(1<<21))==0 and digi//10 == 0):
d_buff += digi_seg<<7
#百位,大于999的高位被截掉
p=digi//100%10
#如果为0不显示
if p != 0:
d_buff += digi_seg
#以下是显示调用的例子,数字不包含小数点发送到第一个变量,需要显示的符号加到字符串里面显示,符号顺序无关
for i in range(110):
gen_seg(i,"vdot")
time.sleep(0.05)
time.sleep(0.6)
d_buff=0
for i in range(110):
gen_seg(i,"w")
time.sleep(0.05)
time.sleep(0.6)
d_buff=0
</code></pre>
<p>测试程序</p>
<p> </p>
<p> </p>
wangshujun72 发表于 2024-10-28 21:44
import time
from machine import Pin, I2C, Timer
#因为micropython的定时器回调时间精度有限,所以主 ...
<div><br />
<br />
<br />
<br />
<br />
<br />
</div>
wangshujun72 发表于 2024-10-28 21:48
<p>混一点下载积分,大家应该都有吧</p>
<p>数码管封装的越来越好用了</p>
<p>直接连管脚吗,都不用加个电源或来个上拉吗,这功耗这么低的吗</p>
<p>6根引脚就能驱动,引脚还复用,这想法是挺有意思的。</p>
<p>看着挺小的,是不是那种保温杯里的显示温度的那种数码管?</p>
<p>有点意思,看起来很小巧啊,用在小玩具上也不错</p>
<p>这个原本是哪个产品上的?看着 还有百分比,欧姆符号</p>
<p>不知道,淘宝看到3元10个,就买了测试一下,估计是回收货拿来卖的</p>
<p>个头比保温杯的显示感觉更小,搜了一下类似的一般单个价格在3块左右</p>
<p> </p>
本帖最后由 wangshujun72 于 2024-10-30 12:29 编辑
<div>测试了多段显示模式,减少了中断次数,显示闪烁明显降低,至少手机拍摄能进行了</div>
<div>同时显示共阳的一个组,会随着同时限量的笔段数量出现亮度的差异,视觉上能接受,不算明显</div>
<div> </div>
<div></div>
<p> </p>
<p>17879baf8249b60e5a234aed98607203<br />
</p>
<p> </p>
<p>有点创新技术啊,6个IO口可以带动这么多LED,这样有点费驱动啊</p>
<p>还可以软件压力不大,罗嗦点,但是实际执行压力很小,如果用c实现效率会很高。</p>
<p>程序比传统数码管罗嗦一点,但是对于最终调用没啥区别,驱动三位数码管节省5个io,对于小封装的mcu还是很有吸引力的</p>
<p>2个脚的双色LED也是这个原理,就是管脚通过正反向来点亮不同的LED。这种数码管不像通用数码管那种有公共端,所以以前的通用数码管驱动IC也点不了这种管子,还得是单片机来驱动。</p>
<p>这种不错,用在DIY上很好。</p>
<p>还挺不错的,不知道是在什么开发板上用microPython实现的。</p>
<p>esp32板子做的测试,就用到了gpio和定时器,切换到不同的板子基本不需要做改变</p>
freebsder 发表于 2024-10-29 16:42
这个原本是哪个产品上的?看着 还有百分比,欧姆符号
<p>符号是表面的一个贴膜,可以拆下来,残胶用酒精可以洗掉,这样如果自己做面板符号就可以任意换了,符号位置是长方形的发光区,差不多可以照亮2个字母的区间</p>
这个怎么卖的,可以做什么?
页:
[1]
2