久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8120|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

AT89C2051+DS1302的紅外遙控電子鐘匯編程序 加了高位滅0功能

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:75926 發(fā)表于 2015-4-3 01:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
;DS1302+AT89C2051的LED鐘的電路圖:
下面是匯編語(yǔ)言源程序:
;遙控器各按鍵數(shù)據(jù)碼,可根據(jù)不同的遙控器修改對(duì)應(yīng)的鍵碼
muteM   EQU 10h                 ;靜音鍵            鬧鈴開(kāi)/關(guān)
timerT  EQU 5ch                 ;菜單鍵            進(jìn)入/退出設(shè)置狀態(tài)
leftL   EQU 5fh                 ;左移鍵
rightR  EQU 5bh                 ;右移鍵
upU     EQU 56h                 ;增加鍵
downD   EQU 57h                 ;減少鍵
d_off   EQU 16H                 ;顯示鍵            LED數(shù)碼管顯示/關(guān)閉
recall  EQU 44H                 ;日歷鍵            DS1302初始化操作
K_on     BIT P3.1               ;鬧鈴輸出
LED1     BIT P3.3
LED2     BIT P3.4
LED3CLK  BIT P3.5               ;DS1302
LED4IO   BIT P3.7
RST      BIT P3.0
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 how long to display (20ms)
       MOV TH1,#0BeH
       MOV TH0,#3FH            ;200uS  3f
       MOV TL0,#3FH
       SETB  ET0
       SETB  ET1
       setb  pt0
       SETB  TR0
       SETB  TR1
       SETB  IT0               ;設(shè)定INT0觸發(fā)方式
       SETB  EX0               ;INT0請(qǐng)求中斷
       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
         JNZ  MIE       ;判斷累加器為零嗎?         
         MOV A,#0AH      ;累加器為零則就加入滅0功能
  MIE:   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           ;how long display 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   ;10個(gè)880微秒-->9毫秒
SB:   ACALL  YS1
      JB     P3.2,EXIT
      DJNZ   R6, SB
      JNB    P3.2, $   ;等待9毫秒低電平引導(dǎo)脈沖完
      ACALL  YS2       ;延時(shí)4.74毫秒判斷是否有后續(xù)脈沖
      JB     P3.2,EXIT
      MOV    R1,#1AH   ;將32位代碼分別放在1AH/1BH/1CH/1DH中
      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      ;進(jìn)行代碼識(shí)別
      XRL  A,#40h     ;判斷1AH的值是否等于遙控器低8位地址(40h)
      JNZ  EXIT       ;如果不同則無(wú)效退出
      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í)880微秒
D1:   MOV    71H,#21D
      DJNZ   71H,$
      DJNZ   70H,D1
      RET
YS2:  MOV    70H,#09D   ;延時(shí)4740微秒
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,0FFH
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            ;并寫(xiě)入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             ;并寫(xiě)入DS1302
        RET
INCH:   ;INC     62H               ;小時(shí)增加
        MOV     6FH,62H
        ACALL   BCD_HEX
        INC     A
        CJNE    A,#24D,INCH1
        MOV     A,#0
INCH1:  MOV     6FH,A
        ACALL   HEX_BCD
        MOV     62H,A
        MOV     R1,#84H
        MOV     R0,62H
        ACALL   SETONE             ;并寫(xiě)入DS1302
        RET
INCM:   ;INC     61H               ;分增加
        MOV     6FH,61H
        ACALL   BCD_HEX
        INC     A
        CJNE    A,#60D,INCH2
        MOV     A,#0
INCH2:  MOV     6FH,A
        ACALL   HEX_BCD
        MOV     61H,A
        MOV     R1,#82H
        MOV     R0,61H
        ACALL    SETONE             ;并寫(xiě)入DS1302
        RET
;----------------------------------DEC----------------------
DEC2:   JB      0EH,DECH
        JB      0FH,DECM
        JB      10H,DEC_H
        JB      11H,DEC_M
        RET
DECH:   MOV     6FH,62H
        ACALL   BCD_HEX
        DEC     A
        CJNE    A,#0FFH,DECH1
        MOV     A,#23
