|
本帖最后由 wudawei 于 2014-12-31 14:46 編輯
;====================================================================*
;51單片機入門程序18
; 工程名稱: 串入并出移位寄學習--時鐘顯示程序 *
; 功能描述: 時鐘顯示程序 *
; (并行輸出串行移位寄存器74LS164擴展輸出口學習) *
; 硬件連接:針對配合AT89S51精簡開發板(第三版本)使用 *
; 編寫日期:2009.7.4
; 編寫者: 藍柳柳 *
;
;====================================================================*
SDA BIT P0.2 ; 定義數據線引腳定義
SCL BIT P0.3 ; 定義時鐘線引腳定義
LED0 EQU 30H ;定義顯示碼存儲空間
LED1 EQU 31H
LED2 EQU 32H
LED3 EQU 33H
LED4 EQU 34H
LED5 EQU 35H
LED6 EQU 36H
LED7 EQU 37H
;---------------------------------------
ORG 0000H ;主程序入口
AJMP MAIN ;跳轉到主程序
ORG 0100H ;主程序在ROM中存放位置
;===============主程序=====================
MAIN: MOV LED0,#00H ;對定義的顯示碼存儲空間付初值
MOV LED1,#00H
MOV LED2,#0FFH
MOV LED3,#00H
MOV LED4,#00H
MOV LED5,#0FFH
MOV LED6,#00H
MOV LED7,#00H
ACALL DISPLAY ;調用顯示程序
ACALL Delay_1s ;延時約一秒鐘
NEXT:
INC LED0 ;LED0中的數值加一
MOV A,LED0
CJNE A,#10,NEXT0 ;判斷LED0中的數值是否為10,如果不是則跳到NEXT0
MOV LED0,#00H ;如果是則向下執行,將LED0中的內容清零
INC LED1 ;LED1中的數值加一
MOV A,LED1
CJNE A,#6,NEXT0 ;判斷LED1中的數值是否為6,如果不是則跳到NEXT0
MOV LED1,#00H ;如果是則向下執行,將LED1中的內容清零
INC LED3
MOV A,LED3
CJNE A,#10,NEXT0
MOV LED3,#00H
INC LED4
MOV A,LED4
CJNE A,#6,NEXT0
MOV LED4,#00H
INC LED6
MOV A,LED6
CJNE A,#10,NEXT0
MOV LED6,#00H
INC LED7
MOV A,LED7
CJNE A,#6,NEXT0
MOV LED7,#00H
AJMP MAIN
RET
NEXT0: ACALL DISPLAY
ACALL Delay_1s
AJMP NEXT
RET
;===================================================
; 子程序名: DISPLAY
; 功能描述: 將運算的數值都移位到數碼管中顯示
;===================================================
DISPLAY:
MOV DPTR,#TABLE
MOV A,LED0
MOVC A,@A+DPTR ;根據LED0中的數值取表中相應的數去顯示
ACALL SHIFT
MOV A,LED1
MOVC A,@A+DPTR ;根據LED1中的數值取表中相應的數去顯示
ACALL SHIFT
MOV A,LED2
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED3
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED4
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED5
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED6
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED7
MOVC A,@A+DPTR
ACALL SHIFT
RET
;---------顯示代碼表---------
TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,
DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,滅,-
;===================================================
; 子程序名: SHIFT
; 功能描述: 移位程序,將8位數據依次移進74LS164芯片中
;===================================================
SHIFT: PUSH A ; 進棧暫存A值
MOV R0,#8 ; 循環8次
CLR C ;清進位標志
CLR SCL ;時鐘線,先鉗位為0
LP2: RLC A
MOV SDA,C ;向數據線送數據
NOP
NOP
SETB SCL ;拉高時鐘線
NOP
NOP
CLR SCL ;拉低時鐘線
NOP
NOP
DJNZ R0,LP2
POP A ; 出棧恢復A值
RET
;===================================================
; 子程序名: Delay_1s
; 功能描述: 延時約一秒鐘
;===================================================
Delay_1s:
MOV R1,#10
D: MOV R2,#200
T: MOV R3,#248
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它,
;調用完是要返回到主程序繼續運行下一個語句的
END
;補充說明:
;1.用外部中斷0來編寫程序時,硬件連接一定要考慮到單片機的第12引腳
;2.外部中斷0和定時器/計數器0的中斷入口地址分別是:0003H和000BH
;在應用到這兩個內容時要在程序開始時標出
希望各位的指導與賜教!
|
|