/*************************************************************************** 006.asm 讀入獨(dú)立鍵盤(pán)上的按鍵,并把相應(yīng)的LED燈點(diǎn)亮,若一段時(shí)間無(wú)按鍵,剛循環(huán)點(diǎn)亮LED 接線:P0口接八位LED P2口接八位獨(dú)立按鍵 定時(shí)器T0計(jì)時(shí),中斷方式 2010.09.04 ***************************************************************************/ ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0100H MAIN: ;主程序入口 MOV SP,#50H ;設(shè)置堆棧 MOV TMOD,#01H ;設(shè)置定時(shí)模式 MOV TH0,#15H ;賦定時(shí)初值 MOV TL0,#9FH CLR 20H.0 ;初始化按鍵標(biāo)志 MOV R2,#0FFH ;初始化鍵值 MOV R3,#01H ;初始化循環(huán)閃鑠初值 MOV R4,#00H ;初始化定時(shí)初值 SETB TR0 ;啟動(dòng)定時(shí)器 MOV IE,#82H ;開(kāi)中斷 LOOP: LCALL KEY_READ ;掃描鍵盤(pán) L1: JB 20H.0,LIGH ;有鍵輸入,則去點(diǎn)亮相應(yīng)LED JBC 20H.0,LOOP MOV A,R4 CJNE A,#0C8H,LOOP ;否則去判斷定時(shí)是否到,定時(shí)到,循環(huán)點(diǎn)亮八位LED LCALL LEED LJMP L1 /*點(diǎn)亮相應(yīng)LED*/ LIGH: MOV A,R2 ;取鍵值 MOV P0,A ;輸出 RET /*循環(huán)點(diǎn)亮LED*/ LEED: MOV A,R3 LOOP1: CPL A MOV P0,A LCALL KEY_READ JB 20H.0,RETUN0 MOV R0,#0FFH LCALL DELAY MOV A,R3 RL A MOV R3,A CJNE A,#80H,LOOP1 LOOP2: CPL A MOV P0,A LCALL KEY_READ JB 20H.0,RETUN0 MOV R0,#0FFH LCALL DELAY MOV A,R3 RR A MOV R3,A CJNE A,#01H,LOOP2 SJMP LOOP1 RETUN0: RET /*鍵盤(pán)掃描程序*/ KEY_READ: CLR EA ;掃描鍵盤(pán)時(shí)關(guān)定時(shí)中斷 MOV A,P2 CJNE A,#0FFH,DE LJMP RETUN DE: MOV R0,#8AH LCALL DELAY MOV A,P2 CJNE A,#0FFH,DE0 LJMP RETUN DE0:MOV R2,A SETB 20H.0 MOV R4,#00H DE1:MOV A,P2 CJNE A,#0FFH,DE1 RETUN: SETB EA RET /*中斷子程序*/ INT_T0: CLR EA PUSH ACC MOV TH0,#15H ;重賦定時(shí)初值 MOV TL0,#9FH INC R4 POP ACC SETB EA RETI /*延時(shí)子程序 */ DELAY: D1: MOV R1,#0FFH D0: DJNZ R1,D0 DJNZ R0,D1 RET END