找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1107|回復(fù): 0
收起左側(cè)

采用實(shí)時(shí)時(shí)鐘芯片DS1302+AT89C2051的紅外遙控LED電子時(shí)鐘 單片機(jī)匯編程序

[復(fù)制鏈接]
ID:1039126 發(fā)表于 2024-5-7 09:57 | 顯示全部樓層 |閱讀模式
;DS1302+AT89C2051的LED鐘電路原理圖如下: 2.png

單片機(jī)源程序如下:
;遙控器各按鍵數(shù)據(jù)碼,可根據(jù)不同的遙控器修改對(duì)應(yīng)的鍵碼
muteM   EQU 10h                 ;靜音鍵            鬧鈴開/關(guān)
timerT  EQU 0Ch                 ;菜單鍵            進(jìn)入/退出設(shè)置狀態(tài)
leftL   EQU 46h                 ;左移鍵      
rightR  EQU 47h                 ;右移鍵
upU     EQU 19h                 ;增加鍵
downD   EQU 1dh                 ;減少鍵
d_off   EQU 16H                 ;顯示鍵            LED數(shù)碼管顯示/關(guān)閉
recall  EQU 44H                 ;日歷鍵            DS1302初始化操作

K_on     BIT P3.0               ;鬧鈴輸出
LED1     BIT P3.3
LED2     BIT P3.4
LED3CLK  BIT P3.5               ;DS1302
LED4IO   BIT P3.7
RST      BIT P3.1

SECOND  EQU 60H
;60H  秒
;61h  分
;62h  時(shí)
;63h  日
;64h  月
;65h  DAY
;66h  年
;6Ah  鬧分    from 00(1302)
;6BH  鬧時(shí)    from 01(1302)
;***************************
        ORG   0000H
        AJMP  START
        ORG   0003H
        LJMP  S_INT            ;IRF
        ORG   000BH            ;200Us
        LJMP  P_INT            ;
        ORG   001BH            ;display LED
        LJMP  DISPLAY
;****************************  ;main program
       ORG    0030H
START: CLR     RST
       MOV SP,#2AH
       SETB    05H
       CLR     06H
       SETB 07H;CLR     07H
       CLR     08H
       CLR     09H
       CLR     0AH
       CLR     0BH
       CLR     0CH
       SETB    0DH
       CLR     0EH
       CLR     0FH
       CLR     10H
       CLR     11H

       MOV R2,#00H             ;
       MOV R3,#00H             ;

       MOV TMOD,#12H
       MOV TL1,#0e5H           ;wait
       MOV TH1,#0BeH
       MOV TH0,#3FH            ;200uS  3f
       MOV TL0,#3FH
       SETB  ET0
       SETB  ET1
       setb  pt0
       SETB  TR0
       SETB  TR1
       SETB  IT0               ;
       SETB  EX0               ;
       CLR   PX0
       ;LCALL SET1302          ;初始化
       MOV   R1,#0C1H          ;取定時(shí)參數(shù)從1302中
       acall T_6061
       MOV   6AH,A             ;M
       MOV   R1,#0C3H
       ACALL T_6061
       MOV   6BH,A             ;H

MOV  61H,#0
MOV  62H,#0
       SETB  EA
       sjmp  $
;********************************
DISPLAY: PUSH  ACC
         PUSH  PSW
         MOV   TL1,#0e0H          ;wait how long to display (20ms)
         MOV   TH1,#0b0H
         mov  dptr,#tab1
         JB    0EH,DIS2
         JB    0FH,DIS3
         JB    10H,DIS4
         JB    11H,DIS5
         JNB    0DH,D_OUT

         JNB   08H,D_GO          ;定時(shí)到時(shí),顯示閃爍
         JNB   07H,D_OUT
D_GO:    MOV   DPTR,#TAB1
         MOV   A,62H
         ANL   A,#0FH
         MOV   B,A
         MOV   A,62H
         SWAP  A
         ANL   A,#07H
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED1
         LCALL DL2M
         SETB  LED1
         MOV   A,B
         MOVC  A,@A+DPTR
                     MOV   C,07H
                     MOV   acc.7,C   ;秒燈閃爍
         MOV   P1,A
         CLR   LED2
         LCALL DL2M
         SETB  LED2

         mov  dptr,#tab2             ;倒裝LED字段表
         MOV   A,61H
         ANL   A,#0FH
         MOV   B,A
         MOV   A,61H
         SWAP  A
         ANL   A,#0FH

         MOVC  A,@A+DPTR

                     MOV   C,07H
                     MOV   acc.6,C   ;秒燈閃爍
         MOV   P1,A
         CLR   LED3CLK
         LCALL DL2M
         SETB  LED3CLK

         mov  dptr,#tab1
         MOV   A,B
         MOVC  A,@A+DPTR
                    MOV   C,06H
                    cpl   c
                    MOV   acc.7,C    ;鬧鈴指示燈
         MOV   P1,A
         CLR   LED4IO
         LCALL DL2M
         SETB  LED4IO