DECH1:  MOV     6FH,A
        ACALL   HEX_BCD
        MOV     62H,A
        MOV     R1,#84H
        MOV     R0,62H
        ACALL   SETONE
        RET

DECM:   MOV     6FH,61H
        ACALL   BCD_HEX
        DEC     A
        CJNE    A,#0FFH,DECM1
        MOV     A,#59
DECM1:  MOV     6FH,A
        ACALL   HEX_BCD
        MOV     61H,A
        MOV     R1,#82H
        MOV     R0,61H
        ACALL   SETONE
        RET
DEC_H:  DEC     6BH
        MOV     A,6BH
        CJNE    A,#0FFH,DECH3
        MOV     6BH,#23D
DECH3:  MOV     R1,#0C2H
        MOV     R0,6BH
        ACALL   SETONE
        RET
DEC_M:  DEC     6AH
        MOV     A,6AH
        CJNE    A,#0FFH,DECH4
        MOV     6AH,#59D
DECH4:  MOV     R1,#0C0H
        MOV     R0,6AH
        ACALL   SETONE
        RET
;--------------------------------RIGHT----------------------
RIGHT:  JB      0EH,RIGHT1
        JB      0FH,RIGHT2
        JB      10H,RIGHT3
        JB      11H,RIGHT4
        RET                       ;右移
RIGHT1: CLR     0EH
        SETB    0FH
        RET
RIGHT2: CLR     0FH
        SETB    10H
        RET
RIGHT3: CLR     10H
        SETB    11H
        RET
RIGHT4: CLR     11H
        SETB    0EH
        RET
;--------------------------------LEFT-----------------------
LEFT:   JB      0EH,LEFT1
        JB      0FH,LEFT2
        JB      10H,LEFT3
        JB      11H,LEFT4
        RET                       ;左移
LEFT1:  SETB    11H
        CLR     0EH
        RET
LEFT2:  SETB    0EH
        CLR     0FH
        RET
LEFT3:  SETB    0FH
        CLR     10H
        RET
LEFT4:  SETB    10H
        CLR     11H
        RET
;------------------------------MUTE--------------
MUTE:   setb    k_ON
        CPL     06H              ;靜音
        CLR     08H
        RET
;-----------------------------DISPLAY OFF--------
DIS_OFF:CLR     ET1
        CPL     05H
        JNB     05H,REDORE
        SETB    ET1
REDORE: RET
;------------------------------------初始化1302-------------------------
SET1302: CLR    RST           ;2002年1月1日12:00:00
         CLR    LED3CLK
        MOV     SECOND,#0
        MOV     61H,#0
        MOV     62H,#18       ;18(D)=12(BCD)
        MOV     63H,#1
        MOV     64H,#1
        MOV     65H,#1
        MOV     66H,#2
         SETB   RST
         MOV    A,#8EH
         LCALL  R_BIT
         MOV    A,#00H
         LCALL  R_BIT
         SETB   LED3CLK
         CLR    RST
         MOV    R0,#SECOND
         MOV    R7,#7
         MOV    R1,#80H
SET1302A:CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,R1
         LCALL  R_BIT
         MOV    A,@R0
         LCALL  R_BIT
         INC    R0
         INC    R1
         INC    R1
         SETB   LED3CLK
         CLR    RST
         DJNZ   R7,SET1302A
         CLR    RST
         CLR    LED3CLK
         sETB   LED3CLK
         nop
         CLR    RST
         nop
         clr    led3clk
         SETB   RST
         MOV    A,#90H
         LCALL  R_BIT
         MOV    A,#10100101B         ;充電器設(shè)置
         LCALL  R_BIT
         SETB   LED3CLK
         CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,#8EH
         LCALL  R_BIT
         MOV    A,#80H
         LCALL  R_BIT
         SETB   LED3CLK
         CLR    RST
         RET
;----------------------讀取一RAM R1為地址------
T_6061:  CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,R1
         LCALL  R_BIT
         LCALL  W_BIT
         SETB   LED3CLK
         CLR    RST
         RET
;-----------------------------
R_1302:  MOV    R0,#SECOND
         MOV    R7,#7
         MOV    R1,#81H
