SETB RS0 SETB RS1
MOV A, #F0H ;列线全为低电平
MOV DPTR, #E001H ;判断有无键闭合(PB口) MOVX @DPTR, A INC DPTR
MOVX A, @DPTR ;从PC口读行线的状态 CPL A
ANL A, #OFH ;屏蔽无用的高四位 JZ NOKEY ;无键闭合 LCALL DELAY10 MOVX A, @DPTR CPL A
ANL A, #OFH JZ NOKEY
MOV R7, #04H ;列选号计数器 MOV R6, #10111111B ;列选码 KEYLOOP1: MOV A, R6 RR A MOV R6, A MOV DPTR, #E001H MOVX @DPTR, A INC DPTR MOVX A, @DPTR
JNB ACC.0, PC0 ;0行线为低,有键闭合,跳转PC0 JNB ACC.1, PC1 ;0行线为低,有键闭合,跳转PC1
JNB ACC.2 ,PC2 ;0行线为低,有键闭合,跳转PC2 JNB ACC.3, PC3 ;0行线为低,有键闭合,跳转PC3 DJNZ R7, KEYLOOP1 PC0:
33
MOV R5, #00H SJMP KEYNO PC1:
MOV R5, #01H SJMP KEYNO PC2:
MOV R5, #02H SJMP KEYNO PC3:
MOV R5, #03H SJMP KEYNO KEYNO: DEC R7 MOV A, R7 RL A RL A ADD A, R5 MOV R5, A MOV A, #F0H MOV DPTR, #E001H MOVX @DPTR, A INC DPTR KEYLOOP2:
MOVX A, @DPTR ORL A, #0F0H XRL A, #0FFH JNZ KEYLOOP2
MOV A,R5
MOV DPTR, #KEY MOVC A, @A+DPTR MOV KEYNAME, A
34
SJMP KEYOUT NOKEY:
MOV A, #11000000B MOV DPTR, #8801H MOVX @DPTR, A MOV KEYNAME, #0FFH KEYOUT: POP DPH POP DPL POP ACC POP PSW RETI DELAY10:
MOV R6,#10H 按键扫描码、键值对应关系: KEY:
DB 10H ;扫描码为0,对应键 * DB 07H ;扫描码为1,对应键 7 DB 04H ;扫描码为2,对应键 4 DB 01H ;扫描码为3,对应键 1
DB 00H ;扫描码为4,对应键 0 DB 08H ;扫描码为5,对应键 8 DB 05H ;扫描码为6,对应键 5 DB 02H ;扫描码为7,对应键 2
DB 09H ;扫描码为9,对应键 9 DB 06H ;扫描码为10,对应键 6 DB 03H ;扫描码为11,对应键 3
DB 0DH ;扫描码为14,对应键 D
35
DB 0AH ;扫描码为15,对应键 A DB 0EH ;扫描码为18,对应键 E DB 0BH ;扫描码为19,对应键 B DB 0CH ;扫描码为23,对应键 C RET
功能子程序: 锯齿波(KEY15)
Sawth: MOV DPTR, #FE00H MOV A, #00H LP: MOVX @DPTR, A INC A SJMP LP 三角波(KEY19)
Triangle: MOV DPTR, #FE00H MOV A,#00H UP: MOVX @DPTR, A INC A JNZ UP DEC A DOWN: DEC A MOVX @DPTR,A JNZ DOWN INC A SJMP UP 矩形波(KEY23)
Recta: MOV DPTR, #FE00H LP: MOV A, #DATAH MOVX @DPTR,A LCALL DELH MOV A,#DATAL
36
MOVX @DPTR,A LCALL DELL SJMP LP 梯形波(KEY14)
Trape:MOV DPTR, #FE00H L1: MOV A,#DATAL-1 UP: INC A MOVX @DPTR,A CJNE A,#DATAH,L3 L3: JC UP DOWN: LCALL DEL L2: DEC A MOVX @DPTR,A CJNE A, #DATAL,L4 L4: JC L1 SJMP L2 正弦波(KEY18) Sine: MOV R1,#00H LOOP1: MOV A,R1 MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV DPTR,#0BFFFH MOVX @DPTR,A INC R1 AJMP LOOP1 SETTAB:
DB 80H,83H,86H,89H,8DH,90H,93H,96H DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H
37