共2条
1/1 1 跳转至页
PnIN 请问为何PnIN的值总在变?
问
键盘为9线输出,4行4列1公共端。我将公共端接电阻接地
P1口前4位行输出,后四位读入,P2口悬空
仿真是一切正常的
但在实际运行时,发现P1IN和P2IN不停在变化,即使根本没有对P1口、P2口操作,Pnout正常。P1IN的变化是乱的,P2IN的变化还有点规律(总是0,1,3)
使得后来的按键判别无法进行。换了一块芯片也一样。
不知道可能是什么原因,请大虾们帮忙 答 1: P1口前4位行输出,后四位读入
这样好像不行阿!P1口要么设置为输出要么设置为输入,(通过P1DIR)
看你的意思是P1口既做输出又做输入了。
你改改电路吧,让P1口做的前4个口做输出,后4个悬空。(这时P1DIR=0XFF)
P2口的前4个输入,后4个接地。(P2DIR=0X00)
这样试试吧! 答 2: TO:小梁大虾
P1口按理应该能够部分作为输入部分输出的吧.
我用P1口作为中断输入,P1口没用的管脚设为输出没什么问题啊.
我想应该是程序有问题,外部硬件的干扰可能性大点 答 3: 应该是程序的问题 你把程序贴出来 答 4: 非常谢谢各位大虾,把所有的外接器件都去掉,之剩下键盘,用TI的板,做了几个尝试,好像是外部原因
发现:1.在不外接键盘的时候,运行正常,无按键按下,KEYJUDGE中C的状态正常
2.外接键盘就不行,PIN1的状态在KEYJUDGE的最后一步,有时不对。程序执行中,P1IN不断变化
3.P1口只外接导线,悬空,不挂键盘上去,P1IN都会出现乱的?这点实在是不知道怎么理解?
程序如下:
#include <MSP430x14x.h> ;头文件
COM EQU 210h ;指令放在210h
STATE EQU 211h ;LCD 的状态
DAT EQU 212h ;
PAGENUM EQU 213h
ROW EQU 214h
LINE EQU 215h
ORG 01100h
RESET mov.w #00A00h,SP
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupTB mov.w #TBSSEL0+TBCLR+TBIE,&TBCTL ; ACLK, clear TAB, interrupt
SetupCx mov.w #OUTMOD_4+CCIE,&TBCCTL0 ; TBCCR0 interrupt enabled
Mainloop
;P1口前4位输出,后4位输入
clr.b &P1SEL
MOV.B #0FH,&P1DIR
JUDGELOOP: CALL #KEYJUDGE
JNC JUDGELOOP
CALL #DELAY10MS
CALL #KEYJUDGE
JNC JUDGELOOP
CALL #KEYCODE ;将键码值存放在R5中
PUSH R5
KEYLOOP1: CALL #KEYJUDGE
JC KEYLOOP1
POP R5
; .........
JMP Mainloop
;判断按键有无
KEYJUDGE MOV.B #0FFH,&P1DIR
MOV.B #0,&P1OUT ;try?
MOV.B #0FH,&P1DIR
MOV.B #0FH,&P1OUT ;输出行线高电平
BIT.B #0F0H,&P1IN ;输出4条;列线,判断是否有高
RET ;若有,C=1
;获取键值,放到R5中
KEYCODE MOV.B #0FH,&P1DIR ;低4输出,高4读入
MOV #0,R5
MOV #1,R8 ;扫描信号的输出
KEYCODELOOP: MOV.B R8,&P1OUT
BIT.B #10H,&P1IN
JC KEYCODE1 ;测试P1.4
BIT.B #20H,&P1IN
JC KEYCODE2 ;测试P1.5
BIT.B #40H,&P1IN
JC KEYCODE3 ;测试P1.6
BIT.B #80H,&P1IN
JC KEYCODE4 ;测试P1.7
RLA.B R8
ADD.B #04,R5
CMP.B #16,R5
JNZ KEYCODELOOP
RET
KEYCODE1 ADD #0,R5
RET
KEYCODE2 ADD #1,R5
RET
KEYCODE3 ADD #2,R5
RET
KEYCODE4 ADD #3,R5
DELAY10MS POP R15
MOV #2666,R15
DELAYLOOP: DEC R15
JNZ DELAYLOOP
POP R15
RET
ORG 0FFFEh
DW RESET
END ;程序结束 答 5: 引用: 答 6: 挂了长线即使悬空也会不稳定,一般都是加上拉或下拉电阻。
参考slaue11.pdf,P6-4。 答 7: 引用: 答 8: 谢谢版主和“乡巴佬”大虾
请问 slaue11.pdf在哪里有下载的?光盘里没有找到 答 9: 作输入口的4条线应该上拉,输出口不用上拉,也不用下拉。
平时输出低电平,有中断后,依次输出高电平,看中断口是否变成高,但要有10到20ms的去抖。 答 10: 430的slaa,slau等应用文档在ti或lierda 的光盘里都有。
至于430的i/o,可以对每一根口线进行单独操作。不管是输入,输出还是中断,没有限制。
如果要低功耗设计,在键盘的区抖动软件设计中最好不要延时,具体的方法可以参考《单片机与嵌入式系统》2001年第七期P63 答 11: 如果是输入线悬空的话,那么输入会不稳定,我在做键盘的时候就碰到了这个问题。没按键都会有中断,后来行列线互换一下,即让其接个电阻接地就行了。不知道你的情况是不是这样子。
P1口前4位行输出,后四位读入,P2口悬空
仿真是一切正常的
但在实际运行时,发现P1IN和P2IN不停在变化,即使根本没有对P1口、P2口操作,Pnout正常。P1IN的变化是乱的,P2IN的变化还有点规律(总是0,1,3)
使得后来的按键判别无法进行。换了一块芯片也一样。
不知道可能是什么原因,请大虾们帮忙 答 1: P1口前4位行输出,后四位读入
这样好像不行阿!P1口要么设置为输出要么设置为输入,(通过P1DIR)
看你的意思是P1口既做输出又做输入了。
你改改电路吧,让P1口做的前4个口做输出,后4个悬空。(这时P1DIR=0XFF)
P2口的前4个输入,后4个接地。(P2DIR=0X00)
这样试试吧! 答 2: TO:小梁大虾
P1口按理应该能够部分作为输入部分输出的吧.
我用P1口作为中断输入,P1口没用的管脚设为输出没什么问题啊.
我想应该是程序有问题,外部硬件的干扰可能性大点 答 3: 应该是程序的问题 你把程序贴出来 答 4: 非常谢谢各位大虾,把所有的外接器件都去掉,之剩下键盘,用TI的板,做了几个尝试,好像是外部原因
发现:1.在不外接键盘的时候,运行正常,无按键按下,KEYJUDGE中C的状态正常
2.外接键盘就不行,PIN1的状态在KEYJUDGE的最后一步,有时不对。程序执行中,P1IN不断变化
3.P1口只外接导线,悬空,不挂键盘上去,P1IN都会出现乱的?这点实在是不知道怎么理解?
程序如下:
#include <MSP430x14x.h> ;头文件
COM EQU 210h ;指令放在210h
STATE EQU 211h ;LCD 的状态
DAT EQU 212h ;
PAGENUM EQU 213h
ROW EQU 214h
LINE EQU 215h
ORG 01100h
RESET mov.w #00A00h,SP
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupTB mov.w #TBSSEL0+TBCLR+TBIE,&TBCTL ; ACLK, clear TAB, interrupt
SetupCx mov.w #OUTMOD_4+CCIE,&TBCCTL0 ; TBCCR0 interrupt enabled
Mainloop
;P1口前4位输出,后4位输入
clr.b &P1SEL
MOV.B #0FH,&P1DIR
JUDGELOOP: CALL #KEYJUDGE
JNC JUDGELOOP
CALL #DELAY10MS
CALL #KEYJUDGE
JNC JUDGELOOP
CALL #KEYCODE ;将键码值存放在R5中
PUSH R5
KEYLOOP1: CALL #KEYJUDGE
JC KEYLOOP1
POP R5
; .........
JMP Mainloop
;判断按键有无
KEYJUDGE MOV.B #0FFH,&P1DIR
MOV.B #0,&P1OUT ;try?
MOV.B #0FH,&P1DIR
MOV.B #0FH,&P1OUT ;输出行线高电平
BIT.B #0F0H,&P1IN ;输出4条;列线,判断是否有高
RET ;若有,C=1
;获取键值,放到R5中
KEYCODE MOV.B #0FH,&P1DIR ;低4输出,高4读入
MOV #0,R5
MOV #1,R8 ;扫描信号的输出
KEYCODELOOP: MOV.B R8,&P1OUT
BIT.B #10H,&P1IN
JC KEYCODE1 ;测试P1.4
BIT.B #20H,&P1IN
JC KEYCODE2 ;测试P1.5
BIT.B #40H,&P1IN
JC KEYCODE3 ;测试P1.6
BIT.B #80H,&P1IN
JC KEYCODE4 ;测试P1.7
RLA.B R8
ADD.B #04,R5
CMP.B #16,R5
JNZ KEYCODELOOP
RET
KEYCODE1 ADD #0,R5
RET
KEYCODE2 ADD #1,R5
RET
KEYCODE3 ADD #2,R5
RET
KEYCODE4 ADD #3,R5
DELAY10MS POP R15
MOV #2666,R15
DELAYLOOP: DEC R15
JNZ DELAYLOOP
POP R15
RET
ORG 0FFFEh
DW RESET
END ;程序结束 答 5: 引用: 答 6: 挂了长线即使悬空也会不稳定,一般都是加上拉或下拉电阻。
参考slaue11.pdf,P6-4。 答 7: 引用: 答 8: 谢谢版主和“乡巴佬”大虾
请问 slaue11.pdf在哪里有下载的?光盘里没有找到 答 9: 作输入口的4条线应该上拉,输出口不用上拉,也不用下拉。
平时输出低电平,有中断后,依次输出高电平,看中断口是否变成高,但要有10到20ms的去抖。 答 10: 430的slaa,slau等应用文档在ti或lierda 的光盘里都有。
至于430的i/o,可以对每一根口线进行单独操作。不管是输入,输出还是中断,没有限制。
如果要低功耗设计,在键盘的区抖动软件设计中最好不要延时,具体的方法可以参考《单片机与嵌入式系统》2001年第七期P63 答 11: 如果是输入线悬空的话,那么输入会不稳定,我在做键盘的时候就碰到了这个问题。没按键都会有中断,后来行列线互换一下,即让其接个电阻接地就行了。不知道你的情况是不是这样子。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |