不过!这个简单的流水灯我还是会的!我已经找到答案了!谢谢!<br /><br />以下是答案程序:<br />设一个标志位flag, 以标志位的5种状态对应发光二极管的5种工作状态,如当flag=1;发光二极管工作在1,当flag=2;发光二极管工作在2,......!然后根据定时器定时功能,5秒到,刷新flag的值,程序如下; <br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <br />;/*程序功能:定时5S到切换LED显示状态. <br />;作者:w418781840.2008.5.29 */ <br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; <br />FLAG BIT 30H ;定义标志位 <br />ORG 0 <br />LJMP MAIN <br />ORG 0BH <br />LJMP AGA <br />;;;;;;主程序;;;;;;;;;;;; <br />ORG 0030H <br />MAIN: MOV FLAG,#01H ;标志位清0 <br />MOV TMOD,#01H ;赋值50MS <br />MOV TH0,#3CH <br />MOV TL0,#0B0H <br />MOV R0,#100 ;中断100*50=5S <br />SETB EA <br />SETB ET0 <br />SETB TR0 <br />SJMP $ <br />;;;;;;;;;中断服务程序;;;;;;;;;;;;;; <br />AGA: MOV TH0,#3CH <br />MOV TL0,#0B0H <br />DJNZ R0,LOOP ;5S到否?否,返回 <br />INC FLAG ;到,标志加1 <br />MOV A,FLAG <br />CJNE A,#05,L1 ;扫描5种状态了否? <br />MOV FLAG,#01H ;是,归0,重新开始 <br />;;;;;;;;;切换程序;;;;;;;;;;;; <br />L1: CJNE A,#01H,L2 ;判断是否是状态1?否,转判断2 <br />LCALL LED1 ;是,调有状态1 <br />SJMP LOOP ;返回 <br />L2: CJNE A,#02H,L3 ; 以下跟上面判断相同 <br />LCALL LED2 <br />SJMP LOOP <br />L3: CJNE A,#03H,L4 <br />LCALL LED3 <br />SJMP LOOP <br />L4: CJNE A,#04H,L5 <br />LCALL LED4 <br />SJMP LOOP <br />L5: CJNE A,#05H,LOOP <br />LCALL LED5 <br />LOOP: RETI <br />;;;;;;LED子程序区;;;;;;;;;; <br />LED1: RET <br />LED2: RET <br />LED3: RET <br />LED4: RET <br />LED5: RET <br />///////////////// <br />/////////////////////////////// <br />/*程序功能:定时5S到切换LED显示状态.
|