QQ登录

只需一步,快速开始

四位BCD数码管扫描输出问题

[ 复制链接 ]
四位BCD数码管扫描输出问题

有一个小项目想利用一块信号为BCD码的LED屏显示温度,但是该LED屏的输入只有一路8421输入口,另加四路锁存信号来更新每个数字的显示,于是做了一个动态扫描显示0-9999的数字递增来做试验,但是数字全是乱跳的,请各位师傅指导下思路。

注:接通=1,断开=0

如4位数码管显示1234:

第一位显示1:8421口放置0001,第一位位选置1,然后第一位位选置0

第二位显示2:8421口放置0010,第二位位选置1,然后第二位位选置0

第三位显示3:8421口放置0011,第三位位选置1,然后第三位位选置0

第四位显示4:8421口放置0100,第四位位选置1,然后第四位位选置0

另可接dp,在任意位显示小数点

6360877619946116361394548.jpg

6360877620649219948843091.jpg


请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:6360877611607320716518928.rar 
文件大小:3.15 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

--------1、使用符号,也使程序变得可读。

2、数据和显示功能分开。第一步能显示静态数据。数据变化可以由PC机在线写入。

3、你注意过时序的匹配?也就是晶体管输出的延时问题?


-------时序没有注意 本想比如输出1000 然后逐个扫描过去更新,但是得0-0-0-1这样同步给数据才可以 所以各位十百千位用的同一个触发




--------数据变化只有一位的话倒是没有问题。。。




-------静态不是让你只显示1位数,而是让你显示如“1234”固定的数在上面,然后使用PC在线修改这个显示值。

所以,动态扫描是一定的。


---------先更新数据。并等待输出稳定了,再一位一位地去片选。在高频率的扫描下,晶体管的上升下降时间变得明显。图中你可以看得见片选信号是下降了一段时间后才选下一个的。我估计你没有做这项等待工作。


-----------你可以下载这个程序试试:

ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 主程序
LD     SM0.0
CALL   SBR1, VB0, 16#08            // 输出第1位
CALL   SBR1, VB1, 16#04            // 输出第2位
CALL   SBR1, VB2, 16#02            // 输出第3位
CALL   SBR1, VB3, 16#1             // 输出第4位

END_ORGANIZATION_BLOCK


SUBROUTINE_BLOCK 延时ms:SBR0
TITLE=延时,>1ms
BEGIN
Network 1 // 网络标题
// 读32位定时器值
LD     SM0.0
BITIM  AC0

Network 2
// 循环标记
LBL    1
Network 3
// 比当前时刻
LD     SM0.0
CITIM  AC0, AC1
Network 4
// 是否已过了1ms以上的时间
LDD<   AC1, 2
JMP    1
END_SUBROUTINE_BLOCK


SUBROUTINE_BLOCK 位输出:SBR1
TITLE=点亮一位LED
VAR_INPUT
BCD:BYTE; // 待显示数,低4位有效
DIG:BYTE; // 选通位,低4位有效
END_VAR
BEGIN
Network 1 // 网络标题
// 1、输出一位。正逻辑,高电平点亮LED。
LD     SM0.0
LPS
A      L0.3                        // BCD8421之8
=I     Q1.4                        // 立即输出,关键!
LRD
A      L0.2                        // BCD8421之4
=I     Q1.5
LRD
A      L0.1                        // BCD8421之2
=I     Q1.6
LPP
A      L0.0                        // BCD8421之1
=I     Q1.7

Network 2
// 2、若是上升沿锁存,这个延时必须的。否则可省。不清楚就留着。
LD     SM0.0
CALL   SBR0

Network 3
// 3、输出锁存脉冲
LD     SM0.0
LPS
A      L1.3
=I     Q1.0                        // 立即输出,关键!
LRD
A      L1.2
=I     Q1.1
LRD
A      L1.1
=I     Q1.2
LPP
A      L1.0
=I     Q1.3

Network 4
// 4、若是下降沿锁存,这个延时必须的。否则可省。不清楚就留着。
LD     SM0.0
CALL   SBR0

Network 5
// 5、复位锁在脉冲
LDN    SM0.0
=I     Q1.0                        // 立即输出,关键!
=I     Q1.1
=I     Q1.2
=I     Q1.3

END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1
END_INTERRUPT_BLOCK

请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:6360883163943527521012530.rar 
文件大小:2.65 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我



-------好的 我试一试


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索