【问题标题】:Displaying 2 digits number on dual 7segs LED display using PIC18F452 (Assembly)使用 PIC18F452(组件)在双 7 段 LED 显示屏上显示 2 位数字
【发布时间】:2013-04-13 11:00:10
【问题描述】:

PIC18Fxx2 的数据表

我正在使用的7segs相关数据表可以在right here获取

edit(15/4/2013): 下面的代码是 PORTD 的指令字

ldig    SET b'00001000' ;for rght digit
rdig    SET b'00000100' ;for left digit

代码第一次执行时TRISB、TRISD、PORTB和PORTD的指令字

CLRF    TRISB   ;port B as output
CLRF    TRISD   ;port D as output
CLRF    PORTD   ;clear port D not to select any digit
SETF    PORTB   ;set port B to off all segments

我想使用组装在 2 个七段 LED 显示器上显示两个不同的数字。我正在尝试使用下面列出的代码,但它不起作用。 注:rdig = 右面板,ldig = 左面板,disp1 代表 1,以此类推。

loop    MOVFF   disp1, PORTB
        MOVLW   rdig    ;select only the left display
        MOVWF   PORTD   ;unit to be on

        MOVFF   disp8, PORTB
        MOVLW   ldig    ;select only the left display
        MOVWF   PORTD   ;unit to be on

        bra     loop

输出应该是 81(在七段显示器上)没有出现任何数字。每个面板上只出现某种昏暗的灯光。但是,如果我试图在七段显示器的任一侧仅显示一个数字,则该代码有效。

loop        MOVFF   disp8, PORTB
            MOVLW   ldig    ;select only the left display
            MOVWF   PORTD   ;unit to be on

            bra     loop

编辑:我尝试使用TMR0N(b'00000000'指令字,tmrL = FF,tmrH = FB)为每个数字显示请求添加一个小延迟(2微秒),如下所示,右侧仅出现数字1面板。

loop    MOVFF   disp1, PORTB
    MOVLW   rdig    ;select only the left display
    MOVWF   PORTD   ;unit to be on
    call    delay

    MOVFF   disp8, PORTB
    MOVLW   ldig    ;select only the left display
    MOVWF   PORTD   ;unit to be on
    call    delay

    bra     loop

TMR0N 指令设置

initwrd SET 0x00
tmrH    SET 0xFF
tmrL    SET 0xFB

【问题讨论】:

  • 您应该发明解决方案,从小块构建它们。你不应该在网上找到现成的、完整的解决方案。缺乏的不是互联网。这是...
  • @AlexeyFrunze 我不希望有人向我展示如何从头开始。到目前为止,我对 18F452 编码所学的知识做得很好。但是我整整一周都在坚持这部分,需要一些解决方案。
  • 先确定具体问题怎么样?被卡住,整个星期,学校等都无关紧要。具体向我们展示您遇到的困难以及您已经尝试过的内容,即失败的想法和失败的代码。如前所述,您的问题/问题非常模糊,无法解决。改进它。
  • @AlexeyFrunze 好吧。感谢您的洞察力。
  • 我相信您需要包含设备的原理图和 7 段 LED 的数据表。您也没有定义disp1PORTBrdig 之类的东西。如果没有所有这些信息,一个人应该如何帮助您?

标签: assembly pic pic18


【解决方案1】:

假设 PORTD 的每个数字的启用设置正确且硬件连接相同,那么您的代码是正确的。您唯一的错误是延迟量。从 1 毫秒开始并增加,直到显示没有明显闪烁的两位数字。此延迟量取决于您使用的 7 段显示器的数量(同样是为了避免闪烁)。 2 微秒根本不够。我一直在使用图片多年,这应该可以。

【讨论】:

  • 我已按照您的建议将延迟更改为 1ms,但 7seg 显示器仍然只能在右侧面板上产生 1。如果你对你的答案很坚定,也许我的 7segs 的原理图/数据表有点不同或其他什么。我会先试着从我的讲师那里得到原理图。现在是周末,所以我暂时无法联系到他。
  • 不使用硬件计时器进行延迟,只需编写一个 SW 延迟子例程给 1ms .. 一个简单的循环运行该时间就足够了。试试看,如果没有。我认为您的代码没有任何问题。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多