;流水灯汇编语言程序代码: MAIN:MOV A,#0FEH ;保持只有一个LED灯亮 MOV R3,#08H ;把立即数08H送到寄存器R3中 LOOP:MOV P2,A LCALL DELAY ;长调用子程序,跳转到DELAY程序 RL A ;累加器循环左移 DJNZ R3,LOOP ;R3减1,不为0则跳转到LOOP LJMP MAIN ;转移到MAIN程序 DELAY:MOV R4,#00H ;延时程序 MOV R5,#00H D1:DJNZ R4,D1 ;R4减1,不为0则继续执行D1程序 D2:DJNZ R5,D2 ;R5减1,不为0则继续执行D2程序 RET END 流水灯程序电路图: ;数码显示管/LCD汇编语言程序: MAIN: MOV R6,#00H ;把立即数00H送到寄存器R6中 MOV R5,#00H MOV R2,#00H MOV R1,#00H DR: MOV A,R6 MOV P3,#08H ;00001000,第一个数码管显示 LCALL LOOP LCALL YS0 MOV A,R5 MOV P0,#0FFH MOV P3,#04H ;00000100,第二个数码管显示 LCALL LOOP LCALL YS0 MOV A,R2 MOV P0,#0FFH MOV P3,#02H LCALL LOOP LCALL YS0 MOV A,R1 ;第一次循环时R1为0送入A中,第二次循环时把R1+1送入A中 MOV P0,#0FFH MOV P3,#01H LCALL LOOP INC R1 CJNE R1,#0AH,DR ;R1循环10次,R2加1 INC R2 MOV R1,#00H CJNE R2,#0AH,DR ;R2循环10次,R5加1 INC R5 MOV R2,#00H CJNE R5,#0AH,DR ;R5循环10次,R6加1 INC R6 MOV R5,#00H CJNE R6,#0AH ,DR LJMP MAIN TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H LOOP: MOV DPTR,#TAB ;把查表地址送到DPTR指针中 MOVC A,@A+DPTR MOV P0,A ;在数码管中显示 RET YS0: ;延时程序 MOV R3,#06H MOV R4,#06H YS3: DJNZ R3,YS3 ;R3减1,不为0则继续执行YS3 YS4: DJNZ R4,YS4 RET END 数码显示管程序电路图: ;键盘汇编语言程序代码: ORG 0000H MAIN:MOV P1,#0FH ;以行列排布,若按键按下列为1 MOV A ,P1 CJNE A,#0FH,SCAN ;比较A与0FH是否相等,不相等则跳转到SCAN SJMP MAIN ;短转移 SCAN: JB P1.4 ,HX0 ;直接寻址位P1.4为1则转移到HXO,判断按键是否按下 JB P1.5 ,HX1 JB P1.6,HX2 JB P1.7 ,HX3 HX0: MOV R2,#0 ;列编号0、1、2、3送入R2中 LCALL FX HX1: MOV R2,#1 LCALL FX HX2:MOV R2,#2 LCALL FX HX3:MOV R2,#3 LCALL FX FX: MOV P1, #0F0H ;若按键按下则行为1 JNB P1.0 ,FX1 ;直接寻址位P1.0为0则转移到FX1,判断按键是否按下 MOV A,#0 ;行编号0、4、8、12送入A中 ADD A,R2 ;将列编号与行编号相加得键值送入A中,经压栈送入显示程序 PUSH Acc ;压栈 LCALL XS ;键值经压栈后送入显示程序 POP Acc ;出栈 LJMP MAIN FX1:JNB P1.1 ,FX2 MOV A,#4 ADD A,R2 PUSH Acc LCALL XS POP Acc LJMP MAIN FX2: JNB P1.2 , FX3 MOV A,#8 ADD A,R2 PUSH Acc LCALL XS POP Acc LJMP MAIN FX3: MOV A,#12 ADD A,R2 PUSH Acc LCALL XS POP Acc LJMP NONE XS: MOV DPTR, #TAB ;显示程序 MOVC A,@A+DPTR MOV P2 ,A LCALL DELAY RET DELAY:MOV R3 ,#0 ;延时程序 D1:MOV R4 ,#0 D2:DJNZ R4,D2 DJNZ R3,D1 RET NONE :NOP TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,