0

我正在 MPLAB 中编程 PIC16f877(使用汇编)。我有 4x4 开关面板。我可以接受输入,但我无法检测到它来自哪个开关。我正在使用 portb,首先 RB4 到 RB7 输入和 RB0 到 RB3 输出,但是例如 SW0、SW4、SW8、SW12 的功能是否相同?我怎样才能严格确定它们?

这是我的代码的相关部分

...
bsf TRISB,5
bcf TRISB,2
bcf STATUS,RP0

bsf STATUS,RP0
bcf OPTION_REG,7
bcf STATUS,RP0

...

btfs PORTB,5
call button1

goto    main

button1:
movlw   b'11111111'
movwf   PORTD
clrf    PORTE
bsf PORTE,2
call    delay

    return
4

1 回答 1

2

一次驱动一列,扫描行,然后驱动下一列。听起来您正在同时驱动多个列,因此无法分辨是哪个开关,因为同一行处于活动状态。这里有一些示例代码,但您需要将其转换为程序集。另一种选择是一个好的 Microchip 应用笔记 (AN1081)描述了问题和解决方案,即使您的硬件不同,您也可以从中学习。

于 2011-04-04T12:38:31.637 回答