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

            新聞中心

            帶LCD的時間控制器

            作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
            說明:

            本帶LCD時間控制器,是在本人畢業(yè)時間《基于單片機的時間控制器的設(shè)計》的基礎(chǔ)上進行修改的。
            使得時間的控制和修改更容易,更直觀。并擴展了紅外遙控的功能,但由于條件限制,并沒有把此功能
            的程序加上。
            按鍵說明:
            K1 設(shè)置當前時間/按鍵超過1s,則置整點報時標志
            K2 顯示控制時間/小時加
            K3 設(shè)置控制時間/分鐘加
            K4 控制ON/OFF設(shè)置/確定
            K5 控制開/關(guān)

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

            ELEC 繼電器
            SPK 蜂鳴器
            Y_LED 繼電器工作指示
            C_LED 被控電器指示燈
            W_LED 計時工作指示燈
            D_LED 整點報時指示燈

            實物圖:

            程序代碼:

            ;=============================

            ; 帶LCD的時間控制器
            ; DIPS082-LCD
            ; KS0066-控制器

            ;=============================
            LOEQU 24 ; 加載低字節(jié)
            HIEQU 99 ; 加載高字節(jié)
            ;-----------------------------
            COEQU 200 ; 5ms中斷計數(shù)時間常數(shù)
            ; 計數(shù)200次表示1s
            ALBEQU 20H.0 ; 控制設(shè)置標志
            CLOCK EQU 20H.1 ; 整點報時標志
            HOUREQU 30H ; 存放小時變量
            MINEQU 31H ; 存放分鐘變量
            SECEQU 32H ; 存放秒鐘變量
            DEDAEQU 33H ; 5ms計數(shù)值
            SEC0EQU 34H ; 存放舊的秒數(shù)
            ;-----------------------------
            DDRAMEQU 35H ; LCD地址變量
            COM EQU 22H ; LCD指令寄存器
            DAT EQU 21H ; LCD數(shù)據(jù)寄存器
            COUNT EQU 22H ; 計數(shù)器

            HHEQU 36H ; 控制設(shè)置小時變量
            MMEQU 37H ; 控制設(shè)置分鐘變量
            ;-----------------------------
            ; KEY4.....
            K1EQU P2.1 ; 設(shè)置當前時間
            K2EQU P2.0 ; 顯示控制時間/小時加
            K3EQU P3.6 ; 設(shè)置控制時間/分鐘加
            K4EQU P3.7 ; 控制ON/OFF設(shè)置/確定
            K5 EQU P3.1 ; 控制開/關(guān)
            ;-----------------------------
            ; LCD .....
            RSEQU P3.4 ; 寄存器選擇
            RWEQU P3.5 ; 讀寫控制
            E EQU P3.3 ; LCD使能
            ;-----------------------------
            ELEC EQU P3.0 ; 繼電器
            SPKEQU P2.2 ; 蜂鳴器
            Y_LED EQU P2.6 ; 繼電器工作指示
            C_LEDEQU P2.4 ; 被控電器指示燈
            W_LEDEQU P2.3 ; 計時工作指示燈
            D_LEDEQU P2.5 ; 整點報時指示燈
            ;-----------------------------
            ORG 0000H ; 程序代碼由地址0
            JMP START ; 跳至主函數(shù)開始執(zhí)行
            ORG 000BH ; 定時器TIMER0中斷地址
            JMP T0_INT ; 跳至TIMER0中斷啟始地址
            ;#############################

            ; 主程序

            ;#############################
            START:
            CLR Y_LED ; 繼電器工作指示關(guān)
            CLR ELEC ; 繼電器關(guān)
            CLR CLOCK ; 清除整點報時標志
            SETB D_LED ; 整點報時指示燈關(guān)
            ;-----------------------------
            CLR ALB ; 清除控制標志
            MOV HH,#0 ; 內(nèi)定的控制時間為--00:00
            MOV MM,#0

            LCALL SET_LCD ; LCD初始化
            LCALL BZ ; 蜂鳴器連續(xù)兩次發(fā)音
            LCALL BZ
            LCALL LED_BL ; LED閃動,表示工作開始

            LCALL INIT ; 初始化變量
            LCALL INIT_TIMER ; 初始化定時器
            LCALL MENU ;
            ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

            ; 循環(huán)程序

            ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            LOOP:
            LCALL TIME_PRO ; 時間計時處理
            ; 按鍵掃描............
            JB K1,L1 ; 未按下K1鍵則繼續(xù)掃描
            ; K1.....時間設(shè)置/設(shè)整點報時
            ; K1 : ADJ TIME K2:HOUR K3:MIN K4: OK
            LCALL D_LAY ; 1s延時
            JNB K1,LL ; 按鍵超過1s,則設(shè)整點報時
            LCALL BZ ; LED閃動
            MOV DPTR,#MADJ ; 現(xiàn)實執(zhí)行消息
            MOV A,#1 ;
            LCALL LCD_PRINT ; 在LCD顯示字符
            LCALL SET_TIME ; 設(shè)置目前時間
            LCALL MENU ; 菜單
            JMP LOOP ; 繼續(xù)循環(huán)
            ;.............................
            L1:JB K2,L2 ; 未按下K2鍵則繼續(xù)掃描
            ; K2............控制時間顯示
            JNB K2,$ ; 等待K2鍵釋放
            LCALL BZ ; 蜂鳴器發(fā)音
            MOV DPTR,#MLAL ; 顯示控制消息
            MOV A,#1 ;
            LCALL LCD_PRINT ; 在LCD顯示字符
            LCALL LOOK_ATIME ; 查看控制時間
            LCALL DELAY ; 延時
            LCALL LED_BL ; 工作LED閃動
            LCALL LED_BL ;
            LCALL MENU ; 菜單
            JMP LOOP ; 繼續(xù)循環(huán)
            ;.............................
            L2:JB K3,L3 ; 未按下K3鍵則繼續(xù)掃描
            ; K3.....控制時間設(shè)置
            ; K3 : ADJ ATIME K2:HOUR K3:MIN K4: OK
            JNB K3,$ ; 等待K3鍵釋放
            LCALL BZ ; 蜂鳴器發(fā)音
            MOV DPTR,#MAADJ ; 顯示控制消息
            MOV A,#1 ;
            LCALL LCD_PRINT ; 在LCD顯示字符
            LCALL SET_ATIME ; 控制時間設(shè)置
            LCALL LED_BL ; 工作LED閃動
            LCALL LED_BL
            LCALL MENU ; 菜單
            JMP LOOP ; 繼續(xù)循環(huán)
            LL: SJMP L6
            ;.............................
            L3:JB K4,L4 ; 未按下K4鍵則繼續(xù)掃描
            ; K4.......控制開關(guān)/確定
            JNB K4,$ ; 等待K4鍵釋放
            CPL ALB ; 控制設(shè)置標志取反
            JNB ALB,L31 ; 沒有控制標志,則發(fā)音一聲
            ; ALARM ON....................
            CLR C_LED ; 控制指示燈亮
            LCALL BZ ; 有控制標志,則蜂鳴器發(fā)音三聲
            LCALL BZ
            LCALL BZ
            JMP LOOP ; 返回
            L31:
            ; ALARM OFF...................
            SETB C_LED ; 控制指示燈滅
            LCALL BZ ; 蜂鳴器發(fā)音一聲
            JMP LOOP ; 返回
            ;.............................
            L4: JB K5,L5 ; 未按下K4鍵則繼續(xù)掃描
            ;K5.........電器控制開/關(guān)
            JNB K5,$ ; 等待K5鍵釋放
            CPL Y_LED ; LED取反
            CPL ELEC
            LCALL BZ ; 蜂鳴器發(fā)音一聲
            L5: JMP LOOP ; 返回
            L6: CPL CLOCK ; 值整點報時標志
            CPL D_LED ; 整點報時指示燈亮
            LCALL DELAY
            JMP LOOP ; 返回
            ;-----------------------------
            LMESS1: DB "Wlecome!",0
            LMESS2: DB " happy! ",0
            ;=============================
            ; 初始化控制變量子程序
            ;=============================
            INIT:
            MOV DEDA,#0 ; 5ms計數(shù)值清除為0
            MOV SEC0,#0 ; 舊的秒數(shù)清除為0
            MOV SEC,#0 ; 秒鐘變量清除為0
            MOV MIN,#0 ; 分鐘變量清除為0
            MOV HOUR,#1 ; 小時變量清除為1
            RET ; 子程序返回
            ;=============================
            ;初始化定時器接口子程序
            ;=============================
            INIT_TIMER:
            MOV TMOD,#00000000B ; 設(shè)置定時器T0工作方式為方式0
            MOV IE, #10000010B ;
            MOV TL0,#LO ; 加載低字節(jié)
            MOV TH0,#HI ; 加載高字節(jié)
            SETB TR0 ; 啟動定時器T0開始計時
            RET
            ;*****************************
            ; 定時器0中斷服務(wù)程序
            ;*****************************
            T0_INT: ; 中斷程序每隔5ms中斷一次
            PUSH ACC ; 累加器放入堆棧
            MOV TL0,#LO ; 加載低字節(jié)
            MOV TH0,#HI ; 加載高字節(jié)
            INC DEDA ; 5ms計數(shù)值加1
            ; 1 SEC TIME OUT CHECK
            MOV A,DEDA ; 5ms計數(shù)值
            CJNE A,#CO,TT ; 是否1s到了?
            MOV DEDA,#0 ; DEDA值0

            CPL W_LED ; LED燈亮滅變換
            INC SEC ; 秒計數(shù)加1
            MOV A,SEC ; 秒數(shù)據(jù)放在累加器里,用于比較
            CJNE A,#60,TT ; 是否到1 min?
            ; 1 MIN TIME OUT
            INC MIN ; 分計數(shù)加1
            MOV SEC,#0 ; 秒計數(shù)清除為0
            MOV A,MIN
            CJNE A,#60,TT ; 是否到1 h ?
            ; 1 HOUR TIME OUT
            INC HOUR ; 小時計數(shù)加1
            MOV MIN,#0 ; 分計數(shù)清除為0
            MOV A,HOUR
            CJNE A,#24,TT ; 是否24 h到了?
            MOV SEC,#0 ; 秒鐘變量清0
            MOV MIN,#0 ; 分鐘變量清0
            MOV HOUR,#0 ; 小時變量清0
            TT:
            POP ACC ; 將累加器由堆棧取出
            RETI ; 中斷返回
            ;=============================
            ; 設(shè)置當前時間
            ; K2:HH K3:MM K4:OK
            ;=============================
            ; K2:HH K3:MMK4:OK
            SET_TIME:
            CLR TR0 ; 關(guān)定時器0
            MOV SEC,#0 ; 秒鐘變量清0
            ; SCAN 3 KEY TO ADJ...........
            S0:
            JB K2,S1 ; 未按下K2鍵則繼續(xù)掃描
            ; 小時調(diào)整
            LCALL BZ ; 蜂鳴器發(fā)音一聲
            INC HOUR ; 小時加1
            MOV A,HOUR ; 小時值放在累加器中,用于比較
            CJNE A,#24,S11 ; 是否24 h到了?
            MOV HOUR,#0 ; 小時變量清0
            S11:
            LCALL CONV ; 轉(zhuǎn)換LCD顯示數(shù)據(jù)
            MOV R5,#20 ;
            LCALL DELAY ; 延時
            JMP S0 ; 繼續(xù)程序執(zhí)行
            ;....................
            S1:JB K3,S2 ; 未按下K3鍵則繼續(xù)掃描
            ; 分鐘調(diào)整
            LCALL BZ ; 蜂鳴器發(fā)音一聲
            INC MIN ; 分鐘加1
            MOV A, MIN ; 分鐘值放在累加器中,用于比較
            CJNE A,#60,S21 ; 是否60 min到了?
            MOV MIN,#0 ; 分鐘變量清0
            S21:
            LCALL CONV ; 轉(zhuǎn)換LCD顯示數(shù)據(jù)
            MOV R5,#20 ; 20*10ms
            LCALL DELAY ; 延時
            JMP S0 ; 繼續(xù)程序執(zhí)行

            ;.....................
            S2:JB K4,S0 ; 未按下K4鍵則繼續(xù)掃描
            JNB K4,$ ; 有鍵按下則等待放開
            ; K4 KEYED OK ..........
            LCALL BZ ; 設(shè)置完成,蜂鳴器發(fā)音兩聲
            LCALL BZ ;
            SETB TR0 ; 啟動定時器
            RET
            ;=============================
            ; LCD第一行顯示程序
            ;=============================
            ; A:DIG X: LCD X POS
            ; SHOW ON LCD LINE1
            SHOW_DIG:
            MOV B,#10 ; 設(shè)置被除數(shù)
            DIV AB ; 除法運算,結(jié)果A存商數(shù),B存余數(shù)
            ADD A,#30H ; A為十位數(shù),轉(zhuǎn)換為字符
            PUSH B ; B放入堆棧暫存起來
            MOV B,DDRAM ; 設(shè)置LCD顯示的位置
            LCALL LCDP1 ; 由LCD顯示出來

            POP B ; B由堆棧取出來
            MOV A,B ; B為個位數(shù)
            ADD A,#30H ; 轉(zhuǎn)換為字符
            INC DDRAM ; LCD顯示位置加1
            MOV B,DDRAM ; 設(shè)置LCD顯示位置
            LCALL LCDP1 ; 由LCD顯示出來
            RET
            ;=============================
            ; LCD第二行顯示程序
            ;=============================
            ; A:DIG X: LCD X POS
            ; SHOW ON LCD LINE2
            SHOW_DIG2:
            MOV B,#10 ; 設(shè)置被除數(shù)
            DIV AB ; 除法運算,結(jié)果A存商數(shù),B存余數(shù)
            ADD A,#30H ; A為十位數(shù),轉(zhuǎn)換為字符
            PUSH B ; B放入堆棧暫存起來
            MOV B,DDRAM ; 設(shè)置LCD顯示的位置
            LCALL LCDP2 ; 由LCD顯示出來

            POP B ; B由堆棧取出來
            MOV A,B ; B為個位數(shù)
            ADD A,#30H ; 轉(zhuǎn)換為字符
            INC DDRAM ; LCD顯示位置加1
            MOV B,DDRAM ; 設(shè)置LCD顯示位置
            LCALL LCDP2 ; 由LCD顯示出來
            RET
            ;=============================
            ; 轉(zhuǎn)換顯示當前時間子程序
            ; 時時:分分:秒秒
            ;=============================
            CONV:
            ; SHOW HOUR...............顯示小時數(shù)據(jù)
            MOV A,HOUR ; 小時數(shù)據(jù)放在A中
            MOV DDRAM,#0 ; 設(shè)置要顯示的地址
            LCALL SHOW_DIG2 ; 在第二行顯示
            INC DDRAM ; 顯示地址加1
            MOV A,#: ; 加載" : "
            MOV B,DDRAM ; LCD顯示地址放入B中
            LCALL LCDP2 ; LCD第二行顯示程序
            ; SHOW MIN...............顯示分鐘數(shù)據(jù)
            MOV A,MIN ; 分鐘數(shù)據(jù)放在A中
            INC DDRAM ; 顯示地址加1
            LCALL SHOW_DIG2 ; 在第二行顯示
            INC DDRAM ; 顯示地址加1
            MOV A,#: ; 加載" : "
            MOV B,DDRAM ; LCD顯示地址放入B中
            LCALL LCDP2 ; LCD第二行顯示程序
            ; SHOW SEC...............顯示秒鐘數(shù)據(jù)
            MOV A,SEC ; 秒鐘數(shù)據(jù)放在A中
            INC DDRAM ; 顯示地址加1
            LCALL SHOW_DIG2 ; 在第二行顯示
            RET
            ;****************************
            ; LCD初始化設(shè)置程序
            ; 并測試
            ;****************************
            SET_LCD:
            LCALL INIT_LCD ; 初始化LCD

            MOV R5,#10 ; 10*10ms
            LCALL DELAY ; 延遲一下

            MOV DPTR,#LMESS1 ; 指針指在顯示消息1
            MOV A,#1 ; 顯示在第一行上
            LCALL LCD_PRINT ; 顯示執(zhí)行消息1于LCD第一行

            MOV DPTR,#LMESS2 ; 指針指在顯示消息2
            MOV A,#2 ; 顯示在第二行上
            LCALL LCD_PRINT ; 顯示執(zhí)行消息2于LCD第二行
            RET
            ;****************************
            ; LCD控制指令初始化設(shè)置
            ;****************************
            INIT_LCD:
            MOV COM,#38H ; 雙行顯示,8位數(shù)據(jù),5X8點陣
            LCALL W_COM
            MOV COM,#06H ; 輸入方式設(shè)置:AC自動加1
            LCALL W_COM
            MOV COM,#0CH ; 顯示開,光標關(guān)
            LCALL W_COM
            MOV COM,#01H ; 清LCD顯示屏
            LCALL W_COM
            RET
            ;****************************
            ; 清出LCD的第一行字符
            ;****************************
            CLR_LINE1:
            MOV COM,#80H ; 設(shè)置第一行地址
            LCALL W_COM ; 寫入地址
            MOV R0,#8 ; 設(shè)置計數(shù)值
            C1: MOV DAT,# ; 載入空格符至LCD
            LCALL W_DAT ; 輸出字符至LCD
            DJNZ R0,C1 ; 計數(shù)結(jié)束
            RET
            ;****************************
            ; 在LCD顯示字符
            ;****************************
            ; A=LINE 1 OR 2
            ; DPTR = MESSAGE POINTER
            LCD_PRINT:
            CJNE A,#1,LINE2 ; 判斷是否為第一行
            LINE1:MOV COM,#80H ; 設(shè)置LCD的第一行地址
            LCALL W_COM ; 寫入命令
            LCALL CLR_LINE ; 清除該行字符數(shù)據(jù)
            MOV COM,#80H ; 設(shè)置LCD的第一行地址
            LCALL W_COM ; 寫入命令
            JMP FILL ; 填入字符

            LINE2:MOV COM,#0C0H ; 設(shè)置LCD的第二行地址
            LCALL W_COM ; 寫入命令
            LCALL CLR_LINE ; 清除該行字符數(shù)據(jù)
            MOV COM,#0C0H ; 設(shè)置LCD的第二行地址
            LCALL W_COM ; 寫入命令
            FILL:
            CLR A ; A清零
            MOVC A,@A+DPTR ; 由消息區(qū)取出字符
            CJNE A,#0,LC1 ; 判斷是否為結(jié)束碼
            RET
            LC1:
            MOV DAT,A ; 將數(shù)據(jù)放入LCD數(shù)據(jù)寄存器
            LCALL W_DAT ; 寫入數(shù)據(jù)
            INC DPTR ; 指針加 1
            JMP FILL ; 繼續(xù)填入字符
            RET
            ;****************************
            ; LCD清出顯示
            ;****************************
            CLR_LINE:
            MOV R0,#8 ; 設(shè)置個數(shù)
            CL1: MOV DAT,# ; 載入空格符至LCD
            LCALL W_DAT ; 輸出字符至LCD
            DJNZ R0,CL1 ; 計數(shù)結(jié)束
            RET
            ;****************************
            ; 判斷忙標志程序
            ;****************************
            B_LCD: PUSH ACC ; 把ACC壓入堆棧
            CLR RS ; RS=1
            SETB RW ; RW=1
            B_LCD1: MOV P1,#0FFH ; P1口置"1"
            SETB E ; E =1
            MOV A,P1 ; 從P1口讀出數(shù)據(jù)
            NOP ; 空操作
            CLR E ; E =0
            JB ACC.7,B_LCD1 ; 判斷忙標志
            POP ACC ; 把ACC彈出堆棧
            RET
            ;***************************
            ; 寫命令到LCD程序
            ;***************************
            W_COM: LCALL B_LCD ; 判斷忙標志
            CLR RS ; RS=0
            CLR RW ; RW=0
            SETB E ; E =1
            MOV P1,COM ; 寫入指令到P1口
            CLR E ; E =0
            RET
            ;***************************
            ; 寫數(shù)據(jù)到LCD程序
            ;***************************
            W_DAT: LCALL B_LCD ; 判斷忙標志
            SETB RS ; RS=1
            CLR RW ; RW=0
            SETB E ; E =1
            MOV P1,DAT ; 寫入數(shù)據(jù)
            CLR E ; E =0
            RET
            ;============================
            ; LCD第一行顯示程序
            ;============================
            LCDP1:
            ; LINE 1
            PUSH ACC ; 將A放入堆棧
            MOV A,B ; 設(shè)置顯示地址
            ADD A,#80H ; 設(shè)置LCD的第一行地址
            MOV COM,A ; 把地址放入指令寄存器
            LCALL W_COM ; 寫入命令
            POP ACC ; 由堆棧中取出A
            MOV DAT,A ; 把數(shù)據(jù)放入數(shù)據(jù)寄存器
            LCALL W_DAT ; 寫入數(shù)據(jù)
            RET
            ;============================
            ; LCD第二行顯示程序
            ;============================
            LCDP2:
            ; LINE 1
            PUSH ACC ; 將A放入堆棧
            MOV A,B ; 設(shè)置顯示地址
            ADD A,#0C0H ; 設(shè)置LCD的第二行地址
            MOV COM,A ; 把地址放入指令寄存器
            LCALL W_COM ; 寫入命令
            POP ACC ; 由堆棧中取出 A
            MOV DAT,A ; 把數(shù)據(jù)放入數(shù)據(jù)寄存器
            LCALL W_DAT ; 寫入數(shù)據(jù)
            RET
            ;****************************
            ; 延時程序
            ;****************************
            ; 總延遲 R5*10 ms
            DELAY:
            MOV R6,#50 ; R6存入50
            D1:MOV R7,#100 ; R7存入100
            DJNZ R7,$ ; R7不為零,則繼續(xù)
            DJNZ R6,D1 ; R6不為零,則繼續(xù)
            DJNZ R5,DELAY ; R5不為零,則繼續(xù)
            RET
            ; 1s 延時
            D_LAY: MOV R5,#100
            LCALL DELAY
            RET
            ;****************************
            ; 工作LED閃動程序
            ;****************************
            LED_BL:
            MOV R4,#4 ; R4存入4
            LE0:CPL W_LED ; 位反向
            MOV R5,#10 ; 延遲 100 ms
            LCALL DELAY ; 延時
            DJNZ R4, LE0 ;
            RET
            ;;***************************
            ; 菜單程序
            ;****************************
            MMENU:DB "Now_Time",0 ; 正常走時第一顯示
            MADJ:DB "2H 3M 4K",0 ; 調(diào)時時第二顯示
            MLAL:DB "CtrlTime",0 ; 查看控制時間時第一顯示
            MAADJ:DB "2H 3M 4K",0 ; 調(diào)時時第二顯示

            MENU: ;LCD顯示菜單
            MOV DPTR,#MMENU ; 存入菜單地址
            MOV A,#1 ;
            LCALL LCD_PRINT ; 在LCD顯示字符
            RET
            ;****************************
            ; 發(fā)音程序
            ;****************************
            BZ:
            MOV R6,#0 ; R6值零
            B1:LCALL DEX ; 短暫延遲
            CPL SPK ; 蜂鳴器取反
            DJNZ R6,B1 ;

            MOV R5,#10 ; 10*10ms
            LCALL DELAY ; 延時
            RET
            ;--------------------
            DEX:MOV R7,#180 ; 短暫延遲
            DE1:NOP ; 空操作
            DJNZ R7,DE1 ;
            RET
            ;============================
            ; 查看已設(shè)置的控制時間
            ;============================
            LOOK_ATIME:
            ; 顯示小時數(shù)...............
            MOV A,HH ; 調(diào)小時數(shù)據(jù)
            MOV DDRAM,#0 ; 設(shè)置顯示地址
            LCALL SHOW_DIG2 ; 在第二行顯示
            INC DDRAM ; 顯示地址加 1
            MOV A,#: ; 加載" : "
            MOV B,DDRAM ; LCD顯示地址放入B中
            LCALL LCDP2 ; LCD第二行顯示
            ; 顯示分鐘數(shù)...............
            MOV A,MM ; 調(diào)小時數(shù)據(jù)
            INC DDRAM ; 顯示地址加 1
            LCALL SHOW_DIG2 ; 在第二行顯示
            INC DDRAM ; 顯示地址加 1
            MOV A,#: ; 加載" : "
            MOV B,DDRAM ; LCD顯示地址放入B中
            LCALL LCDP2 ; LCD第二行顯示
            ; 顯示秒鐘數(shù)...............
            MOV A,#0 ; 設(shè)置秒為 00
            INC DDRAM ; 顯示地址加 1
            LCALL SHOW_DIG2 ; 在第二行顯示
            RET
            ;============================
            ; 設(shè)置控制時間
            ; K2:HH K3:MM K4:OK
            ;============================
            ; K2:HH K3:MMK4:OK
            SET_ATIME:
            LCALL LOOK_ATIME ; 加載控制時間數(shù)據(jù)
            ; SCAN 3 KEY TO ADJ.........
            AS0:
            JB K2,AS1 ; 未按下K2鍵則繼續(xù)掃描
            ; K2......... 調(diào)整小時
            LCALL BZ ; 蜂鳴器響一聲
            INC HH ; 小時加1
            MOV A, HH ; 小時值放在累加器中,用于比較
            CJNE A,#24,AS11 ; 是否到24h?
            MOV HH,#0 ; 小時清0
            AS11:
            LCALL LOOK_ATIME ; 加載控制時間數(shù)據(jù)
            MOV R5,#20 ; 20*10ms
            LCALL DELAY ; 延時
            JMP AS0 ; 繼續(xù)按鍵掃描
            ;....................
            AS1:JB K3,AS2 ; 未按下K2鍵則繼續(xù)掃描
            ; K3........ 分鐘調(diào)整
            LCALL BZ ; 蜂鳴器響一聲
            INC MM ; 分鐘加1
            MOV A,MM ;
            CJNE A,#60,AS21 ; 是否到 60 min ?
            MOV MM,#0 ; 分鐘數(shù)清0
            AS21:
            LCALL LOOK_ATIME ; 加載控制時間數(shù)據(jù)
            MOV R5,#20 ; 20*10ms
            LCALL DELAY ; 延時
            JMP AS0 ; 繼續(xù)按鍵掃描
            ;.....................
            AS2:JB K4,AS0 ; 未按下K4鍵則繼續(xù)掃描
            ; K4........ 設(shè)置完成
            JNB K4,$ ; 等K4鍵放開
            SETB ALB ; 設(shè)置控制標志
            CLR C_LED ; 控制指示燈亮
            LCALL BZ ; 蜂鳴器發(fā)音三聲
            LCALL BZ ;
            LCALL BZ
            RET
            ;============================
            ; 更新時間并檢查控制時間
            ;============================
            TIME_PRO:
            ; UPDATE TIME...........
            MOV A,SEC ; 加載當前秒數(shù)
            MOV B,SEC0 ; 載入舊秒數(shù)
            CJNE A,B,TI1 ; 是否過了1 s ?
            JMP TI2 ; 檢查是否啟動控制器
            TI1:LCALL CONV ; LCD顯示時間數(shù)據(jù)
            MOV SEC0,SEC ; 記錄舊的秒數(shù)
            TI2:
            ; 檢查是否啟動控制器
            JB ALB,TI3 ; 有啟動標志,則比較時間
            JB CLOCK,TI4 ; 有啟動標志,則比較時間
            RET
            TI3:
            ; 檢查鬧鐘時間是否到了....
            MOV A,HOUR ; 當前小時時間
            MOV B,HH ; 控制小時時間
            CJNE A,B,BK ; 檢查控制小時時間

            MOV A,MIN ; 當前分鐘時間
            MOV B,MM ; 控制分鐘時間
            CJNE A,B,BK ; 檢查控制分鐘時間
            ; TIME MATCH.................
            LCALL TIME_OUT ; 到點工作程序
            SJMP BK
            ; 檢查是否為整點
            TI4:
            MOV A,SEC
            CJNE A,#0,BK ; 秒是否為0?
            MOV A,MIN ; 分是否為0?
            CJNE A,#0,BK
            MOV A,HOUR
            TI40: LCALL BZ ; 多少時間就發(fā)音多少次
            DEC A
            MOV R5,#40
            LCALL DELAY
            CJNE A,#0,TI40
            LCALL LED_BL ; W_LED閃爍
            CPL CLOCK
            CPL D_LED
            BK:
            RET
            ;****************************
            ; 到點工作程序
            ;****************************
            TIME_OUT:
            CPL Y_LED ; 繼電器
            CPL ELEC ; 被控制器件
            M1:LCALL LED_BL ; 工作燈閃爍
            LCALL BZ ; 蜂鳴器發(fā)音
            ; K4..........停止
            JB K4,M1 ; 未按下K4鍵則繼續(xù)掃描
            JNB K4,$ ; 等待K4鍵釋放
            NOP
            NOP
            LCALL LED_BL ; 工作燈閃爍
            CLR ALB ; 清除控制標志
            SETB C_LED ; 關(guān)閉控制標志燈
            RET
            END
            ;-- 結(jié)束 --
            ;---------------------------



            關(guān)鍵詞: LCD時間控制

            評論


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

            關(guān)閉