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

yanxiao

版主

  • 帖子

    12143
  • 精华

    46
  • 被关注

    183

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2016-09-07 07:54:11

6楼

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

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


BCD8421驱动.rar

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。