我的改用引脚下拉的查看按键P33所在的情况,可以的。在芯片手册的IO口那里有:
关于 I/O 的注意事项:
1、 P3.0 和 P3.1 口上电后的状态为弱上拉/准双向口模式
2、 除 P3.0 和 P3.1 外,其余所有 IO 口上电后的状态均为高阻输入状态,用户在使用 IO 口
前必须先设置 IO 口模式。如果按键刚好是P30、P31口那么不用配置相关输入上下拉也效果也正常。我的测试代码:
- $INCLUDE (STC32G.INC);引用头文件
- ORG 0000H
- JMP MAIN
- MAIN:
- LCALL GPIO_Init
- LJMP MAIN_LOOP
- GPIO_Init:
- MOV A,#00000001B
- MOV P0M0,A
- MOV A,#00000000B
- MOV P0M1,A ;配置P0.0口推挽输出
- ;MOV A,#00000000B
- ;MOV P3M0,A
- ;MOV A,#00000001B
- ;MOV P3M1,A ;配置P3.0口高阻输入
- MOV A,#00000000B
- MOV P3M0,A
- MOV A,#00001000B
- MOV P3M1,A ;配置P3.3口高阻输入
- ORL P_SW2,#80H ;相或操作,将最高位置1,使能访问XFR
- MOV WR6,#WORD0 P3PU
- MOV WR4,#WORD2 P3PU
- MOV A,#00001000B ;P33口上拉
- MOV @DR4,R11
- ;MOV WR6,#WORD0 P3PD
- ;MOV WR4,#WORD2 P3PD
- ;MOV A,#00001000B ;P33口下拉
- ;MOV @DR4,R11
- RET
- MAIN_LOOP:
- JNB P3.3, BUTTON_PRESSED ; 如果P3.0为0,跳转
- SETB P0.0 ; 对P0.0置1
- SJMP MAIN_LOOP
- BUTTON_PRESSED:
- CLR P0.0
- SJMP MAIN_LOOP
- END
复制代码
|