at89s51单片机实验——矩阵式键盘(编辑修改稿)内容摘要:
XRL A,0FH JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,0FH XRL A,0FH JZ NOKEY4 MOV A,P3 ANL A,0FH CJNE A,0EH,NK13 MOV KEYBUF,12 AT89S51单片机实验及实践教程 75 LJMP DK4 NK13: CJNE A,0DH,NK14 MOV KEYBUF,13 LJMP DK4 NK14: CJNE A,0BH,NK15 MOV KEYBUF,14 LJMP DK4 NK15: CJNE A,07H,NK16 MOV KEYBUF,15 LJMP DK4 NK16: NOP DK4: MOV A,KEYBUF MOV DPTR,TABLE MOVC A,@A+DPTR MOV P0,A DK4A: MOV A,P3 ANL A,0FH XRL A,0FH JNZ DK4A NOKEY4: LJMP WAIT DELY10MS: MOV R6,10 D1: MOV R7,248 DJNZ R7,$ DJNZ R6,D1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END 7. C 语言源程序 include unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}。 unsigned char temp。 unsigned char key。 unsigned char i,j。 void main(void) { while(1) { P3=0xff。 P3_4=0。 temp=P3。 temp=temp amp。 0x0f。 if (temp!=0x0f) { for(i=50。 i0。 i) for(j=200。 j0。 j)。 temp=P3。 AT89S51单片机实验及实践教程 76 temp=temp amp。 0x0f。 if (temp!=0x0f) { temp=P3。 temp=temp amp。 0x0f。 switch(temp) { case 0x0e: key=7。 break。 case 0x0d:。at89s51单片机实验——矩阵式键盘(编辑修改稿)
相关推荐
MOV KEYBUF,10 LJMP DK3 NK11: CJNE A,07H,NK12 MOV KEYBUF,11 LJMP DK3 NK12: NOP DK3: MOV A,KEYBUF MOV DPTR,TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF MOV B,2 MUL AB MOV TEMP,A MOV DPTR,TABLE1 MOVC A
RT: MOV Count,00H NEXT: MOV A,Count MOV B,10 DIV AB MOV DPTR,TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR MOV P2,A WT: JNB SP1,WT WAIT: JB SP1,WAIT LCALL DELY10MS AT89S51单片机实验及实践教程 59 JB SP1
图 6. 汇编源程序 Second EQU 30H ORG 0 START: MOV Second,00H NEXT: MOV A,Second MOV B,10 DIV AB MOV DPTR,TABLE MOVC A,@A+DPTR MOV P0,A AT89S51单片机实验及实践教程 62 MOV A,B MOVC A,@A+DPTR MOV P2,A LCALL DELY1S INC
程,就是使其恢复成高电平状态。 ( 1. 对于按键识别的指令,我们依然选择如下指令 JB BIT, REL 指令是用来检测 BIT 是否为高电平,若BIT= 1,则程序转向 REL处执行程序,否则就继续向下执行程序。 或者是 JNB BIT, REL指令是用来检测 BIT 是否为低电平,若 BIT= 0,则程序转向 REL 处执行程序,否则就继续向下执行程序。 ( 2.
R5,248 DJNZ R5,$ DJNZ R4,D1 DJNZ R3,DELAY RET TABLE: DB 0FEH,0FDH,0FBH,0F7H AT89S51单片机实验及实践教程 42 DB 0EFH,0DFH,0BFH,07FH DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 07FH,0BFH,0DFH,0EFH DB 0F7H
Y500 LCALL DELY500 DJNZ R2,DV CPL FLAG NEXT: MOV R2,200 DV1: CPL LCALL DELY500 开始 K1 按下了吗。 FLAG= 0吗。 置 200 次计数 输出取反 延时 500us 计数值计完了吗。 FLAG 取反 置 200 次计数 输出取反 延时 1ms 计数值计完了吗。 FLAG 取反 AT89S51单片机实验及实践教程