D_OUT:   SETB  TR1
         POP   PSW
         POP   ACC
         RETI
;*********************
DIS2:    AJMP DIS_2
DIS3:    AJMP DIS_3
DIS4:    AJMP DIS_4
DIS5:    AJMP DIS_5
;********************
DIS_2:   mov   dptr,#tab1             ;顯示設(shè)置小時(shí)
         MOV   6FH,62H
         ACALL BCD_HEX
         MOV   B,#10
         DIV   AB
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED1
         LCALL DL2M
         SETB  LED1
         MOV   A,B
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED2
         LCALL DL2M
         SETB  LED2

         SETB  TR1
         POP   PSW
         POP   ACC
         RETI
;*****************
DIS_3:   MOV   DPTR,#TAB2              ;顯示設(shè)置分
         MOV   6FH,61H
         ACALL BCD_HEX
         MOV   B,#10
         DIV   AB
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED3CLK
         LCALL DL2M
         SETB  LED3CLK
         MOV   A,B
         MOV   DPTR,#TAB1
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED4IO
         LCALL DL2M
         SETB  LED4IO

         SETB  TR1
         POP   PSW
         POP   ACC
         RETI
;*****************
DIS_4:   mov    dptr,#tab1           ;顯示設(shè)置鬧時(shí)
         JNB   07H,D4_OUT            ;顯示時(shí)閃爍
         MOV   A,6BH
         MOV   B,#0AH
         DIV   AB
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED1
         LCALL DL2M
         SETB  LED1
         MOV   A,B
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED2
         LCALL DL2M
         SETB  LED2
D4_OUT:  SETB  TR1
         POP   PSW
         POP   ACC
         RETI
;***********************
DIS_5:   MOV   DPTR,#TAB2
         JNB   07H,D5_OUT              ;顯示時(shí)閃爍
         MOV   A,6AH                   ;顯示設(shè)置鬧分
         MOV   B,#0AH
         DIV   AB
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED3CLK
         LCALL DL2M
         SETB  LED3CLK
         MOV   DPTR,#TAB1
         MOV   A,B
         MOVC  A,@A+DPTR
         MOV   P1,A
         CLR   LED4IO
         LCALL DL2M
         SETB  LED4IO
D5_OUT:  SETB  TR1
         POP   PSW
         POP   ACC
         RETI
;*****************************
DL2M:    MOV 43H,#14H           ; every LED(2ms)
DL2:     MOV 44H,#14H
DL1:     NOP
         NOP
         DJNZ 44H,DL1
         DJNZ 43H,DL2
         RET
;************************定時(shí)讀取1302時(shí)間及判斷鬧鈴時(shí)間是否到*******
P_INT:   PUSH  ACC
         PUSH  PSW
         INC   R2
         CJNE  R2,#250D,P_OUT
         MOV   R2,#00H
         INC   R3
         CJNE  R3,#10D,P_OUT
         MOV   R3,#00H
         CPL   07H
         MOV   P1,#0FFH
         ACALL R_1302
OUT:     JNB   06H,P_OUT
         MOV   A,6BH

         MOV   B,#10
         DIV   AB
         SWAP  A
         ADD   A,B

         CJNE  A,62H,PP_OUT
         MOV   A,6AH

         MOV   B,#10
         DIV   AB
         SWAP  A
         ADD   A,B

         CJNE  A,61H,PP_OUT
         SETB  08H               ;定時(shí)到標(biāo)志
         MOV   C,07H
         cpl   c
         MOV   K_ON,C

P_OUT:   POP   PSW
         POP   ACC
         RETI
PP_OUT:  SETB  K_ON
         CLR   08H
         POP   PSW
         POP   ACC
         RETI
;************************有接收到遙控器信號(hào)*******
S_INT:CLR EA
      PUSH   ACC
      PUSH   PSW
      PUSH   DPH
      PUSH   DPL
      PUSH   02H
      PUSH   03H
      MOV    R6,#10D   ;
SB:   ACALL  YS1
      JB     P3.2,EXIT
      DJNZ   R6, SB
      JNB    P3.2, $   ;
      ACALL  YS2       ;
      JB     P3.2,EXIT
      MOV    R1,#1AH   ;
      MOV    R2,#4D
PP:   MOV    R3,#8D
JJJJ: JNB    P3.2,$
      ACALL  YS1
      MOV    C,P3.2
      JNC    UUU
      JB     P3.2,$
UUU:  MOV    A,@R1
      RRC    A
      MOV    @R1,A
      DJNZ   R3,JJJJ
      INC    R1
      DJNZ   R2,PP
