標(biāo)題:
數(shù)碼管顯示0到99按鍵加一匯編程序
[打印本頁]
作者:
daniu
時(shí)間:
2014-12-27 18:27
標(biāo)題:
數(shù)碼管顯示0到99按鍵加一匯編程序
;============================================================
;程序編寫人:蘭建
;編寫地點(diǎn):51hei培訓(xùn)機(jī)構(gòu)
;時(shí)間:5月23日下午 星期六
;功能:本程序?qū)崿F(xiàn)P0口的對(duì)2個(gè)數(shù)碼管顯示0到99,一個(gè)按鍵實(shí)現(xiàn)一次
;按鍵只遞加1次,到99回到0,按著不動(dòng)不影響數(shù)碼管動(dòng)態(tài)顯示;任何時(shí)
;刻,任何一個(gè)按鍵,若按鍵時(shí)間超過3秒,循環(huán)顯示0到9回到0,時(shí)間
;間隔1秒。若時(shí)間小于1秒,顯示加1,低電平亮
;P2口實(shí)現(xiàn)對(duì)數(shù)碼管的片選功能
;===============================================================
;=========================開始初始化============================
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è)置中斷定時(shí)器0標(biāo)志位
MODE EQU 01
;========================程序開始==============================
ORG 00H ;程序開始
LJMP START ;跳到START
ORG 0BH ;中斷定時(shí)器0入口地址
JMP T0_1 ;跳到定時(shí)器0服務(wù)程序
ORG 0030H ;入口地址
;=========================主程序===============================
START:MOV SP,#60H ;移開指針
MOV PIANXUAN,#00 ;片選初始化
MOV SHUZI,#00 ;數(shù)據(jù)初始化
MOV DPTR,#TAB ;查表初始化
MOV P1,#0F8H ;設(shè)置P1.0口為輸入
CALL INIT ;開中斷
CLR JIANBIT0 ;按鍵標(biāo)志位清0
SETB T_BIT ;中斷標(biāo)志位置1
MAIN:JNB T_BIT,MAIN ;等待中斷
CLR T_BIT ;中斷標(biāo)志位清0
CALL JISUAN ;計(jì)算分離十位和個(gè)位
CALL DISPLAY ;顯示個(gè)位和十位
JNB JIANBIT0,PANDUAN;按鍵標(biāo)志位=1判斷P1.3口,若為0則判斷按鍵是否抬起
JNB P1.3,XIANSHI0 ;;若P1.3=0則調(diào)到XIANSHI0
CLR JIANBIT0 ;長按標(biāo)志位清0
CLR XIAN0 ;顯示標(biāo)志位清0
JMP MAIN ;返回MAIN
PANDUAN:JB P1.3,NEXT ;若按鍵抬起則返回MAIN,若沒有抬起按鍵標(biāo)志位清0
SETB JIANBIT0
NEXT:JMP MAIN
XIANSHI0:
JB XIAN0,MAIN
SETB XIAN0 ;顯示標(biāo)志位清0
CALL JIACHULI ;加處理
JMP MAIN
;====================定時(shí)中斷0服務(wù)子程序========================
;輸入:無
;輸出:無
;實(shí)現(xiàn)的功能:實(shí)現(xiàn)定時(shí)20MS,影響標(biāo)志位T_BIT.
;===============================================================
T0_1:MOV TMOD,#MODE ;定時(shí)器1工作方式1
MOV TL0,#0E0H ;設(shè)置定時(shí)初值
MOV TH0,#0B1H
SETB T_BIT ;定時(shí)標(biāo)志位清0
RETI
;========================中斷設(shè)置子程序=========================
;輸入:無
;輸出:無
;實(shí)現(xiàn)的功能:初始化設(shè)置定時(shí)器,設(shè)置初值
;===============================================================
INIT:MOV TMOD,#MODE ;定時(shí)器0工作方式1
MOV TL0,#0E0H
MOV TH0,#0B1H
MOV IE,#82H ;開定時(shí)器中斷0
SETB TR0 ;開定時(shí)器0
RET
;========================計(jì)算子程序=============================
;輸入:30H
;輸出:"A和B"
;實(shí)現(xiàn)的功能:把30H的數(shù)據(jù)的十位和個(gè)位分離出來
;===============================================================
JISUAN:MOV A,SHUZI ;數(shù)據(jù)放在A中
MOV B,#10 ;除數(shù)放在B中
DIV AB ;商放在A中,余數(shù)放在B中
RET
;========================顯示子程序=============================
;輸入:"A"
;輸出:"P0口"
;實(shí)現(xiàn)的功能:把A的數(shù)輸出到P0口顯示,十位和個(gè)位分開顯示
;===============================================================
DISPLAY:MOVC A,@A+DPTR ;查表
MOV SHUCHU,A ;顯示十位
MOV PIANXUAN,#02H ;片選
CALL DELAY ;查表
;MOV SHUCHU,#0FFH ;關(guān)閉數(shù)碼管
MOV A,B
MOVC A,@A+DPTR ;查表
MOV SHUCHU,A ;顯示個(gè)位
MOV PIANXUAN,#03H ;片選
CALL DELAY ;延時(shí)
;MOV SHUCHU,#0FFH ;關(guān)閉數(shù)碼管
RET
;======================加處理子程序=============================
;輸入:無
;輸出:無
;實(shí)現(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
;========================延時(shí)程序===============================
;輸入;無
;輸出: 無
;實(shí)現(xiàn)的功能:延時(shí)一段時(shí)間
;===============================================================
DELAY:
MOV R6,#80
L7:MOV R5,#80
L8:DJNZ R5,L8
DJNZ R6,L7
RET
;=====================共陽查表數(shù)據(jù)==============================
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;=======================程序結(jié)束================================
END
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1