标题: 关于单片机控制新型正反扫4位数码管编程思路? [打印本页]

作者: an770841487    时间: 2022-5-10 16:02
标题: 关于单片机控制新型正反扫4位数码管编程思路?
求大神讲解一下关于此图数码管的控制原理

作者: Hephaestus    时间: 2022-5-10 16:34
这要用推挽电路才能驱动了,为什么要用这么繁琐的东西?
作者: an770841487    时间: 2022-5-10 16:34
有大神在吗?此问题已经困扰我很久了
作者: pcbboy    时间: 2022-5-10 16:47
这是常规的动态扫描点亮LED啦。先第一个发段位,再发第一个COM就是第一个位的数字显示,延时几个毫秒再发第二个,依次发完四个就是四位都显示了,然后继续循环就行了,要修改数字就需改段位码继续发就行了!
作者: an770841487    时间: 2022-5-10 16:47
Hephaestus 发表于 2022-5-10 16:34
这要用推挽电路才能驱动了,为什么要用这么繁琐的东西?

商用的单片机IO口能省则省,成本问题。用8个IO口控制
作者: pcbboy    时间: 2022-5-10 16:50
这个数码管有个特点,就是共阴极和共阳极一体的,很少见这种双极性的数码管。
作者: 人人学会单片机    时间: 2022-5-10 16:51
需要高阻模式,百度搜索一下《基于QN8035的收音机 STC8单片机程序和电路》,自己去弄代码就行了
作者: xianfajushi    时间: 2022-5-10 16:53
比如要显示4则FGBC需要点亮那么1高67低1低67高。
作者: an770841487    时间: 2022-5-10 16:55
pcbboy 发表于 2022-5-10 16:50
这个数码管有个特点,就是共阴极和共阳极一体的,很少见这种双极性的数码管。

现在小家电用的都很多这种的了,原理我懂,但实际编程的时候发现有时候会矛盾,比如E段输出高时,其它段位就无法完全关闭
作者: an770841487    时间: 2022-5-10 16:58
pcbboy 发表于 2022-5-10 16:47
这是常规的动态扫描点亮LED啦。先第一个发段位,再发第一个COM就是第一个位的数字显示,延时几个毫秒再发第 ...

谢谢。但是其它COM如何关闭呢,会影响到其它COM哦
作者: an770841487    时间: 2022-5-10 16:59
xianfajushi 发表于 2022-5-10 16:53
比如要显示4则FGBC需要点亮那么1高67低1低67高。

共用IO问题如何防止其它COM漏显
作者: Hephaestus    时间: 2022-5-10 17:01
an770841487 发表于 2022-5-10 16:47
商用的单片机IO口能省则省,成本问题。用8个IO口控制

单片机IO口推挽电流就能满足驱动亮度的话,就很好做了。

硬件上,5、6、7、8串限流电阻到单片机,1、2、3、4直接接单片机。

软件上分8个时间段:
1)1高电平,2、3、4高阻态,8、7、6、5分别输出第一个数码的A、B、C、D。
2)2高电平,1、3、4高阻态,8、7、6、5分别输出第二个数码的A、B、C、D。
3)3高电平,1、2、4高阻态,8、7、6、5分别输出第三个数码的A、B、C、D。
4)4高电平,1、2、3高阻态,8、7、6、5分别输出第四个数码的A、B、C、D。
5)1低电平,2、3、4高阻态,8、7、6分别输出第一个数码的E、F、G。
6)2低电平,1、3、4高阻态,8、7、6、5分别输出第二个数码的E、F、G和DP5。
7)3低电平,1、2、4高阻态,8、7、6、5分别输出第三个数码的E、F、G和DP6。
8)4低电平,1、2、3高阻态,8、7、6分别输出第四个数码的E、F、G。

作者: wulin    时间: 2022-5-10 17:18
an770841487 发表于 2022-5-10 16:34
有大神在吗?此问题已经困扰我很久了

这种数码管设计有点独特,每一个单元一半共阴一半共阳,也就是说一位数码管要分2次驱动,共8次才能完成4位数码管完整显示。COM端置推挽模式先高电平,后低电平,再高阻态。段码的低4位取共阴、高4位取共阳。要选择有相关端口模式选择功能的MCU。
作者: lkc8210    时间: 2022-5-10 17:20
你要选择有高阻/推挽/开漏管脚功能的单片机
如要显示2345
第一个循环
所有脚设为高阻消影
设8, 7, 5 脚为开漏
设1脚为推挽
第二个循环
所有脚设为高阻消影
设8,6 脚为推挽
设1脚为开漏

