我是单片机初学者,现在想用单片实现一个功能: 输入单片机的为高电平。P3.6为触发检测 1。第一次按下开关A时,P1.0输出低电平。第一次按下A时,P1.0输出为高电平 2。第一次按下开关B时,P1.1输出低电平。第一次按下B时,P1.1输出为高电平 要求,P1.0和P1.1的输出结果不互冲突,既当P1.0为高电平时,按B时P1.0的状态不变,只有再次按A时P1.0才为低电平。 我是用汇编编的, ;---------------------------------------------------- D0 EQU P2.0 ;接收板数据口 0 D1 EQU P2.1 ;接收板数据口 1 D2 EQU P2.2 ;接收板数据口 2 D3 EQU P2.3 ;接收板数据口 3 VT EQU P3.6 ;解码有效输出端 ;---------------------------------------------------- ;---------------------------------------------------- CK1 EQU 01H ;遥控器按键 1(A)比较码 CK2 EQU 02H ;遥控器按键 2(B)比较码 CK3 EQU 04H ;遥控器按键 3(C)比较码 CK4 EQU 08H ;遥控器按键 4(D)比较码 ;---------------------------------------------------- ORG 0000H JMP MAIN ;---------------------------------------------------- MAIN: MOV SP,#30H MOV P2,#0FH ;置P2.0-P2.3为输入状态 MOV 20H,#00H
LOOP1: JNB VT,LOOP1 ;CTV=1,表示有键按下 MOV A,P2 ;读P2口状态 ANL A,#0FH ;取低4位 CALL OPERAT ;功能执行程序 JMP LOOP1 ;----------------------------------------------------- OPERAT: CJNE A,#CK1,OP1 ;是否是第一个键按下 CPL 20h.0 JNB 20h.0,OP0 MOV A,P1 ANL A,#0FEH MOV P1,A ;P00 LED 亮 RET
OP0: MOV A,P1 ORL A,#01H MOV P1,A ;P00 LED 灭 RET OP1: CJNE A,#CK2,OP3 ;是否是第二个键按下 CPL 20H.1 JNB 20H.1,OP2 MOV A,P1 ANL A,#0FDH MOV P1,A ;P01 LED 亮 RET OP2: MOV A,P1 ORL A,#02H MOV P1,A ;P01 LED 灭 RET OP3: CJNE A,#CK3,OP5 ;是否是第三个键按下 CPL 20H.2 JNB 20H.2,OP4 MOV A,P1 ANL A,#0FBH MOV P1,A ;P02 LED 亮 RET OP4: MOV A,P1 ORL A,#04H MOV P1,A ;P02 LED 灭 RET
OP5: CJNE A,#CK4,OP7 ;是否是第四个键按下 CPL 20H.3 JNB 20H.3,OP6 MOV A,P1 ANL A,#0F7H MOV P1,A ;P03 LED 亮 RET
OP6: MOV A,P1 ORL A,#08H MOV P1,A ;P03 LED 灭 RET ;-------------------------------------------------------------------------------
END 现在出现的是不能两个同时输出,请各位指点一下,谢谢了 |