|
- ;============================================================
- ;程序編寫人:蘭建
- ;編寫地點:51hei培訓機構
- ;時間:5月23日下午 星期六
- ;功能:本程序實現P0口的對數碼管靜態顯示0到9;
- ; 分時顯示0到5;動態顯示0到9,低電平亮
- ; P2口實現對數碼管的片選功能
- ;==========================開始初始化============================
- SHUCHU EQU P0 ;定義P0口為輸出口
- PIANXUAN EQU P2 ;定義P2口為片選口
- CISHU EQU 10 ;0-9,共10個數字
- CISHU1 EQU 6 ;定義片選個數
- SHUZI EQU 30H ;定義處理數據存放地址
- ORG 00H ;程序開始
- LJMP MAIN ;跳到MAIN
- ORG 30H ;入口地址
- ;=========================主程序================================
- MAIN:CLR A ;數碼管顯示初始化
- CALL JINGTAI ;靜態顯示0-9
- CLR A ;數碼管顯示初始化
- CALL DONGTAI1 ;分時顯示123456
- CLR A ;數碼管顯示初始化
- CALL DONGTAI2 ;動態顯示0-9
- CLR A ;數碼管顯示初始化
- JMP MAIN ;返回MAIN
- ;=====================靜態顯示0-9子程序==========================
- ;輸入:"30H"
- ;輸出:"P0"
- ;實現的功能:把A的數輸出到P0口顯示
- ;================================================================
- JINGTAI:MOV SHUZI,#00 ;輸出數據初始化
- MOV PIANXUAN,#00H ;設置片選
- MOV R0,#CISHU ;把查表次數放R0
- MOV DPTR,#TAB ;查表初始化
- L1:CALL CHABIAO ;查表
- CALL DISPLAY ;顯示
- MOV R1,#200
- L1_0:CALL DELAY ;延時
- DJNZ R1,L1_0
- CALL CHULI ;處理
- DJNZ R0,L1 ;若R0減一不為0,進行下一個數字顯示
- RET
- ;=====================分時顯示123456子程序======================
- ;輸入:"30H"
- ;輸出:"P0"
- ;實現的功能:把A的數輸出到P0口顯示
- ;===============================================================
- DONGTAI1:MOV SHUZI,#00 ;輸出數據初始化
- MOV R1,0 ;設置片選
- MOV PIANXUAN,R1
- MOV R0,#CISHU1 ;把查表次數放R0
- MOV DPTR,#TAB ;查表初始化
- L2:CALL CHABIAO ;查表
- CALL DISPLAY ;顯示
- MOV R2,#100
- L2_0:CALL DELAY ;延時
- DJNZ R2,L2_0
- CALL CHULI ;處理
- CALL PIANXUANCHULI ;片選處理
- DJNZ R0,L2 ;若R0減一不為0,進行下一個數字顯示
- RET
- ;======================動態顯示0-9子程序=========================
- ;輸入:"30H"
- ;輸出:"P0"
- ;實現的功能:把A的數輸出到P0口顯示
- ;================================================================
- DONGTAI2:MOV SHUZI,#00 ;輸出數據初始化
- MOV DPTR,#TAB ;查表初始化
- MOV R3,#CISHU ;把現實數字的次數放在R3
- L3_1:MOV R1,#00H ;設置片選
- MOV PIANXUAN,R1 ;片選
- CALL CHABIAO ;查表
- MOV R2,#50
- DD:MOV R0,#CISHU1 ;把查表次數放R0
- L3:CALL DISPLAY ;顯示
- CALL PIANXUANCHULI ;片選處理
- CALL DELAY ;延時
- DJNZ R0,L3 ;若R0減一不為0,跳轉到L1
- DJNZ R2,DD ;各數子之間顯示設置一定的時間間隔
- CALL CHULI ;處理
- DJNZ R3,L3_1 ;若R3不為0,顯示下一個數字
- RET
- ;========================處理子程序==============================
- ;輸入:無
- ;輸出:無
- ;實現的功能:把30H地址加1
- ;================================================================
- CHULI:MOV A,SHUZI
- INC A
- MOV SHUZI,A
- RET
- ;=======================查表子程序===============================
- ;輸入:"DPTR"
- ;輸出:"A"
- ;實現的功能:把A的數輸出到P0口顯示
- ;================================================================
- CHABIAO:MOVC A,@A+DPTR
- RET
- ;====================片選處理子程序==============================
- ;輸入:無
- ;輸出:無
- ;實現的功能:把片選數據加1
- ;================================================================
- PIANXUANCHULI:INC R1
- MOV PIANXUAN,R1
- RET
- ;======================顯示子程序================================
- ;輸入:"A"
- ;輸出:"P0口"
- ;實現的功能:把A的數輸出到P0口顯示
- ;================================================================
- DISPLAY:MOV SHUCHU,A
- RET
- ;======================延時程序==================================
- ;輸入;無
- ;輸出: 無
- ;實現的功能:延時一段時間
- ;================================================================
- DELAY:MOV R7,#02H
- L6:MOV R6,#002H
- L7:MOV R5,#0F8H
- L8:DJNZ R5,L8
- DJNZ R6,L7
- DJNZ R7,L6
- RET
- ;======================共陽查表數據==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- END
復制代碼
|
|