第三个循环
所有脚设为高阻消影
设8, 7, 6, 5 脚为开漏
设2脚为推挽
第四个循环
所有脚设为高阻消影
设6 脚为推挽
设2脚为开漏

第五个循环
所有脚设为高阻消影
设7, 6 脚为开漏
设3脚为推挽
第六个循环
所有脚设为高阻消影
设7, 6 脚为推挽
设3脚为开漏

第七个循环
所有脚设为高阻消影
设8, 6 ,5 脚为开漏
设4脚为推挽
第八个循环
所有脚设为高阻消影
设7,6 脚为推挽
设4脚为开漏

作者: 名字不是重点    时间: 2022-5-10 17:21
这种数码管,分解到段扫,一次就点一个段,整屏分32次扫完。软件就好写了,不用高阻。

这个还不是极端的,至少,SEG是SEG,COM 是COM。
更极端的是COM与SEG混用。一个IO,有时是SEG,有时是COM。
8个IO最大的驱动LED数是8*(8-1)*2=112个LED!
作者: an770841487    时间: 2022-5-10 17:21
Hephaestus 发表于 2022-5-10 17:01
单片机IO口推挽电流就能满足驱动亮度的话,就很好做了。

硬件上,5、6、7、8串限流电阻到单片机,1、2 ...

谢谢指点。单片机的高阻态是指?我只知道有设置端口为输入或者输出,高阻态是如何设置?亮度是不成问题的,可以满足
作者: Hephaestus    时间: 2022-5-10 17:38
an770841487 发表于 2022-5-10 17:21
谢谢指点。单片机的高阻态是指?我只知道有设置端口为输入或者输出,高阻态是如何设置?亮度是不成问题的 ...

没高阻态的话,你会发现不该亮的管子亮了,而且这个问题是无解的。
作者: lkc8210    时间: 2022-5-10 17:46
名字不是重点 发表于 2022-5-10 17:21
这种数码管,分解到段扫,一次就点一个段,整屏分32次扫完。软件就好写了,不用高阻。

这个还不是极端的 ...

没有高阻不行吧?
如果我只要点亮Digi1的A段
COM1=1
8=0
756=1

如果234=1
Digi234的A段也会亮
如果234=0
Digi234的FGDg段也会亮
作者: Y_G_G    时间: 2022-5-10 18:23
限流电阻只接在5678这4个引脚
把一个数码管当成两个数码管来看,一个数字分两次显示
假设:#define out P1
com1  bit P1^0
com2  bit P1^1
com3  bit P1^2
com4  bit P1^3
显示一个数字8:
设定com1,5678为推挽输出
设定com2,com3,com4,为高阻,就是没有输出和吸入能力,随便怎么操作,234这几个数码管都是不会亮的
显示数码管的ABCD:
这个过程com2,com3,com4是不参与的,因为是高阻,所以,不会有输出和吸入能力的

1:
com1=1   ;//高电平输出

out&=0x0f;//低电平吸入,用按位与操作,显示,低位是com的,不影响
延时1mS;这是显示部分

com1=0;//这是消除残影部分
out&=0x0f;//com1为低电平,5678这几个IO输出低电平,用于消除残影out&=0x0f一定要有,在这里out&=0x0f只是和数码的"8"巧合了而已,不是重复操作

显示数码管EFG DP
2:
com1=0;//低电平吸入

out&=0xff;//高电平输出,用按位与操作,显示,低位是com的,不影响
延时1mS;out&=0x0f;//com1为低电平,5678这几个IO输出低电平,用于消除残影



这就完成了一个数码管的显示了,剩下的也是一样的道理,每次显示之后都要消除残影,每次显示之前都要先更改几个com的输出模式,保证只有一个IO有输出和吸入能力,其它的都没有这个能力
5678这几个高位的不需要设置,只要设置一次就行,设置成推挽

作者: an770841487    时间: 2022-5-10 19:49
Y_G_G 发表于 2022-5-10 18:23
限流电阻只接在5678这4个引脚
把一个数码管当成两个数码管来看,一个数字分两次显示
假设:#define out P1
...

