老兄,东西不复杂的,自己思考,别碰到1+1的问题也要来问。要给你画流程,没人有那么多时间的,硬件:51用p1口接电阻驱动三级管,用三极管驱动二极管动作。软件:网上很多现成的资料,自己去整理。;************;;小灯控制程序;;************;;;************;;中断入口程序;;************;;ORG 0000H ;程序执行开始地址LJMP START ;跳至START执行ORG 0003H ;外中断0中断入口地址RETI ;中断返回(不开中断)ORG 000BH ;定时器T0中断入口地址RETI ;中断返回(不开中断)ORG 0013H ;外中断1中断入口地址RETI ;中断返回(不开中断)ORG 001BH ;定时器T1中断入口地址RETI ;中断返回(不开中断)ORG 0023H ;串行口中断入口地址RETI ;中断返回(不开中断);;************;; 初始化程序 ;;************;;CLEAR: MOV 20H,#00H ;20H单元内存清0(闪烁标志清0) SETB 00H ;位置1(上电时自动执行闪烁功能1) RET ;子程序返回;;************;; 主 程 序 ;;************;;START:ACALL CLEAR ;调用初始化子程序MAIN: LCALL KEYWORK ;调用键扫描子程序 JB 00H,FUN0 ;位为1时执行FUN0 JB 01H,FUN1 ;位为1时执行FUN1 JB 02H,FUN2 ;位为1时执行FUN2 JB 03H,MAIN ;备用 AJMP MAIN ;返回主程序MAIN;;************;; 功能程序 ;;************;;第1种闪烁功能程序FUN0: MOV A,#0FEH ;累加器赋初值FUN00:MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 JNB ;累加器最高位为0时转MAIN RL A ;累加器A中数据循环左移1位 AJMP FUN00 ;转FUN00循环;;第2种闪烁功能程序FUN1:MOV A,#0FEH ;累加器赋初值FUN11:MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 JZ MAIN ;A为0转MAIN RL A ;累加器A中数据循环左移1位 ANL A,P1 ;A同P1口值相与 AJMP FUN11 ;转FUN11循环;; 第3种闪烁功能程序FUN2:MOV A,#0AAH ;累加器赋初值 MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 CPL A ;A中各位取反 MOV P1,A ;累加器值送至P1口 LCALL DL05S ;延时 AJMP MAIN ;转MAIN;************;; 扫键程序 ;;************;;KEYWORK:MOV P3,#0FFH ;置P3口为输入状态 JNB ;读口,若为0转KEY0 JNB ;读口,若为0转KEY1 JNB ;读口,若为0转KEY2 JNB ;读口,若为0转KEY3 RET ;子程序返回;;闪烁功能0键处理程序KEY0:LCALL DL10MS ;延时10毫秒消抖 JB ;为1,子程序返回(干扰) SETB 00H ;位置1(执行闪烁功能1标志) CLR 01H ;位清0 CLR 02H ;位清0 CLR 03H ;位清0OUT0:RET ;子程序返回;; 闪烁功能1键处理程序KEY1:LCALL DL10MS JB SETB 01H ;位置1(执行闪烁功能2标志) CLR 00H CLR 02H CLR 03HOUT1:RET;;闪烁功能2键处理程序KEY2:LCALL DL10MS JB SETB 02H ;位置1(执行闪烁功能3标志) CLR 01H CLR 00H CLR 03HOUT2:RET;;闪烁功能(备用)键处理程序KEY3:LCALL DL10MS JB SETB 03H ;位置1(执行备用闪烁功能标志) CLR 01H CLR 02H CLR 00HOUT3:RET;;************;; 延时程序 ;;************;;毫秒延时子程序,执行一次时间为513微秒DL512:MOV R2,#0FFHLOOP1: DJNZ R2,LOOP1 RET;;10毫秒延时子程序(调用20次毫秒延时子程序)DL10MS:MOV R3,#14HLOOP2: LCALL DL512 DJNZ R3,LOOP2 RET;;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)DL05S:MOV R4,#0FHLOOP3: LCALL DL25MS DJNZ R4,LOOP3 RET;;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值DL25MS:MOV R5,#0FFHLOOP4:LCALL KEYWORK DJNZ R5,LOOP4 RETEND ;程序结束