R_1302A: CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,R1
         LCALL  R_BIT
         LCALL  W_BIT
         MOV    @R0,A
         INC    R0
         INC    R1
         INC    R1
         SETB   LED3CLK
         CLR    RST
         DJNZ   R7,R_1302A
         RET
;------------------R_BIT------------------
R_BIT:   MOV    R4,#8
R_BIT1:  RRC    A
         MOV    LED4IO,C
         SETB   LED3CLK
         CLR    LED3CLK
         DJNZ   R4,R_BIT1
         RET
;-------------------W_BIT-----------------------
W_BIT:   MOV    R4,#8
W_BIT1:  MOV    C,LED4IO
         RRC    A
         SETB   LED3CLK
         CLR    LED3CLK
         DJNZ   R4,W_BIT1
         RET
;------------------------進(jìn)制轉(zhuǎn)換--------------------------
BCD_HEX:
         MOV    A,6FH
         ANL    A,#0FH
         MOV    B,A
         MOV    A,6FH
         MOV    6FH,B
         SWAP   A
         ANL    A,#0FH
         MOV    B,#0AH
         MUL    AB
         ADD    A,6FH
         ;MOV    6FH,A
         RET
HEX_BCD:
         MOV   A,6FH
         MOV   B,#10
         DIV   AB
         SWAP  A
         ADD   A,B
         ;MOV   6FH,A
         RET