你写的很仔细到位,谢谢你的回复,按你的思路,如果单片机有高阻态,肯定是容易实现。但现在使用的电路,我看了这个单片机手册,没写有高阻功能,但有LED驱动模块。这是别人做开的已经商用的电路,因此不存在无法控制的问题,只是不知道他是不是用的LED模块来驱动或者别的方法。
作者: gongnn    时间: 2022-5-10 19:57
八位单片机当作四位单片机用就可以了,简单地说就是移位操作。
作者: Y_G_G    时间: 2022-5-10 20:07
an770841487 发表于 2022-5-10 19:49
你写的很仔细到位,谢谢你的回复,按你的思路,如果单片机有高阻态,肯定是容易实现。但现在使用的电路, ...

如果有是LED模块,那看一下LED模块有没有三态控制,如果LED模块有高阻设置的话,基本也是这么个原理的了

作者: mengzhixinheng    时间: 2022-5-11 07:28
分时复用不就行了,哪有那么复杂???
作者: lkc8210    时间: 2022-5-11 11:16
mengzhixinheng 发表于 2022-5-11 07:28
分时复用不就行了,哪有那么复杂???

愿闻其详
作者: pcbboy    时间: 2022-5-11 13:43
an770841487 发表于 2022-5-10 16:55
现在小家电用的都很多这种的了,原理我懂,但实际编程的时候发现有时候会矛盾,比如E段输出高时,其它段 ...

加限流电阻。看看是否段位上的电阻太小了有漏电流。
作者: yzwzfyz    时间: 2022-5-11 14:39
楼主有此一问了,有下例原因。
1、未真正地吃透扫描显示的原理。
2、如何让一只LED明暗。
建议:分8次扫描显示:
4次正逻辑,5678为数值,1234分时逐一为0。
4次负逻辑,5678为数值,1234分时逐一为1。
以上是如何扫描,需要吃透。
这样需要8个4位数值,建立用8个寄存器或内存存放(M1-M8)。数值是什么,自己好好的算一下(如何让一只LED明暗)。参考答案如下:
M1=XXXX0111
M2=XXXX1011
M3=XXXX1101
M4=XXXX1110
M5=XXXX1000
M6=XXXX0100
M7=XXXX0010
M8=XXXX0001
XXXX=?就不告诉你了,以防脑子生锈。
作者: lkc8210    时间: 2022-5-11 15:00
yzwzfyz 发表于 2022-5-11 14:39
楼主有此一问了,有下例原因。
1、未真正地吃透扫描显示的原理。
2、如何让一只LED明暗。

如果我只想点亮Digi1的A段
M1 = 1000 0YYY
YYY=?
111?Digi2/3/4 的 B/C/D段会同时被点亮
000?Digi2/3/4 的 A段会同时被点亮
作者: datouyuan    时间: 2022-5-11 15:40
an770841487 发表于 2022-5-10 17:21
谢谢指点。单片机的高阻态是指?我只知道有设置端口为输入或者输出,高阻态是如何设置?亮度是不成问题的 ...

设置端口为输入,就是高阻。
有的mcu能配置上拉、下拉电阻,这种单片机要把上拉、下拉电阻配置为无。
绝大部分单片机都能设为高阻。
这种数码管要求单片机端口能设置为高阻、推挽高、推挽低。除了很老的51单片机外,其它单片机都能胜任。

另外这种数码管应该是白、蓝光led,它们的压降高,能达到3V。其它颜色压降低,估计不行。
作者: xianfajushi    时间: 2022-5-11 16:38
一时之间没查资料就凭感觉猜测,觉得每次显示一段是比较合理的也好控制但是显示一个字则需要八次控制4位则需要32次控制,所花费时间比较多.就好比C++编程控制台模拟数码管段仿真一样道理
https://blog.csdn.net/xianfajushi/article/details/104877907

作者: xianfajushi    时间: 2022-5-11 17:00
不过依据控制台编程经验来看未必就一定使用32次控制或许可以更少但是原理还是每次显示一段,然而可以每位显示一段或可减少次数并使得程序写得简洁,忽然想起了写过这样控制台仿真编程.
作者: an770841487    时间: 2022-5-11 17:38
mengzhixinheng 发表于 2022-5-11 07:28
分时复用不就行了,哪有那么复杂???

能说详细一点吗,谢谢您的解答
作者: an770841487    时间: 2022-5-11 20:00
datouyuan 发表于 2022-5-11 15:40
设置端口为输入,就是高阻。
有的mcu能配置上拉、下拉电阻,这种单片机要把上拉、下拉电阻配置为无。
绝 ...

今天问了芯片客服,他们回答和你的答案一样,设置为输入就是高阻态,并且要禁掉上下拉。谢谢你的解答




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1