在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            電子定時(shí)器

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            電子定時(shí)器能定時(shí)給電器供電或斷電,最大時(shí)間可以長(zhǎng)達(dá)30h,操作使用方便,采用AT89C2051單片機(jī)控制,4位共陽(yáng)數(shù)碼管顯示時(shí)間,繼電器作電器電源輸出控制,其電路簡(jiǎn)單。

            1.系統(tǒng)硬件電路的設(shè)計(jì)

            本文引用地址:http://www.biyoush.com/article/201611/317332.htm

            (1)芯片的選擇

            硬件電路要求實(shí)現(xiàn)對(duì)交流大電流電源的控制、定時(shí)時(shí)間的設(shè)定顯示和到點(diǎn)提醒等功能。若采用40腳單片機(jī)有利于設(shè)計(jì),但會(huì)增大電路板的體積。本設(shè)計(jì)采用ATMEL公司的AT89C2051單片機(jī),芯片為20腳,體積小,工作電壓范圍寬(2.7V~6V)。

            (2)交流控制接口電路

            本設(shè)計(jì)采用繼電器控制。也可用可控硅控制等。

            (3)顯示電路

            顯示電路采用4個(gè)LED數(shù)碼管。為了在定時(shí)精度達(dá)到分的時(shí)候能顯示出時(shí)鐘在計(jì)時(shí),兩個(gè)數(shù)碼管之間增加了兩個(gè)發(fā)光二極管,以其閃爍來(lái)代表秒走動(dòng);為了使硬件顯示電路簡(jiǎn)單,采用單片機(jī)直接驅(qū)動(dòng)LED數(shù)碼管(AT89C2051輸出口能吸收20mA電流),用動(dòng)態(tài)掃描法實(shí)現(xiàn)LED顯示。

            (4)電源電路

            電源電路采用普通三端集成穩(wěn)壓電路

            (5)報(bào)警電路

            報(bào)警電路采用普通5V成品小蜂鳴器。

            2.系統(tǒng)軟件主程序的設(shè)計(jì)

            程序采用模塊化、結(jié)構(gòu)化設(shè)計(jì),并采用了軟件抗干擾技術(shù),其軟件的可靠性較好,可維護(hù)性強(qiáng)。其主要程序模塊有:

            (1)主程序

            主程序有3個(gè)狀態(tài):待命狀態(tài)、計(jì)時(shí)工作狀態(tài)和到點(diǎn)工作狀態(tài)。

            (2)菜單(設(shè)置)程序

            菜單程序完成定時(shí)方式和定時(shí)時(shí)間的設(shè)定。

            (3)到點(diǎn)工作程序

            到點(diǎn)工作程序根據(jù)所選定的不同定時(shí)方式,作不同的處理。

            (4)抗干擾(出錯(cuò))程序

            程序跑飛時(shí)能被軟件陷阱捕獲,被抗干擾程序處理,返回復(fù)位狀態(tài),重新啟動(dòng)系統(tǒng)。

            3.操作說(shuō)明:

            (1)通電以后,顯示窗顯示“----”,表示機(jī)器處于待命狀態(tài)。

            (2)按功能鍵(S2),顯示窗顯示“F-01”,進(jìn)入功能設(shè)置,此時(shí)按修改鍵(S3)選擇不同定時(shí)方式:

            方式1:定時(shí)關(guān)電源,定時(shí)范圍為1s~30min59s;

            方式2:定時(shí)關(guān)電源,定時(shí)范圍為1s~30h59min;

            方式3:定時(shí)開電源,定時(shí)范圍為1s~30min59s;

            方式4:定時(shí)開電源,定時(shí)范圍為1s~30h59min.

            (3)選定定時(shí)方式后,再按功能鍵,進(jìn)入時(shí)間設(shè)定。先設(shè)定秒(方式1、方式3)或分(方式2、方式4),再設(shè)定分(方式1、方式3)或小時(shí)(方式2、方式4)。按修改鍵增加數(shù)字,按功能鍵確定,按住修改鍵不放可快進(jìn)。

            (4)設(shè)定時(shí)間完畢,按下功能鍵,定時(shí)器長(zhǎng)鳴一聲,開始工作。

            (5)定時(shí)時(shí)間到了在定時(shí)方式1和方式2,定時(shí)器會(huì)鳴叫,此時(shí)按任意鍵可停止鳴叫。

            (6)在任何情況下,按下復(fù)位鍵(S2鍵),定時(shí)器重新回到待命狀態(tài)。

            原理圖:

            實(shí)物圖:

            源代碼:

            ;************* 電子定時(shí)器的設(shè)計(jì)******************;
            ;*MCU: AT892051 ;
            ;*MCU-crystal: 12M ;
            ;*Version: 01 ;
            ;*Last Updata: 2007-6-14 ;
            ;*Author: zhaojun ;
            ;*Description: ;
            ;定時(shí)器T0、T1溢出周期為50MS,T0為秒計(jì)數(shù)用 ;
            ;S2為功能鍵、S3為方式選擇鍵 ;
            ;P1口為字符輸出口,采用共陽(yáng)顯示管 ;
            ;P3.2~P3.5為位選,P1.7為報(bào)警發(fā)音,P3.7為被控繼電器 ;
            ;************************************************;

            ;******************
            ; 偽定義 ;
            ;******************
            SL EQU 30H ; SL存放秒的個(gè)位數(shù)
            SHEQU 31H ; SH存放秒的十位數(shù)
            ML EQU 32H ; ML存放分的個(gè)位數(shù)
            MH EQU 33H ; MH存放分的十位數(shù)
            HL EQU 34H ; HL存放時(shí)的個(gè)位數(shù)
            HHEQU 35H ; HH存放時(shí)的十位數(shù)
            ;
            L0 EQU 36H ; L0~L3:顯示數(shù)據(jù)存儲(chǔ)器
            L1EQU 37H
            L2 EQU 38H
            L3EQU 39H
            DSPLYP EQU 3AH ; 顯示數(shù)據(jù)指針(DISPLAY-POINT)
            PLYTS EQU 3BH ; 顯示次數(shù)計(jì)數(shù)器(DISPLAY-TIMES)
            ;
            LPLMOD BIT 39H ; 低兩位顯示方式(LOW-PLAY-MOD)
            HPLMOD BIT 3AH ; 高兩位顯示方式(HIGH-PLAY-MOD)
            BRIGHT BIT 3BH ; DISPLAY子程序參數(shù):亮滅指示位
            ;
            TCOUNT EQU 3CH ; 時(shí)間計(jì)數(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 ; 引向出錯(cuò)處理程序
            LJMP PGT0 ; 000BH 引向中斷處理程序PGT0
            NOP
            NOP
            LJMP ERR ; 引向出錯(cuò)處理程序
            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)志,無(wú)標(biāo)志轉(zhuǎn)冷啟動(dòng)
            MOV A,57H
            CJNE A,#55H,CSTART ; 無(wú)標(biāo)志轉(zhuǎn)冷啟動(dòng)
            AJMP HSTART ; 有上電復(fù)位標(biāo)志轉(zhuǎn)熱啟動(dòng)
            NOP
            NOP
            LJMP ERR ; 軟件陷阱,引向出錯(cuò)處理程序
            CSTART: MOV P1,#0FFH ; 冷啟動(dòng),全面初始化
            MOV P3,#0FFH
            MOV TCON,#00H ; 計(jì)時(shí)停止
            MOV TL0,#0B0H ; 賦中斷T0初值
            MOV TH0,#3CH
            MOV TCOUNT,#0AH ; 賦定時(shí)器初值
            MOV R5,#00H ; R5為一空單元(備用)
            MOV R4,#00H ; R4 為工作模式選擇寄存器
            MOV SL,#00H ; 定時(shí)單元清零
            MOV SH,#00H ; 秒
            MOV ML,#00H ;
            MOV MH,#00H ; 分
            MOV HL,#00H ;
            MOV HH,#00H ; 時(shí)
            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)志,熱啟動(dòng),清串行口控制寄存器
            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 ; 延時(shí)消抖動(dòng)
            JB FKEY,JUDGE ; 無(wú)鍵按下轉(zhuǎn)向判斷是否到點(diǎn)
            CLR ET0 ; 功能鍵被按下,則
            CLR TR0 ; 暫停計(jì)時(shí)
            ACALL MENU ; 調(diào)用菜單設(shè)置程序
            BEGIN: SETB WORKIN ; 置工作標(biāo)志位,開始工作
            SETB ET0 ; 開中斷
            SETB TR0 ; 開始計(jì)時(shí)
            MOV A,R4 ; 移入工作模式選擇
            RL A ; 指針?lè)糯?br />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 ; 判斷是否在定時(shí)之中
            MOV A,SL ; 判斷秒是否為零
            JNZ MAIN1
            MOV A,SH ; 判斷秒是否為零
            JNZ MAIN1
            MOV A,ML ; 判斷分是否為零
            JNZ MAIN1
            MOV A,MH ; 判斷分是否為零
            JNZ MAIN1
            MOV A,HL ; 判斷時(shí)是否為零
            JNZ MAIN1
            MOV A,HH ; 判斷時(shí)是否為零
            JNZ MAIN1 ; 若時(shí)分秒全為零則
            CLR ET0 ; 停止計(jì)時(shí)
            CLR TR0 ;
            ACALL ACTION ; 調(diào)用到點(diǎn)工作子程序
            AJMP MAIN ; 返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;******************
            ; 倒計(jì)時(shí)程序 ;
            ;******************
            PGT0: CLR EA ; 關(guān)中斷
            PUSH ACC ; 保護(hù)現(xiàn)場(chǎng)
            PUSH PSW
            PUSH DPL
            PUSH DPH
            MOV PSW,#08H ; 選用寄存器組1
            CLR TR0 ; 暫停計(jì)時(shí)
            MOV A,#0B7H ; 中斷同步修正
            ADD A,TL0
            MOV TL0,A
            MOV A,#3CH
            ADD A,TH0
            MOV TH0,A
            SETB TR0 ; 恢復(fù)計(jì)時(shí)
            DEC TCOUNT ; 定時(shí)器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)場(chǎng)
            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 ; 對(duì)一個(gè)壓縮的BCD碼加#99H等于對(duì)其減一
            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)時(shí)快進(jìn)程序 ;
            ;******************
            QUICK: CLR LPLMOD ; 設(shè)定顯示方式不閃爍
            CLR HPLMOD
            ACALL ADDONE ; 調(diào)用加1子程序
            MOV L0,R4 ; 將工作模式選擇數(shù)移入顯存
            INC L0 ; 加1轉(zhuǎn)化成顯示值
            ACALL KEYDLY ; 延時(shí)
            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 計(jì)功能鍵按鍵次數(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 ; 延時(shí)消抖動(dòng)
            JB MKEY,JGFKEY ; 未按下則轉(zhuǎn)F鍵掃描
            CJNE R6,#00H,NEXT1 ;
            MOV SL,#00H ; 若中途改變定時(shí)方式,則清除原計(jì)時(shí)數(shù)據(jù)
            MOV SH,#00H
            MOV ML,#00H
            MOV MH,#00H
            MOV HL,#00H
            MOV HH,#00H
            NEXT1: MOV R2,#00H ; R2用于判斷按鍵時(shí)間是否超過(guò)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 ; 延時(shí)消抖動(dòng)
            JB FKEY,MENU1 ; 鍵未按下則轉(zhuǎn)修改(M)鍵掃描
            INC R6 ; F鍵按鍵次數(shù)加1
            MOV A,R6 ; 移入按鍵次數(shù)
            RL A ; 指針?lè)糯?br />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 ; 指針?lè)糯?br />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ū)域?yàn)镸M:SS
            MOV ADDRES,#SH
            AJMP WAITFK
            SETM60:MOV DSPLYP,#ML ; 設(shè)定顯示區(qū)域?yàn)镠H:MM
            MOV ADDRES,#MH
            AJMP WAITFK
            ;
            SETHI: CLR LPLMOD ; 設(shè)置高位(分位或時(shí)位)
            SETB HPLMOD ; 高兩位數(shù)碼管閃爍
            MOV MAX,#31H ; 最大數(shù)為30
            MOV A,R4 ; 移入工作模式選擇數(shù)
            RL A ; 指針?lè)糯?br />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 ; 移入時(shí)位的地址
            AJMP WAITFK ; 轉(zhuǎn)向等待鍵釋放
            ;
            ENDMEN: CLR HPLMOD ; 恢復(fù)不閃爍顯示方式
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;****************
            ; 到點(diǎn)工作程序 ;
            ;****************
            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使響鈴無(wú)效
            AJMP ACTF11 ; 無(wú)鍵按下返回
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ACTF3: CLR SWITCH ; 工作模式三(或四): 開繼電器
            CLR BELL ; 蜂鳴器短鳴一聲
            ACALL DL1S
            SETB BELL
            MOV R_MOD,#0FFH ; 響鈴模式參數(shù)#0FFH
            MOV R2,#96H ; 響鈴時(shí)間參數(shù)#96H
            ACTF31: ACALL RING ; 調(diào)用響鈴子程序
            JNB MKEY,ENDACT ; 等待鍵按下
            JNB FKEY,ENDACT ; 有鍵按下則結(jié)束
            DJNZ R2,ACTF31 ; 次數(shù)未滿繼續(xù)
            MOV R2,#96H ; 重新賦值
            CLR BELL ; 短鳴一聲(說(shuō)明: 響鈴模式參數(shù)#0FFH使
            ACALL DL100 ; 響鈴程序無(wú)效,僅起延時(shí)作用,
            SETB BELL ; 每延時(shí)一段時(shí)間短鳴一聲,以
            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 ; 延時(shí)
            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 ; 否則滅燈延時(shí)
            AJMP PLAY1 ; 轉(zhuǎn)顯示高位數(shù)碼管
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;用來(lái)顯示低位
            PLAYL: ORL P1,#7FH ; 清原顯示數(shù)據(jù)
            ORL P3,#3CH ; 清原選通數(shù)據(jù)
            MOV A,R2 ; 移入數(shù)碼管位選數(shù)
            RL A ; 換一位
            ANL P3,A ; 選通低位的個(gè)位數(shù)碼管
            MOV R2,A ; 暫存位選數(shù)
            MOV A,@R0 ; 移入顯示數(shù)值
            MOV DPTR,#TABLE1 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時(shí)
            INC R0 ; 指向低位的十位數(shù)
            JB P3.3,PLAYL ; 顯示低位的十位數(shù)
            ;
            PLAY1: JNB HPLMOD,PLAYH ; 高兩位數(shù)碼管不閃則"PLAYH"
            JB BRIGHT,PLAYH ; 亮滅指示為1也"PLAYH"
            ACALL NOPLAY ; 否則滅燈延時(shí)
            AJMP OUTPLY ; 轉(zhuǎn)結(jié)束
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;用來(lái)顯示高位
            PLAYH: ORL P1,#7FH ; 清原顯示數(shù)據(jù)
            ORL P3,#3CH ; 清原選通數(shù)據(jù)
            ANL P3,#0EFH ; 選通高位的個(gè)位數(shù)數(shù)碼管
            MOV A,@R0 ; 移入顯示數(shù)值
            MOV DPTR,#TABLE1 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時(shí)
            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 ; 指針?lè)糯螅魻顟B(tài)
            RLC A ;
            MOV DPTR,#TABLE2 ; 移入表首地址
            MOVC A,@A+DPTR ; 查表
            ANL P1,A ; 送顯示數(shù)據(jù)
            ACALL DL1MS ; 延時(shí)
            ;
            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:", "- ", "-:"
            ;
            ;
            ;
            ;**********************
            ; 無(wú)顯示(滅燈)程序 ;
            ;**********************
            NOPLAY: ORL P1,#7FH ; 清顯示數(shù)據(jù)
            ORL P3,#3CH ; 清選通數(shù)據(jù)
            INC R0 ; 指針自增2
            INC R0
            ACALL DL1MS ; 延時(shí)
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;******************
            ; 延時(shí)程序 ;
            ;******************
            DL1MS: MOV R3,#0F9H ; 延時(shí) 1250US 只為DISPLY所調(diào)用
            DL1MS1: NOP
            NOP
            NOP
            DJNZ R3,DL1MS1
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            KEYDLY: CLR BELL ; 按鍵消抖動(dòng)專用延時(shí)程序,
            ACALL DISPLY ; 在消除抖動(dòng)的同時(shí)發(fā)出按鍵提示音
            SETB BELL
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL50MS: MOV R7,#0AH ; 50毫秒延時(shí)程序
            DL50M1: ACALL DISPLY ; 每調(diào)用一次顯示程序5MS
            DJNZ R7,DL50M1 ; 調(diào)用10次
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL100: ACALL DL50MS ; 延時(shí)100毫秒
            ACALL DL50MS
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL05S: ACALL DL100 ; 延時(shí)0.5秒
            ACALL DL100
            ACALL DL100
            ACALL DL100
            ACALL DL100
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            DL1S: ACALL DL05S ; 延時(shí)1秒
            ACALL DL05S
            RET
            NOP
            NOP
            LJMP ERR ; 軟件陷阱
            ;
            ;****************************
            ; ERR(出錯(cuò)處理) 程序 ;
            ;****************************
            ERR: CLR EA ; 關(guān)中斷
            MOV DPTR,#ERR1 ; 準(zhǔn)備返回地址
            PUSH DPL ; 壓棧
            PUSH DPH ;
            RETI ; 中斷返回
            ERR1: MOV 56H,#0AAH ; 建立上電標(biāo)志(出錯(cuò)標(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)鍵詞: 電子定時(shí)器AT89C205

            評(píng)論


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

            關(guān)閉