我正在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
答案 0 :(得分:2)
一次驱动一列,扫描行,然后驱动下一列。听起来你正在同时驱动多个列,因此无法确定它是哪个开关,因为同一行变为活动状态。有some sample code here,但您需要将其转换为程序集。备选方案good Microchip app note (AN1081)描述了问题和解决方案,即使您的硬件不同,也可以从中学习。