|
- ;===============================================================
- ;程序編寫人:蘭建文
- ;編寫地點:51hei培訓(xùn)機構(gòu)
- ;時間:6月7日下午 星期日
- ;功能:本程序?qū)崿F(xiàn)P0口的對2個數(shù)碼管顯示0到99,一個按鍵實現(xiàn)一次
- ;按鍵只遞加1次,到99回到0,按著不動不影響數(shù)碼管動態(tài)顯示;任何時
- ;刻,任何一個按鍵,若按鍵連續(xù)按鍵3次,每次間隔時間不大于1秒,循
- ;環(huán)顯示0到9回到0。若間隔時間大于1秒,顯示加1,低電平亮
- ;P2口實現(xiàn)對數(shù)碼管的片選功能
- ;===============================================================
- ;==========================系統(tǒng)程序=============================
- ;=========================開始初始化============================
- SHUCHU EQU P0 ;定義P0口為輸出口
- PIANXUAN EQU P2 ;定義P2口為片選口
- SHUZI EQU 30H ;設(shè)置處理數(shù)據(jù)存放地址
- JIANBIT0 BIT 20H.0 ;設(shè)置按鍵標(biāo)志位
- XIAN0 BIT 20H.2 ;顯示標(biāo)志位
- T_BIT BIT 21H.0 ;設(shè)置中斷定時器0標(biāo)志位
- LIANAN BIT 20H.1 ;設(shè)置連按標(biāo)志位
- BIT4 BIT 20H.2
- MODE EQU 01H
- SHU EQU 40H
- ;========================程序開始==============================
- ORG 00H ;程序開始
- LJMP START ;跳到START
- ORG 0BH ;中斷定時器0入口地址
- JMP T0_1 ;跳到定時器0服務(wù)程序
- ORG 0030H ;入口地址
- ;=========================主程序===============================
- START:MOV SP,#60H ;移開指針
- MOV SHUZI,#00 ;數(shù)據(jù)初始化
- MOV DPTR,#TAB ;查表初始化
- MOV P1,#0F8H ;設(shè)置P1.0口為輸入
- CALL INIT ;開中斷
- CLR JIANBIT0 ;按鍵標(biāo)志位清0
- CLR LIANAN ;連按標(biāo)志位清0
- CLR BIT4
- SETB T_BIT ;中斷標(biāo)志位置1
- MOV SHU,#0
- MOV R2,#0
- MOV R3,#0
- MOV R4,#0
- MOV R5,#200
- MAIN:JNB T_BIT,MAIN ;等待中斷
- CLR T_BIT ;中斷標(biāo)志位清0
- JB BIT4,VV
- INC R3
- CJNE R3,#25,XX
- MOV R3,#00
- MOV R2,#0
- JMP DD
- XX:CJNE R2,#3,VV
- SETB LIANAN
- MOV R2,#00
- DD:CLR BIT4
- VV:JB LIANAN,XUNHUAN ;判斷是否有連按
-
- CC:CALL JISUAN ;計算分離十位和個位
- CALL DISPLAY ;顯示個位和十位
-
- JNB JIANBIT0,PANDUAN;按鍵標(biāo)志位=1判斷P1.3口,若為0則判斷按鍵是否抬起
- JNB P1.3,XIANSHI0 ;若沒抬起(P1.3=0)則調(diào)到XIANSHI0
- SETB BIT4
- INC R2
- MOV R3,#0
- CLR JIANBIT0 ;按鍵標(biāo)志位清0
- CLR XIAN0 ;顯示標(biāo)志位清0
- JMP MAIN ;返回MAIN
-
- PANDUAN:
- JB P1.3,MAIN ;若按鍵抬起則返回MAIN,若沒有抬起按鍵標(biāo)志位清0
- SETB JIANBIT0
- JMP MAIN
-
- XIANSHI0:
- JB XIAN0,MAIN
- SETB XIAN0 ;顯示標(biāo)志位清0
- CALL JIACHULI ;加處理
- JMP MAIN
- XUNHUAN:
- MOV A,SHU
- CJNE A,#10,KKK
- MOV SHU,#0
- CLR LIANAN
- MOV A,SHU
- KKK: MOVC A,@A+DPTR ;查表
- MOV SHUCHU,A
- MOV PIANXUAN,#05
- INC R4
- CJNE R4,#50,OUTT
- INC SHU
- MOV R4,#0
- OUTT:JMP MAIN
- ;====================定時中斷0服務(wù)子程序========================
- ;輸入:無
- ;輸出:無
- ;實現(xiàn)的功能:實現(xiàn)定時20MS,影響標(biāo)志位T_BIT
- ;===============================================================
- T0_1:MOV TMOD,#MODE ;定時器1工作方式1
- MOV TL0,#0E0H ;設(shè)置定時初值
- MOV TH0,#0B1H
- SETB T_BIT ;定時標(biāo)志位清0
- RETI
- ;========================中斷設(shè)置子程序=========================
- ;輸入:無
- ;輸出:無
- ;實現(xiàn)的功能:初始化設(shè)置定時器,設(shè)置初值
- ;===============================================================
- INIT:MOV TMOD,#MODE ;定時器0工作方式1
- MOV TL0,#0E0H
- MOV TH0,#0B1H
- MOV IE,#82H ;開定時器中斷0
- SETB TR0 ;開定時器0
- RET
- ;========================計算子程序=============================
- ;輸入:30H
- ;輸出:"A和B"
- ;實現(xiàn)的功能:把30H的數(shù)據(jù)的十位和個位分離出來
- ;===============================================================
- JISUAN:MOV A,SHUZI ;數(shù)據(jù)放在A中
- MOV B,#10 ;除數(shù)放在B中
- DIV AB ;商放在A中,余數(shù)放在B中
- RET
- ;========================顯示子程序=============================
- ;輸入:"A"
- ;輸出:"P0口"
- ;實現(xiàn)的功能:把A的數(shù)輸出到P0口顯示,十位和個位分開顯示
- ;===============================================================
- DISPLAY:MOVC A,@A+DPTR ;查表
- MOV SHUCHU,A ;顯示十位
- MOV PIANXUAN,#04H ;片選
- CALL DELAY ;查表
- MOV SHUCHU,#0FFH ;關(guān)閉數(shù)碼管
- MOV A,B
- MOVC A,@A+DPTR ;查表
- MOV SHUCHU,A ;顯示個位
- MOV PIANXUAN,#05H ;片選
- CALL DELAY ;延時
- MOV SHUCHU,#0FFH ;關(guān)閉數(shù)碼管
- RET
- ;======================加處理子程序=============================
- ;輸入:無
- ;輸出:無
- ;實現(xiàn)的功能:把30H地址加1
- ;===============================================================
- JIACHULI:MOV A,SHUZI
- CJNE A,#99,L0 ;若A不等于9,則跳到LL
- MOV A,#00
- JMP L1
- L0:INC A ;自加一
- L1:MOV SHUZI,A
- RET
- ;========================延時程序===============================
- ;輸入;無
- ;輸出: 無
- ;實現(xiàn)的功能:延時一段時間
- ;===============================================================
- DELAY:
- MOV R6,#80
- L7:MOV R7,#80
- L8:DJNZ R7,L8
- DJNZ R6,L7
- RET
- ;=====================共陽查表數(shù)據(jù)==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- ;=======================程序結(jié)束================================
- END
復(fù)制代碼
|
|