源代碼和hex文件下載地址: http://www.zg4o1577.cn/ziliao/51hei-5/流水燈_鍵控_asm.rar
;--------------------------------------------------------------- ;程序名稱:按鍵控制幾種流水燈程序 ;晶振:11.0592 ;跳線設置:默認 ;實驗對象:51hei-5型單片機學習板 ;按板子上的4個獨立鍵盤就可看到現象 ;--------------------------------------------------------------- ;中斷入口程序; ;************; ; 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: clr P2.7 ;鎖存74hc573 防止數碼管干擾led燈
clr P1.4 ;打開led總開關
MOV 20H,#00H ;20H單元內存清0(閃爍標志清0)
SETB 00H ;20H.0位置1(上電時自動執行閃爍功能1)
RET ;子程序返回
;
; 主 程 序
;************
;
START:ACALL CLEAR ;調用初始化子程序
MAIN: LCALL KEYWORK ;調用鍵掃描子程序
JB 00H,FUN0 ;20H.0位為1時執行FUN0
JB 01H,FUN1 ;20H.1位為1時執行FUN1
JB 02H,FUN8 ;20H.2位為1時執行FUN2
JB 03H,FUN2 ;備用
AJMP MAIN ;返回主程序MAIN
;
; 功能程序
;************;
;第1種閃爍功能程序
FUN0: MOV A,#0FEH ;累加器賦初值
FUN00:MOV P0,A ;累加器值送至P0口
LCALL DL05S ;延時
JNB ACC.7,MAIN ;累加器最高位為0時轉MAIN
RL A ;累加器A中數據循環左移1位
AJMP FUN00 ;轉FUN00循環
;
;第2種閃爍功能程序
FUN1:MOV A,#7fH ;累加器賦初值
FUN11:MOV P0,A ;累加器值送至P0口
LCALL DL05S ;延時
JZ MAIN ;A為0轉MAIN
RR A ;累加器A中數據循環左移1位
ANL A,P0 ;A同P1口值相與
AJMP FUN11 ;轉FUN11循環
;
;第2種閃爍功能程序
FUN8:MOV A,#0feH ;累加器賦初值
FUN88:MOV P0,A ;累加器值送至P0口
LCALL DL05S ;延時
JZ MAIN ;A為0轉MAIN
Rl A ;累加器A中數據循環左移1位
ANL A,P0 ;A同P1口值相與
AJMP FUN88 ;轉FUN11循環
; 第4種閃爍功能程序
FUN2:MOV A,#0AAH ;累加器賦初值
MOV P0,A ;累加器值送至P0口
LCALL DL05S ;延時
CPL A ;A中各位取反
MOV P0,A ;累加器值送至P0口
LCALL DL05S ;延時
AJMP MAIN ;轉MAIN
; 掃鍵程序
;************;
;
KEYWORK:MOV P3,#0FFH ;置P3口為輸入狀態
JNB P3.2,KEY0 ;讀P3.2口,若為0轉KEY0
JNB P3.4,KEY1 ;讀P3.3口,若為0轉KEY1
JNB P3.6,KEY2 ;讀P3.4口,若為0轉KEY2
JNB P3.7,KEY3 ;讀P3.5口,若為0轉KEY3
RET ;子程序返回
;
;閃爍功能0鍵處理程序
KEY0:LCALL DL10MS ;延時10毫秒消抖
JB P3.2,OUT0 ;P3.2為1,子程序返回(干擾)
SETB 00H ;20H.0位置1(執行閃爍功能1標志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0:RET ;子程序返回
;
; 閃爍功能1鍵處理程序
KEY1:LCALL DL10MS
JB P3.4,OUT1
SETB 01H ;20H.1位置1(執行閃爍功能2標志)
CLR 00H
CLR 02H
CLR 03H
OUT1:RET
;
;閃爍功能2鍵處理程序
KEY2:LCALL DL10MS
JB P3.6,OUT2
SETB 02H ;20H.2位置1(執行閃爍功能3標志)
CLR 01H
CLR 00H
CLR 03H
OUT2:RET
;
;閃爍功能(備用)鍵處理程序
KEY3:LCALL DL10MS
JB P3.7,OUT3
SETB 03H ;20H.3位置1(執行備用閃爍功能標志)
CLR 01H
CLR 02H
CLR 00H
OUT3:RET
;
; 延時程序
;************;
;0.5毫秒延時子程序,執行一次時間為513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延時子程序(調用20次0.5毫秒延時子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
;延時子程序,改變R4寄存器初值可改變閃爍的快慢(時間為15×25毫秒)
DL05S:MOV R4,#0FH
LOOP3: LCALL DL25MS
DJNZ R4,LOOP3
RET
;
;25毫秒延時子程序,用調用掃鍵子程序延時,可快速讀出功能按鍵值
DL25MS:MOV R5,#0FFH
LOOP4:LCALL KEYWORK
DJNZ R5,LOOP4
RET
END ;程序結束
|