;-------------------------------------
      MOV  A,1AH      ;
      XRL  A,#40h     ;判斷1AH的值是否等于遙控器低8位地址(40h)
      JNZ  EXIT       ;
      MOV  A,1bH
      XRL  A,#0bfh    ;再判斷高8位地址是否正確(0bfh)
      JNZ  EXIT
      MOV  A,1CH
      CPL  A
      XRL  A,1DH      ;將1CH的值取反后和1DH比較 不同則無(wú)效丟棄(核對(duì)數(shù)據(jù)是否準(zhǔn)確)
      JNZ  EXIT
      ACALL DO        ;相應(yīng)按鍵的處理
EXIT: SETB EA
      POP  03H
      POP  02H
      POP  DPL
      POP  DPH
      POP  PSW
      POP  ACC
      RETI
;--------------------delay-----------------------
YS1:  MOV    70H,#16D   ;延時(shí)1
D1:   MOV    71H,#21D
      DJNZ   71H,$
      DJNZ   70H,D1
      RET
YS2:  MOV    70H,#09D   ;延時(shí)2
D2:   MOV    71H,#220D
      DJNZ   71H,$
      DJNZ   70H,D2
      RET
;---------------------------------------------------------
TAB:   DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H      ;TAB1  LED數(shù)碼管顯示表 TAB遙控器鍵值表(未用)
;TAB1:  DB 3FH,11H,5EH,5BH,71H,6BH,6FH,19H,7FH,7bH,77H,7CH,39H,5EH,79H,71H
tab1:  DB  0C0H,0F9H,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0a7h,0a1h,86h,8EH
TAB2:  DB  0c0H,0f9H,64H,70H,59H,52H,42H  ;倒裝LED段碼表
;0CH 為設(shè)置標(biāo)志,0DH為全顯示標(biāo)志,0EH為顯示設(shè)置小時(shí)標(biāo)志,0FH為顯示設(shè)置分標(biāo)志
;10H 為顯示設(shè)置鬧時(shí)標(biāo)志,11H為顯示設(shè)置鬧分標(biāo)志
;增加鬧時(shí)靜音功能
;mute-10h,timer-0eh,left-46h,right-47h,up-19h,down-1dh

DO:     MOV     A,1CH
        CJNE    A,#TIMERT,REDO  ;代碼不是設(shè)置/退出鍵
        JNB     0CH,SET1        ;是,則進(jìn)入
        CLR     0CH             ;是,已經(jīng)進(jìn)入,則退出
        SETB    0DH             ;恢復(fù)正常顯示
        CLR     0EH
        CLR     0FH
        CLR     10H
        CLR     11H
        RET

SET1:   SETB    0CH
        SETB    0EH
        CLR     0DH
        CLR     0FH
        CLR     10H
        CLR     11H
        RET

REDO:   CJNE    A,#MUTEM,REDO1  ;不是設(shè)置鍵的處理REDO1,2,3,4...
        LJMP    MUTE            ;MUTE?
REDO1:  CJNE    A,#D_OFF,DO_SET2
        LJMP    DIS_OFF         ;關(guān)閉顯示
DO_SET2:JB      0CH,SET2        ;時(shí)間設(shè)置的處理
        RET

SET2:   CJNE    A,#UPU,SET2A
        LJMP    INC1            ;+加(^)
SET2A:  CJNE    A,#DOWND,SET2B
        LJMP    DEC2            ;- 減
SET2B:  CJNE    A,#RIGHTR,SET2C
        LJMP    RIGHT           ;RIGHT右移(>)
SET2C:  CJNE    A,#LEFTL,SET2D
        LJMP    LEFT            ;LEFT左移(<)
SET2D:  CJNE    A,#RECALL,SET2EXT ;DS1302初始化
        LJMP    SET1302
SET2EXT:RET
;--------------------------------INC------------------------
INC1:   JB      0EH,INCH
        JB      0FH,INCM
        JB      10H,INC_H
        JB      11H,INC_M
        RET

INC_H:  INC     6BH               ;鬧鐘小時(shí)增加
        MOV     A,6BH
        CJNE    A,#24D,INCH3
        MOV     6BH,#0
INCH3:  MOV     R1,#0C2H
        MOV     R0,6BH
        ACALL   SETONE            ;寫入DS1302
        RET

INC_M:  INC     6AH               ;鬧鐘分增加
        MOV     A,6AH
        CJNE    A,#60D,INCH4
        MOV     6AH,#0
INCH4:  MOV     R1,#0C0H
        MOV     R0,6AH
        ACALL   SETONE             ;
        RET

INCH:   ;INC     62H               ;
        MOV     6FH,62H
        ACALL   BCD_HEX
        INC     A
        CJNE    A,#24D,INCH1
        MOV     A,#0
INCH1:  MOV     6FH,A
紅外DS1302 AT89C2051的LED鐘.png

PCB.zip

17.78 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

需要用Protel99打開的原理圖

ASM.zip

4 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5

匯編語(yǔ)言程序

評(píng)分

參與人數(shù) 2黑幣 +65 收起 理由
tlczd + 15 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表