在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用8051單片機(jī)設(shè)計倒計時牌

            用8051單片機(jī)設(shè)計倒計時牌

            作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            ;************* 電子定時器的設(shè)計******************;
            ;*MCU: AT892051 ;
            ;*MCU-crystal: 12M ;
            ;*Version: 01 ;
            ;*Last Updata: 2009-5-4 ;
            ;*Author:HaiZhiZi ;
            ;*Description: ;
            ;定時器T0、T1溢出周期為50MS,T0為秒計數(shù)用 ;
            ;S2為功能鍵、S3為方式選擇鍵 ;
            ;P1口為字符輸出口,采用共陽顯示管 ;
            ;P3.2~P3.5為位選,P1.7為報警發(fā)音,P3.7為被控繼電器 ;
            ;************************************************;

            ;******************
            ; 偽定義 ;
            ;******************
            SL EQU 30H ; SL存放秒的個位數(shù)
            SH EQU 31H ; SH存放秒的十位數(shù)
            ML EQU 32H ; ML存放分的個位數(shù)
            MH EQU 33H ; MH存放分的十位數(shù)
            HL EQU 34H ; HL存放時的個位數(shù)
            HH EQU 35H ; HH存放時的十位數(shù)
            ;
            L0 EQU 36H ; L0~L3:顯示數(shù)據(jù)存儲器
            L1 EQU 37H
            L2 EQU 38H
            L3 EQU 39H
            DSPLYP EQU 3AH ; 顯示數(shù)據(jù)指針(DISPLAY-POINT)
            PLYTS EQU 3BH ; 顯示次數(shù)計數(shù)器(DISPLAY-TIMES)
            ;
            LPLMOD BIT 39H ; 低兩位顯示方式(LOW-PLAY-MOD)
            HPLMOD BIT 3AH ; 高兩位顯示方式(HIGH-PLAY-MOD)
            BRIGHT BIT 3BH ; DISPLAY子程序參數(shù):亮滅指示位
            ;
            TCOUNT EQU 3CH ; 時間計數(shù)器(TIME-COUNT)
            ;
            ADDRES EQU 3DH ; 加1子程序參數(shù)
            MAX EQU 3EH ; 加1子程序參數(shù)
            IFDEC BIT 20H ; BCD加法子程序參數(shù)
            ;
            R_MOD EQU 3FH ; 響鈴方式參數(shù)
            ;
            LED4 BIT 30H ; 發(fā)光管狀態(tài)位
            BELL BIT P1.7 ; 蜂鳴器
            SWITCH BIT P3.7 ; 繼電器
            FKEY BIT P3.0 ; 功能鍵 (S1)
            MKEY BIT P3.1 ; 修改鍵 (S2)
            ;
            WORKIN BIT 38H ; 工作狀態(tài)指示位
            ;

            ;******************
            ; 中斷入口 ;
            ;******************
            ORG 0000H
            START: LJMP MAIN ; 0000H 引向主程序
            LJMP ERR ; 0003H
            NOP
            NOP
            LJMP ERR ; 引向出錯處理程序
            LJMP PGT0 ; 000BH 引向中斷處理程序PGT0
            NOP
            NOP
            LJMP ERR ; 引向出錯處理程序
            LJMP ERR ; 0013H INT1
            NOP
            NOP
            LJMP ERR
            LJMP ERR ; 001BH T1
            NOP
            NOP
            LJMP ERR
            LJMP ERR ; 0023H
            NOP
            NOP
            LJMP ERR
            LJMP ERR ; 002BH
            NOP
            NOP
            ;
            ;************
            ; 主程序 ;
            ;************
            MAIN: MOV IE,#00H ; 關(guān)中斷
            MOV SP,#57H ; 設(shè)置堆棧指針
            MOV PSW,#00H ; 選用寄存器組0
            MOV TMOD,#11H ; 設(shè)定中斷工作方式為T0和T1
            ;
            MOV A,56H
            CJNE A,#0AAH,CSTART ; 判上電復(fù)位標(biāo)志,無標(biāo)志轉(zhuǎn)冷啟動
            MOV A,57H
            CJNE A,#55H,CSTART ; 無標(biāo)志轉(zhuǎn)冷啟動
            AJMP HSTART ; 有上電復(fù)位標(biāo)志轉(zhuǎn)熱啟動
            NOP
            NOP
            LJMP ERR ; 軟件陷阱,引向出錯處理程序
            CSTART: MOV P1,#0FFH ; 冷啟動,全面初始化
            MOV P3,#0FFH
            MOV TCON,#00H ; 計時停止
            MOV TL0,#0B0H ; 賦中斷T0初值
            MOV TH0,#3CH
            MOV TCOUNT,#0AH ; 賦定時器初值
            MOV R5,#00H ; R5為一空單元(備用)
            MOV R4,#00H ; R4 為工作模式選擇寄存器
            MOV SL,#00H ; 定時單元清零
            MOV SH,#00H ; 秒
            MOV ML,#00H ;
            MOV MH,#00H ; 分
            MOV HL,#00H ;
            MOV HH,#00H ; 時
            MOV PLYTS,#64H ; 賦顯示次數(shù)初值為100次
            MOV DSPLYP,#L0 ; 顯示指針指向顯存單元
            MOV L0,#0AH ; 送顯示數(shù)據(jù)"-----"
            MOV L1,#0AH
            MOV L2,#0AH
            MOV L3,#04H
            SETB LED4 ; LED4為數(shù)碼管之間的發(fā)光二極管
            SETB LPLMOD ; 設(shè)定顯示方式為閃爍
            SETB HPLMOD ;
            SETB BRIGHT ; 允許顯示
            CLR WORKIN ; 清工作標(biāo)志 , 待命
            AJMP SETUP ; 轉(zhuǎn)開始工作
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            HSTART: MOV SCON,#00H ; 有上電標(biāo)志,熱啟動,清串行口控制寄存器
            MOV IP,#00H ; 清中斷優(yōu)先控制寄存器
            SETB FKEY ; 重設(shè)按鍵
            SETB MKEY
            SETB EA ; 開中斷
            AJMP BEGIN ; 轉(zhuǎn)向繼續(xù)工作
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            SETUP: SETB EA ; 開中斷
            ;
            MAIN1: ACALL DISPLY ; 調(diào)用顯示
            JB FKEY,JUDGE ; 按鍵掃描
            ACALL KEYDLY ; 延時消抖動
            JB FKEY,JUDGE ; 無鍵按下轉(zhuǎn)向判斷是否到點
            CLR ET0 ; 功能鍵被按下,則
            CLR TR0 ; 暫停計時
            ACALL MENU ; 調(diào)用菜單設(shè)置程序
            BEGIN: SETB WORKIN ; 置工作標(biāo)志位,開始工作
            SETB ET0 ; 開中斷
            SETB TR0 ; 開始計時
            MOV A,R4 ; 移入工作模式選擇
            RL A ; 指針放大
            MOV DPTR,#M_TAB
            JMP @A+DPTR ; 根據(jù)工作模式跳轉(zhuǎn)到相應(yīng)程序段
            M_TAB: AJMP WORK1
            AJMP WORK2
            AJMP WORK3
            AJMP WORK4
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            WORK1: ;
            WORK2: CLR SWITCH ; 工作方式1和2:開繼電器
            AJMP MAIN2
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            WORK3: ;
            WORK4: SETB SWITCH ; 工作方式3和4:不開繼電器
            MAIN2: CLR BELL ; 蜂鳴器短鳴一聲,以示開始工作
            ACALL DL05S
            SETB BELL
            JUDGE: JNB WORKIN,MAIN1 ; 判斷是否在定時之中
            MOV A,SL ; 判斷秒是否為零
            JNZ MAIN1
            MOV A,SH ; 判斷秒是否為零
            JNZ MAIN1
            MOV A,ML ; 判斷分是否為零
            JNZ MAIN1
            MOV A,MH ; 判斷分是否為零
            JNZ MAIN1
            MOV A,HL ; 判斷時是否為零
            JNZ MAIN1
            MOV A,HH ; 判斷時是否為零
            JNZ MAIN1 ; 若時分秒全為零則
            CLR ET0 ; 停止計時
            CLR TR0 ;
            ACALL ACTION ; 調(diào)用到點工作子程序
            AJMP MAIN ; 返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;******************
            ; 倒計時程序 ;
            ;******************
            PGT0: CLR EA ; 關(guān)中斷
            PUSH ACC ; 保護(hù)現(xiàn)場
            PUSH PSW
            PUSH DPL
            PUSH DPH
            MOV PSW,#08H ; 選用寄存器組1
            CLR TR0 ; 暫停計時
            MOV A,#0B7H ; 中斷同步修正
            ADD A,TL0
            MOV TL0,A
            MOV A,#3CH
            ADD A,TH0
            MOV TH0,A
            SETB TR0 ; 恢復(fù)計時
            DEC TCOUNT ; 定時器T0每50 000毫秒溢出一次,則
            MOV A,TCOUNT ; 溢出10次為0.5秒
            JNZ OUTT0 ; 判斷是否到半秒
            MOV TCOUNT,#0AH ;
            CPL LED4 ; 若到半秒LED取反
            JNB LED4,OUTT0 ; LED每閃爍一次是一秒
            MOV R0,#SH ; 移入秒位的地址
            SETB IFDEC ; BCD子程序參數(shù),使其做減法
            ACALL ADDBCD ; 調(diào)用BCD子程序, 秒減1
            CJNE R3,#99H,OUTT0 ; 判斷秒要否借位
            MOV SH,#05H ; 要借位則
            MOV SL,#09H ; 送數(shù)據(jù)59(否則顯示99)
            MOV R0,#MH ; 移入分位的地址
            ACALL ADDBCD ; 分減1
            CJNE R3,#99H,OUTT0 ; 判斷分要否借位
            MOV MH,#05H
            MOV ML,#09H
            MOV R0,#HH
            ACALL ADDBCD
            OUTT0: POP DPH ; 恢復(fù)現(xiàn)場
            POP DPL
            POP PSW
            POP ACC
            SETB EA
            RETI ; 中斷返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;
            ;**************************
            ; BCD子程序(加1或減1 ) ;
            ;**************************
            ADDBCD: MOV A,@R0 ; 移入被操作數(shù)的高位
            DEC R0 ; 指針減一
            SWAP A
            ORL A,@R0 ; 移入被操作數(shù)的低位
            MOV B,#01H ; B寄存器送立即數(shù)#01H
            MOV C,IFDEC ; 若減法標(biāo)志位為1,則
            MOV B.3,C ;
            MOV B.4,C ; B寄存器的值被改為#99H
            MOV B.7,C ;
            ADD A,B ; 對一個壓縮的BCD碼加#99H等于對其減一
            DA A ; BCD碼調(diào)整
            MOV R3,A ; 暫存結(jié)果
            ANL A,#0FH ; 取低位碼
            MOV @R0,A ; 存數(shù)
            MOV A,R3 ; 取回結(jié)果
            INC R0 ; 指針加一
            SWAP A ; 交換
            ANL A,#0FH ; 取結(jié)果數(shù)的高位
            MOV @R0,A ; 存數(shù)
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;**************
            ; 加1程序 ;
            ;**************
            ADDONE: MOV R0,ADDRES ; 移入被加數(shù)單元的地址
            CLR IFDEC ; 設(shè)定BCD子程序做加法
            ACALL ADDBCD ; 調(diào)用BCD子程序
            CLR C ; 判斷被加數(shù)是否大于
            MOV A,R3 ; 最大值"MAX"
            CJNE A,MAX,JGOVER
            JGOVER: JC ENDADO
            CLR A ; 若大于"MAX",則清零
            MOV @R0,A
            DEC R0
            MOV @R0,A
            ENDADO: RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;******************
            ; 調(diào)時快進(jìn)程序 ;
            ;******************
            QUICK: CLR LPLMOD ; 設(shè)定顯示方式不閃爍
            CLR HPLMOD
            ACALL ADDONE ; 調(diào)用加1子程序
            MOV L0,R4 ; 將工作模式選擇數(shù)移入顯存
            INC L0 ; 加1轉(zhuǎn)化成顯示值
            ACALL KEYDLY ; 延時
            ACALL DL100
            JNB MKEY,QUICK ; 判斷鍵是否松開
            SETB LPLMOD ; 若松開則恢復(fù)閃爍顯示方式
            CJNE R6,#02H,ENDQUK
            SETB HPLMOD
            CLR LPLMOD
            ENDQUK: RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;
            ;******************
            ; 功能菜單程序 ;
            ;******************
            MENU: MOV R6,#00H ; 初始化; R6 計功能鍵按鍵次數(shù)
            MOV ADDRES,#05H ; 將 R5 的地址送入,以便于改變 R4 的值
            MOV MAX, #04H ; 定義工作模式選擇寄存器R4 的最大值
            MOV DSPLYP,#L0 ; 定義顯示指針指向顯存
            SETB LPLMOD ; 設(shè)定低兩位數(shù)閃爍
            CLR HPLMOD
            MOV L0,R4 ; 送顯示數(shù)據(jù)"F-0X"
            INC L0
            MOV L1,#00H
            MOV L2,#0BH
            MOV L3,#00H
            SETB LED4
            ;
            WAITFK: ACALL DISPLY ; 等待F鍵釋放
            JNB FKEY,WAITFK
            MENU1: ACALL DISPLY
            JB MKEY,JGFKEY ; M鍵掃描
            ACALL KEYDLY ; 延時消抖動
            JB MKEY,JGFKEY ; 未按下則轉(zhuǎn)F鍵掃描
            CJNE R6,#00H,NEXT1 ;
            MOV SL,#00H ; 若中途改變定時方式,則清除原計時數(shù)據(jù)
            MOV SH,#00H
            MOV ML,#00H
            MOV MH,#00H
            MOV HL,#00H
            MOV HH,#00H
            NEXT1: MOV R2,#00H ; R2用于判斷按鍵時間是否超過0.5秒
            NEXT2: ACALL ADDONE ; 調(diào)用加1程序
            MOV L0,R4 ; 移入工作方式選擇數(shù)
            INC L0
            ;
            WAITMK: ACALL DISPLY ; 等待M鍵釋放
            INC R2 ; R2自增一
            CLR C
            CJNE R2,#0C8H,JGQUIC ; 若R2大于等于200則調(diào)用快進(jìn)子程序
            JGQUIC: JC WATMK1
            ACALL QUICK
            WATMK1: JNB MKEY,WAITMK ; R2小于200則等待M鍵釋放
            ;
            JGFKEY: JB FKEY,MENU1 ; 功能(F)鍵掃描
            ACALL KEYDLY ; 延時消抖動
            JB FKEY,MENU1 ; 鍵未按下則轉(zhuǎn)修改(M)鍵掃描
            INC R6 ; F鍵按鍵次數(shù)加1
            MOV A,R6 ; 移入按鍵次數(shù)
            RL A ; 指針放大
            MOV DPTR,#FUNTAB
            JMP @A+DPTR ; 根據(jù)按鍵次數(shù)跳轉(zhuǎn)到相應(yīng)的程序段
            FUNTAB: AJMP WAITFK
            AJMP SETLOW
            AJMP SETHI
            AJMP ENDMEN
            NOP
            NOP
            AJMP ENDMEN
            ;STWKMD: ; 工作模式設(shè)定,不需另外改變菜單
            ;
            SETLOW: MOV MAX,#60H ; 設(shè)置低位(秒位或分位)
            MOV A,R4 ; 移入工作模式選擇數(shù)
            RL A ; 指針放大
            MOV DPTR,#FTAB1
            JMP @A+DPTR ; 根據(jù)工作模式選擇數(shù)跳轉(zhuǎn)到相應(yīng)的程序段
            FTAB1: AJMP SETSS
            AJMP SETM60
            AJMP SETSS
            AJMP SETM60
            NOP
            NOP
            AJMP WAITFK
            SETSS: MOV DSPLYP,#SL ; 設(shè)定顯示區(qū)域為MM:SS
            MOV ADDRES,#SH
            AJMP WAITFK
            SETM60: MOV DSPLYP,#ML ; 設(shè)定顯示區(qū)域為HH:MM
            MOV ADDRES,#MH
            AJMP WAITFK
            ;
            SETHI: CLR LPLMOD ; 設(shè)置高位(分位或時位)
            SETB HPLMOD ; 高兩位數(shù)碼管閃爍
            MOV MAX,#31H ; 最大數(shù)為30
            MOV A,R4 ; 移入工作模式選擇數(shù)
            RL A ; 指針放大
            MOV DPTR,#FTAB2 ; 移入表首地址
            JMP @A+DPTR ; 根據(jù)工作模式選擇數(shù)跳轉(zhuǎn)到相應(yīng)的程序段
            FTAB2: AJMP SETM30
            AJMP SETHH
            AJMP SETM30
            AJMP SETHH
            NOP
            NOP
            AJMP WAITFK ; 返回等待鍵釋放
            SETM30: MOV ADDRES,#MH ; 移入分位的地址
            AJMP WAITFK ; 轉(zhuǎn)向等待鍵釋放
            SETHH: MOV ADDRES,#HH ; 移入時位的地址
            AJMP WAITFK ; 轉(zhuǎn)向等待鍵釋放
            ;
            ENDMEN: CLR HPLMOD ; 恢復(fù)不閃爍顯示方式
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;****************
            ; 到點工作程序 ;
            ;****************
            ACTION: MOV L0,R4 ; 移入工作模式選擇數(shù)
            INC L0 ; 送顯示數(shù)"F-0X"
            MOV L1,#00H
            MOV L2,#0BH
            MOV L3,#00H
            SETB LED4
            MOV DSPLYP,#L0 ; 指針指向顯存
            SETB LPLMOD ; 設(shè)定顯示方式不閃爍
            SETB HPLMOD
            MOV A,R4 ; 移入工作模式選擇數(shù)
            RL A ;
            MOV DPTR,#A_TAB
            JMP @A+DPTR ; 根據(jù)工作模式選擇數(shù)跳轉(zhuǎn)
            A_TAB: AJMP ACTF1 ; 工作模式一
            AJMP ACTF1 ; 工作模式二
            AJMP ACTF3 ; 工作模式三
            AJMP ACTF3 ; 工作模式四
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ACTF1: SETB SWITCH ; 工作模式一(或二): 關(guān)繼電器
            MOV R_MOD,#82H ; 響鈴模式參數(shù)#82H
            MOV R2,#96H ; 響鈴次數(shù)參數(shù)#96H
            ACTF11: ACALL RING ; 調(diào)用響鈴子程序
            JNB MKEY,ENDACT ; 等待鍵按下
            JNB FKEY,ENDACT ; 有鍵按下則結(jié)束響鈴
            DJNZ R2, ACTF11 ; 次數(shù)未滿繼續(xù)響鈴
            MOV R_MOD,#0FFH ; 參數(shù)#0FF使響鈴無效
            AJMP ACTF11 ; 無鍵按下返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ACTF3: CLR SWITCH ; 工作模式三(或四): 開繼電器
            CLR BELL ; 蜂鳴器短鳴一聲
            ACALL DL1S
            SETB BELL
            MOV R_MOD,#0FFH ; 響鈴模式參數(shù)#0FFH
            MOV R2,#96H ; 響鈴時間參數(shù)#96H
            ACTF31: ACALL RING ; 調(diào)用響鈴子程序
            JNB MKEY,ENDACT ; 等待鍵按下
            JNB FKEY,ENDACT ; 有鍵按下則結(jié)束
            DJNZ R2,ACTF31 ; 次數(shù)未滿繼續(xù)
            MOV R2,#96H ; 重新賦值
            CLR BELL ; 短鳴一聲(說明: 響鈴模式參數(shù)#0FFH使
            ACALL DL100 ; 響鈴程序無效,僅起延時作用,
            SETB BELL ; 每延時一段時間短鳴一聲,以
            AJMP ACTF31 ; 提醒使用者繼電器仍在工作)
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ENDACT: SETB SWITCH ; 關(guān)繼電器
            AWAITF: ACALL DISPLY ; 調(diào)用顯示
            JNB FKEY,AWAITF ; 等待鍵釋放
            AWAITM: ACALL DISPLY ; 調(diào)用顯示
            JNB MKEY,AWAITM ; 等待鍵釋放
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;**************
            ; 響鈴程序 ;
            ;**************
            RING: MOV R5,#18H ; R5為循環(huán)控制變量
            RING1: JNB MKEY,R_EXIT ; 鍵掃描
            JNB FKEY,R_EXIT ; 有鍵按下則退出
            MOV A,R_MOD ; 移入響鈴模式參數(shù)
            MOV C,ACC.7 ; 根據(jù)響鈴模式參數(shù)改變響鈴
            MOV BELL,C
            RL A
            MOV R_MOD,A
            ACALL DL100 ; 延時
            DJNZ R5,RING1 ; 循環(huán)次數(shù)控制
            R_EXIT: SETB BELL ; 關(guān)閉響鈴
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;**************
            ; 顯示程序 ;
            ;**************
            DISPLY: PUSH ACC ; 數(shù)據(jù)壓棧保護(hù)
            PUSH PSW
            MOV PSW,#10H ; 選用寄存器組2
            MOV R0,DSPLYP ; 移入顯示指針
            MOV R2,#0FDH ; R2寄存的是數(shù)碼管選通數(shù)
            MOV A,PLYTS ; 移入顯示循環(huán)控制量
            JNZ PLAY ; 不為0則轉(zhuǎn)PLAY
            MOV PLYTS,#64H ; 否則從新賦值
            CPL BRIGHT ; 亮滅指示位取反
            PLAY: DEC PLYTS ; 顯示循環(huán)控制量減1
            JNB LPLMOD,PLAYL ; 低兩位數(shù)碼管不閃則"PLAYL"
            JB BRIGHT,PLAYL ; 亮滅指示為1也"PLAYL"
            ACALL NOPLAY ; 否則滅燈延時
            AJMP PLAY1 ; 轉(zhuǎn)顯示高位數(shù)碼管
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;用來顯示低位
            PLAYL: ORL P1,#7FH ; 清原顯示數(shù)據(jù)
            ORL P3,#3CH ; 清原選通數(shù)據(jù)
            MOV A,R2 ; 移入數(shù)碼管位選數(shù)
            RL A ; 換一位
            ANL P3,A ; 選通低位的個位數(shù)碼管
            MOV R2,A ; 暫存位選數(shù)
            MOV A,@R0 ; 移入顯示數(shù)值
            MOV DPTR,#TABLE1 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時
            INC R0 ; 指向低位的十位數(shù)
            JB P3.3,PLAYL ; 顯示低位的十位數(shù)
            ;
            PLAY1: JNB HPLMOD,PLAYH ; 高兩位數(shù)碼管不閃則"PLAYH"
            JB BRIGHT,PLAYH ; 亮滅指示為1也"PLAYH"
            ACALL NOPLAY ; 否則滅燈延時
            AJMP OUTPLY ; 轉(zhuǎn)結(jié)束
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;用來顯示高位
            PLAYH: ORL P1,#7FH ; 清原顯示數(shù)據(jù)
            ORL P3,#3CH ; 清原選通數(shù)據(jù)
            ANL P3,#0EFH ; 選通高位的個位數(shù)數(shù)碼管
            MOV A,@R0 ; 移入顯示數(shù)值
            MOV DPTR,#TABLE1 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時
            INC R0 ; 指向高位的十位數(shù)
            ; ; 顯示高位的十位數(shù)
            ORL P1,#7FH ; 清原顯示數(shù)據(jù)
            ORL P3,#3CH ; 清原選通數(shù)據(jù)
            ANL P3,#0DFH ; 選通高位的十位數(shù)
            MOV A,@R0 ; 移入顯示數(shù)值
            MOV C,LED4 ; 指針放大+小燈狀態(tài)
            RLC A ;
            MOV DPTR,#TABLE2 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時
            ;
            OUTPLY: POP PSW ; 恢復(fù)數(shù)據(jù)
            POP ACC
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            TABLE1: DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H, 80H, 90H,0BFH, 8EH,0FFH
            ; "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-", "F", " "
            ;
            TABLE2: DB 0FFH, 0DFH, 0F9H, 0D9H, 0A4H, 84H, 0B0H, 90H, 0BFH, 09FH
            ; " ", " :", "1 ", "1:", "2 ", "2:", "3 ", "3:", "- ", "-:"
            ;
            ;
            ;
            ;**********************
            ; 無顯示(滅燈)程序 ;
            ;**********************
            NOPLAY: ORL P1,#7FH ; 清顯示數(shù)據(jù)
            ORL P3,#3CH ; 清選通數(shù)據(jù)
            INC R0 ; 指針自增2
            INC R0
            ACALL DL1MS ; 延時
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;******************
            ; 延時程序 ;
            ;******************
            DL1MS: MOV R3,#0F9H ; 延時 1250US 只為DISPLY所調(diào)用
            DL1MS1: NOP
            NOP
            NOP
            DJNZ R3,DL1MS1
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            KEYDLY: CLR BELL ; 按鍵消抖動專用延時程序,
            ACALL DISPLY ; 在消除抖動的同時發(fā)出按鍵提示音
            SETB BELL
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL50MS: MOV R7,#0AH ; 50毫秒延時程序
            DL50M1: ACALL DISPLY ; 每調(diào)用一次顯示程序5MS
            DJNZ R7,DL50M1 ; 調(diào)用10次
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL100: ACALL DL50MS ; 延時100毫秒
            ACALL DL50MS
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL05S: ACALL DL100 ; 延時0.5秒
            ACALL DL100
            ACALL DL100
            ACALL DL100
            ACALL DL100
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL1S: ACALL DL05S ; 延時1秒
            ACALL DL05S
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;****************************
            ; ERR(出錯處理) 程序 ;
            ;****************************
            ERR: CLR EA ; 關(guān)中斷
            MOV DPTR,#ERR1 ; 準(zhǔn)備返回地址
            PUSH DPL ; 壓棧
            PUSH DPH ;
            RETI ; 中斷返回
            ERR1: MOV 56H,#0AAH ; 建立上電標(biāo)志(出錯標(biāo)志)
            MOV 57H,#55H
            MOV A,#00H ; 準(zhǔn)備返回地址
            PUSH ACC ; 壓棧
            PUSH ACC
            RETI ; 中斷返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ORG 07FAH
            NOP
            NOP
            NOP
            LJMP ERR ; 軟件陷阱

            END ; 程序結(jié)束


            關(guān)鍵詞: 8051單片機(jī)倒計時

            評論


            技術(shù)專區(qū)

            關(guān)閉