;-----寫(xiě)一地址---R1 為地址,R0 為數(shù)據(jù)----------
SETONE:  CLR    LED3CLK
         CLR    RST
         CLR    LED3CLK
         NOP
         SETB   RST
         MOV    A,#8EH
         LCALL  R_BIT
         MOV    A,#00H
         LCALL  R_BIT
         SETB   LED3CLK
         CLR    RST
         CLR    LED3CLK
         NOP
         CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,R1
         LCALL  R_BIT
         MOV    A,R0
         LCALL  R_BIT
         NOP
         SETB   LED3CLK
         CLR    RST
         NOP
         NOP
         CLR    RST
         CLR    LED3CLK
         SETB   RST
         MOV    A,#8EH
         LCALL  R_BIT
         MOV    A,#80H
         LCALL  R_BIT
         SETB   LED3CLK
         CLR    RST
         RET
  END




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:75926 發(fā)表于 2015-4-3 01:22 | 只看該作者
  1. //打開(kāi)DS1302充電二級(jí)管  一個(gè)二級(jí)管串聯(lián)一個(gè)2K電阻
  2. #include <REGX51.H>
  3. //#include "ds1302.h"
  4. #define leddata P2
  5. #define sec 0x80
  6. #define min 0x82
  7. #define hou 0x84
  8. #define read 0x01
  9. sbit MODE=P1^6;
  10. sbit SET=P1^5;
  11. sbit UP=P1^4;
  12. sbit DOWN=P1^3;
  13. sbit led0=P0^7;
  14. sbit led1=P0^6;
  15. sbit led2=P0^5;
  16. sbit led3=P0^3;
  17. sbit led4=P0^2;
  18. sbit led5=P0^1;
  19. sbit T_CLK=P1^2;
  20. sbit T_IO =P1^1;
  21. sbit T_RST=P1^0;
  22. sbit ACC0=ACC^0;
  23. sbit ACC7=ACC^7;
  24. //******************************************************
  25. sbit den_cuo=P3^3; //這是一個(gè)小夜燈的控制引腳
  26. sbit den_kai_guan=P3^2;
  27. //********DS1302讀寫(xiě)程序***************
  28. /********************************************************************
  29. 函 數(shù) 名:RTInputByte()
  30. 功    能:實(shí)時(shí)時(shí)鐘寫(xiě)入一字節(jié)
  31. 說(shuō)    明:往DS1302寫(xiě)入1Byte數(shù)據(jù) (內(nèi)部函數(shù))
  32. 入口參數(shù):d 寫(xiě)入的數(shù)據(jù)
  33. 返 回 值:無(wú)  
  34. ***********************************************************************/
  35. void RTInputByte(unsigned char d)
  36. {
  37.     unsigned char i;
  38.     ACC = d;
  39.     for(i=8; i>0; i--)
  40.     {
  41.         T_IO = ACC0;           //相當(dāng)于匯編中的 RRC
  42.         T_CLK = 1;
  43.         T_CLK = 0;
  44.         ACC = ACC >> 1;
  45.     }
  46. }
  47. /********************************************************************
  48. 函 數(shù) 名:RTOutputByte()
  49. 功    能:實(shí)時(shí)時(shí)鐘讀取一字節(jié)
  50. 說(shuō)    明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù))
  51. 入口參數(shù):無(wú)  
  52. 返 回 值:ACC
  53. 設(shè)    計(jì):zhaojunjie           日    期:2002-03-19
  54. 修    改:                     日    期:
  55. ***********************************************************************/
  56. unsigned char RTOutputByte(void)
  57. {
  58.     unsigned char i;
  59.     for(i=8; i>0; i--)
  60.     {
  61.         ACC = ACC >>1;         //相當(dāng)于匯編中的 RRC
  62.         ACC7 = T_IO;
  63.         T_CLK = 1;
  64.         T_CLK = 0;
  65.     }
  66.     return(ACC);
  67. }
  68. /********************************************************************
  69. 函 數(shù) 名:Write1302()
  70. 功    能:往DS1302寫(xiě)入數(shù)據(jù)
  71. 說(shuō)    明:先寫(xiě)地址,后寫(xiě)命令/數(shù)據(jù) (內(nèi)部函數(shù))
  72. 調(diào)    用:RTInputByte() , RTOutputByte()
  73. 入口參數(shù):ucAddr: DS1302地址, ucData: 要寫(xiě)的數(shù)據(jù)
  74. 返 回 值:無(wú)
  75. ***********************************************************************/
  76. void Write1302(unsigned char ucAddr, unsigned char ucDa)
  77. {
  78.     T_RST = 0;
  79.     T_CLK = 0;
  80.     T_RST = 1;
  81.     RTInputByte(ucAddr);       // 地址,命令
  82.     RTInputByte(ucDa);         // 寫(xiě)1Byte數(shù)據(jù)
  83.     T_CLK = 1;
  84.     T_RST = 0;
  85. }
  86. /********************************************************************
  87. 函 數(shù) 名:Read1302()
  88. 功    能:讀取DS1302某地址的數(shù)據(jù)
  89. 說(shuō)    明:先寫(xiě)地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù))
  90. 調(diào)    用:RTInputByte() , RTOutputByte()
  91. 入口參數(shù):ucAddr: DS1302地址
  92. 返 回 值:ucData :讀取的數(shù)據(jù)
  93. ***********************************************************************/
  94. unsigned char Read1302(unsigned char ucAddr)
  95. {
  96.     unsigned char ucData;
  97.     T_RST = 0;
  98.     T_CLK = 0;
  99.     T_RST = 1;
  100.     RTInputByte(ucAddr);             // 地址,命令
  101.     ucData = RTOutputByte();         // 讀1Byte數(shù)據(jù)
  102.     T_CLK = 1;
  103.     T_RST = 0;
  104.     return(ucData);
  105. }
  106. /********************************************************************
  107. 函 數(shù) 名:Set1302()
  108. 功    能:設(shè)置初始時(shí)間
  109. 說(shuō)    明:先寫(xiě)地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
  110. 調(diào)    用:Write1302()
  111. 入口參數(shù):pClock: 設(shè)置時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年
  112.                                7Byte (BCD碼)1B 1B 1B 1B 1B  1B  1B
  113. 返 回 值:無(wú)
  114. ***********************************************************************/
  115. void Set1302(unsigned char *pClock)
  116. {
  117.     unsigned char i;
  118.     unsigned char ucAddr = 0x80;
  119.     Write1302(0x8e,0x00);           // 控制命令,WP=0,寫(xiě)操作
  120.     for(i =7; i>0; i--)
  121.     {
  122.         Write1302(ucAddr,*pClock);  // 秒 分 時(shí) 日 月 星期 年
  123.         pClock++;
  124.         ucAddr +=2;
  125.     }
  126.     Write1302(0x8e,0x80);           // 控制命令,WP=1,寫(xiě)保護(hù)
  127. }
  128. void delays(unsigned char);
  129. void display(void);
  130. void Scan_Key(void);
  131. void id_case1_key();
  132. void Set_id(unsigned char ,unsigned char);
  133. unsigned char hour,minute,second,id=0,timecount,re_disp=0;
  134. bit flag;
  135. unsigned char code tab[]={        0x9F,/*0*/
  136.         0x12,/*1*/
  137.         0x2F,/*2*/
  138.         0x3B,/*3*/
  139.         0xB2,/*4*/
  140.         0xB9,/*5*/
  141.         0xBD,/*6*/
  142.         0x13,/*7*/
  143.         0xBF,/*8*/
  144.         0xBB,/*9*/
  145. };
  146. unsigned char inittime[7]={0x00,0x00,0x12,0x16,0x11,0x06,0x04};
  147. //                          秒  分鐘 小時(shí)  日   月   年  星期
  148. void t0(void) interrupt 1 using 0
  149. {
  150.    TH0=(65535-50000)/256; //50ms定時(shí)
  151.    TL0=(65535-50000)%256;  
  152.    timecount++;re_disp++;
  153.    if(timecount>9)
  154.      {
  155.    timecount=0;
  156.       flag=~flag;
  157.      }
  158. if(re_disp>200){re_disp=0;if(id)id=0;}
  159. }
  160. void delays(unsigned char k)
  161. {
  162. unsigned char i,j;
  163. for(i=0;i<k;i++)
  164.   for(j=0;j<50;j++);
  165. }
  166. void display(void)
  167. {
  168. if(flag&hour)
  169.   {
  170.    led0=0;leddata=0x00;delays(10);led0=1;     //這句中的0xff是數(shù)碼管的滅碼
  171.    led1=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led1=1;    //這句中的0xff是數(shù)碼管的滅碼
  172.   }
  173. else
  174.   {
  175.    leddata=tab[Read1302(hou+1)/16];led0=0;delays(10);led0=1;
  176.    leddata=tab[Read1302(hou+1)%16]&~((unsigned char)~flag<<6);led1=0;delays(10);led1=1;
  177.   }
  178. if(flag&minute)
  179.   {
  180.    led2=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led2=1;
  181.    led3=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led3=1;
  182.   }
  183. else
  184.   {
  185.    leddata=tab[Read1302(min+1)/16]&~((unsigned char)~flag<<6);led2=0;delays(10);led2=1;
  186.    leddata=tab[Read1302(min+1)%16]&~((unsigned char)~flag<<6);led3=0;delays(10);led3=1;
  187.   }
  188. if(flag&second)
  189.   {
  190.    led4=0;leddata=0x00&~((unsigned char)~flag<<6);delays(10);led4=1;
  191.    led5=0;leddata=0x00;delays(10);led5=1;
  192.   }
  193. else
  194.   {
  195.    leddata=tab[Read1302(sec+1)/16]&~((unsigned char)~flag<<6);led4=0;delays(10);led4=1;
  196.    leddata=tab[Read1302(sec+1)%16];led5=0;delays(10);led5=1;
  197.   }
  198. }
  199. void Scan_Key(void)
  200. {
  201. display();
  202. if(!SET)
  203.   {
  204.    while(!SET)display();
  205.    re_disp=0;
  206.    id++;if(id>3)id=0;
  207.   }
  208. if(id==0){hour=0;minute=0;second=0;}
  209. if(id==1){hour=1;id_case1_key();}
  210. if(id==2){hour=0;minute=1;id_case1_key();}
  211. if(id==3){minute=0;second=1;id_case1_key();}
  212. }
  213. void id_case1_key(void)
  214. {
  215. display();
  216.    if (!DOWN) //減少
  217.        {
  218.          while(!DOWN)display();
  219.    re_disp=0;
  220.       Set_id(id,0);   
  221.        }
  222.     if (!UP)  //增加
  223.        {
  224.          while(!UP)display();
  225.    re_disp=0;
  226.       Set_id(id,1);   
  227.        }
  228. }
  229. //根據(jù)選擇調(diào)整相應(yīng)項(xiàng)目并寫(xiě)入DS1302
  230. void Set_id(unsigned char sel,unsigned char sel_1)
  231. {
  232.    signed char max,mini,address,item;
  233. if(sel==1)  {address=hou; max=23;mini=0;}    //小時(shí)
  234. if(sel==2)  {address=min; max=59;mini=0;}    //分鐘
  235.    if(sel==3)  {address=sec; max=0;mini=0;}     //秒
  236.    item=Read1302(address+1)/16*10+Read1302(address+1)%16;
  237.    if (sel_1==0) item--;  else item++;
  238.   if(item>max) item=mini;  
  239.    if(item<mini) item=max;
  240. Write1302(0x8e,0x00);//允許寫(xiě)操作
  241.    Write1302(address,item/10*16+item%10);
  242.    Write1302(0x8e,0x80);//寫(xiě)保護(hù),禁止寫(xiě)操作  
  243. }
  244. void main()
  245. {  
  246.   den_cuo=0;
  247.   TMOD=0x01;
  248.     TH0=(65535-50000)/256;
  249.     TL0=(65535-50000)%256;
  250.     EA=1;
  251.     ET0=1;
  252.   TR0=1;
  253.   Write1302(0x90,0xa5);//打開(kāi)充電二級(jí)管  一個(gè)二級(jí)管串聯(lián)一個(gè)2K電阻
  254.    Write1302(0x8e,0x80);//寫(xiě)保護(hù),禁止寫(xiě)操作
  255.   if(!UP&!DOWN)Set1302(inittime);
  256.   while(1)
  257.    {  
  258.     Scan_Key();
  259.     if(Read1302(hou+1)==0x18) //小夜燈每天晚上18點(diǎn)時(shí)自動(dòng)點(diǎn)亮
  260.     {
  261.      den_cuo=1;
  262.     }
  263.     if(Read1302(hou+1)==0x07) //小夜燈每天早上7點(diǎn)時(shí)自動(dòng)熄滅
  264.     {
  265.      den_cuo=0;
  266.     }
  267.     if(den_kai_guan==0)
  268.     {
  269.      delays(50);
  270.      if(den_kai_guan==0)
  271.      {
  272.       while(!den_kai_guan);
  273.       den_cuo=!den_cuo;
  274.      }
  275.     }  
  276.    }
  277. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:75461 發(fā)表于 2015-4-6 13:06 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:86205 發(fā)表于 2015-7-20 04:59 | 只看該作者
不錯(cuò)哦。真心
回復(fù)

使用道具 舉報(bào)

5#
ID:86421 發(fā)表于 2015-10-12 21:11 | 只看該作者
真心的學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

6#
ID:61140 發(fā)表于 2015-10-13 06:05 | 只看該作者
純屬跑過(guò),不過(guò)你做的確實(shí)很好,努力
回復(fù)

使用道具 舉報(bào)

7#
ID:101531 發(fā)表于 2016-11-20 21:51 | 只看該作者
真心的學(xué)習(xí)了,謝謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:487884 發(fā)表于 2019-4-4 18:27 | 只看該作者
真的很好啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久大陆| 日韩精品一区二区三区老鸭窝 | 亚洲精品一区二区在线观看 | 亚洲第一区国产精品 | 成人av一区二区在线观看 | 亚洲国产高清在线观看 | 九九av| 欧美在线资源 | 欧美极品在线视频 | 一级毛片在线播放 | 成人在线免费网站 | 黄色免费av | 中文av在线播放 | 久久久久久久av | 成人性视频在线播放 | 日韩人体视频 | 伊人中文字幕 | 亚洲成av人片在线观看无码 | aaaaaaa片毛片免费观看 | 日本视频中文字幕 | 亚洲一区二区三区四区在线观看 | 久久人人国产 | 九九热最新地址 | 国产精品国产三级国产aⅴ无密码 | 日本中文在线视频 | 亚洲欧美日韩在线 | 超碰最新在线 | 一级特黄色毛片 | 男女网站免费观看 | 久久大| 韩国毛片一区二区三区 | 亚洲精品综合 | 国产第一页在线观看 | 国产三区四区 | 亚洲综合成人网 | av网站免费看 | 亚洲一二三在线观看 | 美女在线观看国产 | 免费av电影网站 | 精品91久久 | 全免费a级毛片免费看视频免费下 |