<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          帶LCD的時間控制器

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

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

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

          ELEC 繼電器
          SPK 蜂鳴器
          Y_LED 繼電器工作指示
          C_LED 被控電器指示燈
          W_LED 計(jì)時工作指示燈
          D_LED 整點(diǎn)報時指示燈

          實(shí)物圖:

          程序代碼:

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

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

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

          HHEQU 36H ; 控制設(shè)置小時變量
          MMEQU 37H ; 控制設(shè)置分鐘變量
          ;-----------------------------
          ; KEY4.....
          K1EQU P2.1 ; 設(shè)置當(dāng)前時間
          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 ; 計(jì)時工作指示燈
          D_LEDEQU P2.5 ; 整點(diǎn)報時指示燈
          ;-----------------------------
          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 ; 清除整點(diǎn)報時標(biāo)志
          SETB D_LED ; 整點(diǎn)報時指示燈關(guān)
          ;-----------------------------
          CLR ALB ; 清除控制標(biāo)志
          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 ; 時間計(jì)時處理
          ; 按鍵掃描............
          JB K1,L1 ; 未按下K1鍵則繼續(xù)掃描
          ; K1.....時間設(shè)置/設(shè)整點(diǎn)報時
          ; K1 : ADJ TIME K2:HOUR K3:MIN K4: OK
          LCALL D_LAY ; 1s延時
          JNB K1,LL ; 按鍵超過1s,則設(shè)整點(diǎn)報時
          LCALL BZ ; LED閃動
          MOV DPTR,#MADJ ; 現(xiàn)實(shí)執(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è)置標(biāo)志取反
          JNB ALB,L31 ; 沒有控制標(biāo)志,則發(fā)音一聲
          ; ALARM ON....................
          CLR C_LED ; 控制指示燈亮
          LCALL BZ ; 有控制標(biāo)志,則蜂鳴器發(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 ; 值整點(diǎn)報時標(biāo)志
          CPL D_LED ; 整點(diǎn)報時指示燈亮
          LCALL DELAY
          JMP LOOP ; 返回
          ;-----------------------------
          LMESS1: DB "Wlecome!",0
          LMESS2: DB " happy! ",0
          ;=============================
          ; 初始化控制變量子程序
          ;=============================
          INIT:
          MOV DEDA,#0 ; 5ms計(jì)數(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開始計(jì)時
          RET
          ;*****************************
          ; 定時器0中斷服務(wù)程序
          ;*****************************
          T0_INT: ; 中斷程序每隔5ms中斷一次
          PUSH ACC ; 累加器放入堆棧
          MOV TL0,#LO ; 加載低字節(jié)
          MOV TH0,#HI ; 加載高字節(jié)
          INC DEDA ; 5ms計(jì)數(shù)值加1
          ; 1 SEC TIME OUT CHECK
          MOV A,DEDA ; 5ms計(jì)數(shù)值
          CJNE A,#CO,TT ; 是否1s到了?
          MOV DEDA,#0 ; DEDA值0

          CPL W_LED ; LED燈亮滅變換
          INC SEC ; 秒計(jì)數(shù)加1
          MOV A,SEC ; 秒數(shù)據(jù)放在累加器里,用于比較
          CJNE A,#60,TT ; 是否到1 min?
          ; 1 MIN TIME OUT
          INC MIN ; 分計(jì)數(shù)加1
          MOV SEC,#0 ; 秒計(jì)數(shù)清除為0
          MOV A,MIN
          CJNE A,#60,TT ; 是否到1 h ?
          ; 1 HOUR TIME OUT
          INC HOUR ; 小時計(jì)數(shù)加1
          MOV MIN,#0 ; 分計(jì)數(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è)置當(dāng)前時間
          ; 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 ; 除法運(yùn)算,結(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 ; 除法運(yùn)算,結(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)換顯示當(dāng)前時間子程序
          ; 時時:分分:秒秒
          ;=============================
          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點(diǎn)陣
          LCALL W_COM
          MOV COM,#06H ; 輸入方式設(shè)置:AC自動加1
          LCALL W_COM
          MOV COM,#0CH ; 顯示開,光標(biāo)關(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è)置計(jì)數(shù)值
          C1: MOV DAT,# ; 載入空格符至LCD
          LCALL W_DAT ; 輸出字符至LCD
          DJNZ R0,C1 ; 計(jì)數(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 ; 計(jì)數(shù)結(jié)束
          RET
          ;****************************
          ; 判斷忙標(biāo)志程序
          ;****************************
          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 ; 判斷忙標(biāo)志
          POP ACC ; 把ACC彈出堆棧
          RET
          ;***************************
          ; 寫命令到LCD程序
          ;***************************
          W_COM: LCALL B_LCD ; 判斷忙標(biāo)志
          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 ; 判斷忙標(biāo)志
          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è)置控制標(biāo)志
          CLR C_LED ; 控制指示燈亮
          LCALL BZ ; 蜂鳴器發(fā)音三聲
          LCALL BZ ;
          LCALL BZ
          RET
          ;============================
          ; 更新時間并檢查控制時間
          ;============================
          TIME_PRO:
          ; UPDATE TIME...........
          MOV A,SEC ; 加載當(dāng)前秒數(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 ; 有啟動標(biāo)志,則比較時間
          JB CLOCK,TI4 ; 有啟動標(biāo)志,則比較時間
          RET
          TI3:
          ; 檢查鬧鐘時間是否到了....
          MOV A,HOUR ; 當(dāng)前小時時間
          MOV B,HH ; 控制小時時間
          CJNE A,B,BK ; 檢查控制小時時間

          MOV A,MIN ; 當(dāng)前分鐘時間
          MOV B,MM ; 控制分鐘時間
          CJNE A,B,BK ; 檢查控制分鐘時間
          ; TIME MATCH.................
          LCALL TIME_OUT ; 到點(diǎn)工作程序
          SJMP BK
          ; 檢查是否為整點(diǎn)
          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
          ;****************************
          ; 到點(diǎn)工作程序
          ;****************************
          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 ; 清除控制標(biāo)志
          SETB C_LED ; 關(guān)閉控制標(biāo)志燈
          RET
          END
          ;-- 結(jié)束 --
          ;---------------------------



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

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();