基于单片机多功能数字钟

跪求 跪求 跪求 基于单片机多功能数字钟

带万年历的LCD显示多功能数字钟

程序清单:

;                    SMC1602接口程序(MCS51模拟口线方式)

;***************************************************************************

;连线图: *LCM---8031* *LCM---8031* *LCM------------8031*

;        *DB0---P0.0* *DB4---P0.4* *RS-------------P2.0*

;        *DB1---P0.1* *DB5---P0.5* *RW-------------P2.1*

;        *DB2---P0.2* *DB6---P0.6* *E--------------P2.2*  

;        *DB3---P0.3* *DB7---P0.7* *VLCD接10K可调电阻到GND*

;注:8051的晶振频率为11.0592MHz R0设置数据存放 S8为设置键 S7为加键 S4为确认键

;**************************************************************************

;P0口液晶显示

; P2.4位选键P2.3加一键P2.2返回键及报时功能键闹钟设置P2.0控制显示键

;寄存器 clr rs0 setb rs1 R0 R4 R5在按键中用到  延时中用到 SETB RS0   SETB RS1的R0 R1 R2       

;SETB RS0  CLR RS1显示中用到  CLR  RS0  CLR  RS1 在闹钟调整子程序中用到R1

 

;*********************************************************************

;

;报时功能P2.6    和闹钟功能P2.5  闹钟调整时间功能已经可以设置     显示的切换方式变了   再关闭的情况下一切正常运行

;*****************************

 RSPIN   BIT     P1.2

 RWPIN   BIT     P1.1

 EPIN    BIT     P1.0

 

 WEIXUAN BIT P2.4 ;位选键设置键

 JIAJIAN BIT P2.3 ;加一键

 JIANJIAN BIT P2.2 ;减一键

 FANHUI BIT P2.1 ;返回键

 NZKG BIT P2.0 ;闹钟设置键

 

 

 

 SECONTL EQU 30H ;秒

 SECONTH EQU 31H ;秒

 MAOHAOL EQU 32H ;:

 MINIUTL EQU 33H ;分

 MINIUTH EQU 34H ;分

 MAOHAOH EQU 35H ;:

 HOURL EQU 36H ;时

 HOURH EQU 37H ;时

;*****************************日期部分***************************

 DAYL EQU 40H ;日个

 DAYH EQU 41H ;日十 

 HENL EQU 42H ;-

 MONTHL EQU 43H ;yue

 MONTHH EQU 44H ;yue

 HENH EQU 45H ;-

 YEARO EQU 46H ;年

 YEART EQU 47H

 YEARS EQU 48H

 YEARF EQU 49H

 TEMP EQU 50H   ;用做存储单元显示子程序(DISPLAY)里用到

 BIJIAO EQU 51H ;加一子程序(JIAYI)中用到

 ZDRQO EQU 55H ;中断加一程序中用到 

 ZDRQT EQU 56H ;中断加一程序中用到

 ZDRQS EQU 57H ;中断加一程序中用到

 ZDRQF EQU 58H ;中断加一程序中用到

 DIZHI EQU 59H ;键盘(JIANPAN)子程序里用到

 NZBZ BIT 60H ;定时标志位在(闹钟开关部分)

 

 

 ;38H到3FH没用到

 

 BSCSBZ BIT 39H ;报时次数转换标志    (BSCS)里用到

 BSCSCC EQU 3AH ;报时次数存储  (BSCS)里用到

 ZDBSBZ BIT 3BH ;整点报时标志  (SSBS)里用到

 ZMBSBZ BIT 3CH ;整秒闪烁标志  (SSBS)里用到

 BSKGBZ BIT 3DH ;报时开启标志  (BSKG)里用到

 XKQHBZ BIT 3EH ;显示开启关闭标志 (XIANKONG)里用到

 

 

 ORG 0000H

 AJMP MAIN

 ORG 000BH

 AJMP ZD

 ORG 0030H

MAIN:  MOV SP,#60H  ;给堆栈指针赋初值

 MOV 30H,#05H ;秒

 MOV 31H,#05H ;秒

 MOV 32H,#3AH ;:

 MOV 33H,#09H ;分

 MOV 34H,#05H ;分

 MOV 35H,#3AH ;:

 MOV 36H,#03H ;时

 MOV 37H,#01H ;时

;*****************************日期部分***************************

 MOV 40H,#09H ;日个

 MOV 41H,#02H ;日十 

 MOV 42H,#2DH ;-

 MOV 43H,#09H ;yue

 MOV 44H,#00H ;yue

 MOV 45H,#2DH ;-

 MOV 46H,#09H ;年

 MOV 47H,#09H

 MOV 48H,#09H

 MOV 49H,#02H

 CLR  P2.5  ;闹钟

 CLR P2.6  ;整点报时

 

 MOV 03H,#00H  ;闹钟分个位

 MOV 04H,#00H  ;闹钟分十位

 MOV 06H,#04H  ;闹钟时个位

 MOV 07H,#01H  ;闹钟时十位

 

 ;CLR  P1.5

 ;CLR P1.4

 

       MOV    B,#20

 MOV    TMOD,#01H     ;定时器工作方式1

 MOV TH0,#4CH

   MOV TL0,#08H

  SETB ET0                 ;允许T0中断

   SETB EA                  ;总中断开放

 LCALL    LCDRESET    ;初始化LCD

        LCALL DISPSTART ;调用显示初始状态

        SETB TR0   ;开启定时器

        

        CLR NZBZ  ;闹钟开启关闭标志

        CLR BSKGBZ  ;报时开启关闭标志

       CLR XKQHBZ  ;显示开启关闭标志

         

LOOP: LCALL JIANPAN  ;按键子程序

 LCALL DISPLAY  ;显示子程序

 LCALL NZBF  ;NAOZHONG  BUFENG 

 LCALL NZBJ  ;NAOZHONG BIJIAO

 LCALL BSKG  ;BAOSHIKAIGUAN

 LCALL BSCS  ;BAOSHICISHU

 LCALL SSBS  ;闪烁报时

 SJMP LOOP

;==============================中断加一程序===================================

ZD: PUSH ACC

 MOV TH0,#4CH

   MOV TL0,#08H

   DJNZ B,ZDEND

   MOV    B,#20

   

 INC SECONTL

 SETB ZMBSBZ

 MOV A,SECONTL

 CJNE A,#0AH,ZDEND

 MOV SECONTL,#00H

 INC  SECONTH

 MOV A,SECONTH

 CJNE A,#06H,ZDEND

 MOV SECONTH,#00H

 INC MINIUTL

 MOV A,MINIUTL

 CJNE A,#0AH,ZDEND

 MOV MINIUTL,#00H

 INC  MINIUTH

 MOV A,MINIUTH

 CJNE A,#06H,ZDEND

 MOV MINIUTH,#00H

 INC  HOURL

 SETB BSCSBZ

 SETB ZDBSBZ

 MOV A,HOURL   ;24小时的判断

 CJNE A,#04H,ZDF

 MOV A,HOURH

 CJNE A,#02H,ZDEND

 MOV HOURL,#00H

 MOV HOURH,#00H

 LCALL ZDRQ

 SJMP ZDEND

ZDF: CJNE A,#0AH,ZDEND

 MOV HOURL,#00H

 INC  HOURH

ZDEND: POP ACC

 RETI 

 

 ;日期部分

ZDRQ: PUSH ACC

 INC DAYL

 ;判断天数28,30,31部分

 MOV A,MONTHH  ;用于判断月份时为31天30天28天

 CJNE A,#01H,LL

 MOV 55H,#0AH  ;存放月份的十位转化为个位是0AH

 MOV A,MONTHL

 ADD A,55H   ;月分高低相加用于查表

 SJMP LL3

LL: MOV A,MONTHL

 ADD A,MONTHH

LL3: MOV 56H,A   ;存放相加后的月份数据

 MOV DPTR,#TAB5

 MOVC A,@A+DPTR  ;查十位和天数的十位比较

 MOV 57H,A

 MOV A,56H

 MOV DPTR,#TAB6  ;查个位和天数的个位比较

 MOVC A,@A+DPTR

 MOV 58H,A

 MOV A,DAYH

 CJNE A,57H,LL2

 MOV A,DAYL

 CJNE A,58H,LL2

 MOV DAYH,#00H

 MOV DAYL,#01H

 SJMP LL4

LL2: MOV A,DAYL

 CJNE A,#0AH,ZDRQEND

 MOV DAYL,#00H

 INC DAYH

 MOV A,DAYH   ;比较天数是否要进位

 CJNE A,57H,ZDRQEND

 MOV A,DAYL

 CJNE A,58H,ZDRQEND

 MOV DAYH,#00H

 MOV DAYL,#01H

 

 ;月份和年份

 

LL4: INC MONTHL

 MOV A,MONTHL

 CJNE A,#03H,ZDRQ1  ;用于判断月份时为12月时进位

 MOV A,MONTHH

 CJNE A,#01H,ZDRQ1

 MOV MONTHL,#01H  ;天数符合要求

 MOV MONTHH,#00H

 SJMP ZDRQ2

 

ZDRQ1: CJNE A,#0AH,ZDRQEND

 MOV MONTHL,#00H

 INC MONTHH

 SJMP ZDRQEND

ZDRQ2: INC YEARO   ;年的加一

 MOV A,YEARO

 CJNE A,#0AH,ZDRQEND

 MOV YEARO,#00H

 INC YEART   ;年的进位

 MOV A,YEART

 CJNE A,#0AH,ZDRQEND

 MOV YEART,#00H

 INC YEARS

 MOV A,YEARS

 CJNE A,#0AH,ZDRQEND

 MOV YEARS,#00H

 INC YEARF

 MOV A,YEARF

 CJNE A,#0AH,ZDRQEND

 MOV YEARF,#00H

  

ZDRQEND: 

 POP ACC

 RET

;液晶初始化

;========================初始化程序=======================================

LCDRESET:                       ;初始化程序

        LCALL    DELAY5MS        ;延时15MS

        LCALL    DELAY5MS

        LCALL    DELAY5MS

        MOV A,#38H          ;显示模式设置(不检测忙信号)

        LCALL    LCDWCN          ;共三次

        LCALL    DELAY5MS

        MOV     A,#38H

        LCALL    LCDWCN

        LCALL    DELAY5MS

        MOV     A,#38H               

        LCALL    LCDWCN

        MOV     A,#38H          ;显示模式设置(以后均检测忙信号)

        LCALL    LCDWC

        MOV     A,#08H          ;显示关闭

        LCALL    LCDWC

        MOV     A,#01H          ;显示清屏

        LCALL    LCDWC

        MOV     A,#06H          ;显示光标移动设置

        LCALL    LCDWC

        MOV     A,#0CH          ;显示开及光标设置

        LCALL    LCDWC

        RET

;==============================写指令===================================

LCDWC:                          ;送控制字子程序(检测忙信号)

        LCALL    WAITIDLE        

        ;******写指令*******;送控制字子程序(不检测忙信号)

LCDWCN: CLR     RSPIN           ;RS=0 RW=0 E=高脉冲

        CLR     RWPIN

        MOV     P0,A

        SETB    EPIN  ;(

        NOP   ;给高电平脉冲

        CLR     EPIN  ;)

        RET       

;==========================写数据=======================================        

LCDWD:                              ;写字符子程序

        LCALL    WAITIDLE

        SETB    RSPIN               ;RS=1 RW=0 E=高脉冲

        CLR     RWPIN

        MOV     P0,A

        SETB    EPIN

        NOP

        CLR     EPIN

        RET

;===============================等待控制器空闲==================================

WAITIDLE:

        PUSH    ACC                 ;正常读写操作之前必须检测LCD控制器状态

        MOV     P0,#0FFH

       lcall DELAY5MS  ;4566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666

        CLR     RSPIN               ;RS=0 RW=1 E=高电平

        SETB    RWPIN

        SETB    EPIN

        lcall DELAY5MS  ;465555546465464654648791313848946113134849845461313579641613131354649498

WTD_PA: NOP                         ;DB7:    0  LCD控制器空闲

        JB      P0.7,WTD_PA         ;        1  LCD控制器忙

        CLR     EPIN

        POP     ACC

        RET         

;***********************初始状态子程序******************************* 

DISPSTART:   ;显示初始状态子程序

 PUSH ACC

 MOV A,#80H

        LCALL LCDWC

 MOV     DPTR,#TAB ;显示字符

DISP1: CLR A

 MOVC A,@A+DPTR

 JZ DISP2

 LCALL LCDWD

 INC DPTR

 SJMP DISP1

DISP2: MOV A,#0C0H

 LCALL LCDWC

 MOV DPTR,#TAB1

DISP3: CLR A

 MOVC A,@A+DPTR

 JZ DISP_END

 LCALL LCDWD

 INC DPTR

 SJMP DISP3

DISP_END:

 POP ACC

 RET   

;==========================显示子程序=======================================       

DISPLAY:PUSH PSW

 PUSH ACC

 SETB RS0

 CLR RS1

 MOV A,#85H

 LCALL LCDWC

 MOV R1,#38H   ;第一行显示数据存储单元的启始地址

 MOV TEMP,#30H  ;第一行显示数据存储单元的结束地址

 MOV R6,#2

 

PLAY: DEC R1   

 CJNE R1,#32H,PLY  ;判断是否为冒号位

 MOV A,MAOHAOL  ;是者送冒号的ACSI码

 SJMP PLAY1

PLY: CJNE R1,#35H,PLY1

 MOV A,MAOHAOH

 SJMP PLAY1

PLY1: CJNE R1,#42H,PLY2  ;判断是否为横杠的位置

 MOV A,HENL   ;是者送横杠的ACSI码

 SJMP PLAY1

PLY2: CJNE R1,#45H,PLY3

 MOV A,HENH

 SJMP PLAY1

 

 

PLY3: MOV A,@R1   ;用查表法送要显示的数据

 MOV DPTR,#TAB2

 MOVC A,@A+DPTR

PLAY1: LCALL LCDWD

 MOV A,R1

 CJNE A,TEMP,PLAY  ;判断第一行是否显示好了

 MOV A,#0C5H

 LCALL LCDWC

 MOV R1,#4AH   ;第二行显示数据存储单元的启始地址

 MOV TEMP,#40H  ;第二行的结束地址

 DJNZ R6,PLAY   ;R6为0时两行显示结束

 

 POP ACC

 POP PSW

 RET 

;************************按键子程序************************ 

 

JIANPAN:clr rs0      ;键盘子程序

 setb rs1  ;键盘子程序 

 JB WEIXUAN,JIAN_ZEND ;设置键的判断

 LCALL DELAY5MS

 JB WEIXUAN,JIAN_ZEND

 PUSH ACC

 JNB WEIXUAN,$

 ;MOV A,#0FH  ;开启光标闪烁设置

 ;LCALL LCDWCN

fah: JNB NZBZ,JPNZSJ ;为“1”闹钟   为“0”时钟

 LCALL JPXS

 MOV R4,#86H  ;闹钟设定时间R4存放显示位地址

 MOV R5,#2  ;闹钟设定时间第一行第二行•••••位置改变次数

 MOV DIZHI,#8CH ;闹钟设定时间第一行结束地址

 MOV R0,#06H

 SJMP GIVED

JPNZSJ: CLR TR0

 MOV R4,#86H  ;R4存放显示位地址

 MOV R5,#2  ;第一行第二行•••••位置改变次数

 MOV DIZHI,#8DH ;第一行结束地址

 MOV R0,#36H 

GIVED: MOV A,#0FH  ;开启光标闪烁设置555555555555555555555555555555555555555555555

 LCALL LCDWCN

 MOV A,R4  

 LCALL LCDWC 

UPONE: JB FANHUI,UPtwo ;返回键的判断

 LCALL DELAY5MS

 JB FANHUI,UPtwo

 JNB FANHUI,$

 SJMP GOBACK

JIAN_ZEND:SJMP JIAN_END ;中继跳转6666666666666666666666666666666666666666666666666666666666666666

UPtwo: JB JIAJIAN,IAM ;加一键的判断

 LCALL DELAY5MS

 JB JIAJIAN,IAM

 JNB JIAJIAN,$

 LCALL JIAYI  ;调用按键加一子程序

 

 ;MOV A,#0FH  ;开启光标闪烁设置555555555555555555555555555555555555555555555

 ;LCALL LCDWCN

IAM: JB JIANJIAN,IAM22 ;减一键的判断

 LCALL DELAY5MS

 JB JIANJIAN,IAM22

 JNB JIANJIAN,$

 LCALL JIANYI ;调用按键减一子程序

  

 AJMP GIVED

IAM22:  JB WEIXUAN,UPONE ;位选键的判断

 LCALL   DELAY5MS

 JB WEIXUAN,UPONE

 JNB WEIXUAN,$

 DEC R0

 INC R4 

 LCALL JIAN  ;调用位选比较程序

 CJNE r4,#88H,JJ11

 DEC R0

 INC R4

 SJMP    JJ22

JJ11: CJNE r4,#8BH,JJ22

 DEC R0

 INC R4

JJ22: MOV A,R4

 CJNE A,DIZHI,GIVED

 JB NZBZ,fah  ;为“1”闹钟   为“0”时钟

 MOV R4,#0C5H

 MOV DIZHI,#0CFH

 MOV R0,#49H

 DJNZ R5,GIVED

 LJMP fah

GOBACK: MOV A,#0CH  ;关闭光标闪烁设置

 LCALL LCDWCN 

 POP ACC

JIAN_END:

 SETB TR0 

 RET 

;1111111111111111111111111111111111111111111111111111111111111111111111111111

 ;11111111111111111111111111111111111111111111111111111111111111111111111111

JPXS: MOV A,#85H

 LCALL LCDWC

 MOV R1,#08H   ;第一行显示数据存储单元的启始地址

JPXS_LL:DEC R1

 CJNE R1,#05H,JPXS_LP

 MOV A,#3AH

 SJMP JPXS_LY

JPXS_LP:MOV A,@R1   ;用查表法送要显示的数据

 MOV DPTR,#TAB2

 MOVC A,@A+DPTR

JPXS_LY:LCALL LCDWD

 CJNE R1,#03H,JPXS_LL

 RET

 ;111111111111111111111111111111111111111111111111111111111111111111111

 ;111111111111111111111111111111111111111111111111111111111111111111111

;************************位选比较控制程序************************ 

; 在调整时间时这几位是符号冒号和横杠的数据

;在这几位时跳过到下一位

JIAN: CJNE R4,#87H,JIAN5  

 DEC R0

 INC R4

 SJMP JIANEND

JIAN5: CJNE R4,#8AH,JIAN1

 DEC R0

 INC R4

 SJMP JIANEND

JIAN1: CJNE R4,#0C9H,JIAN2

 DEC R0

 INC R4

 SJMP JIANEND

JIAN2: CJNE R4,#0CCH,JIANEND

 DEC R0

 INC R4

JIANEND:RET 

;************************按键加一子程序********************

JIAYI: INC @R0

 CJNE @R0,#0AH,JIAYI_END

 MOV @R0,#0

 CJNE R4,#86H,JIAYI55

 SJMP JIAYI33

JIAYI55:CJNE r4,#89H,JIAYI11

 SJMP JIAYI33

JIAYI11:CJNE r4,#8CH,JIAYI22

 SJMP JIAYI33

JIAYI22:CJNE R0,#30H,JIAYI_END

JIAYI33:INC R0

 INC @R0

 CJNE @R0,#06H,JIAYI44

 MOV @R0,#0

JIAYI44:DEC R0

  

JIAYI_END:MOV A,#0CH  ;开启光标闪烁设置

 LCALL LCDWCN

 JNB NZBZ,JIAYI88 ;为“1”闹钟   为“0”时钟

 LCALL JPXS

 SJMP JIAYI99

JIAYI88:LCALL DISPLAY  ;显示子程序 

JIAYI99: RET

 

;%%%%%%%%%%%%%%%%%%减一%%%%%%%%%%%%%%%%%%%%%%%%

JIANYI: DEC @R0

 CJNE @R0,#00H,JIANYI_END

 MOV @R0,#9

 CJNE R4,#86H,JIANYI55

 SJMP JIANYI33

JIANYI55:CJNE r4,#89H,JIANYI11

 SJMP JIANYI33

JIANYI11:CJNE r4,#8CH,JIANYI22

 SJMP JIANYI33

JIANYI22:CJNE R0,#30H,JIANYI_END

JIANYI33:INC R0

 DEC @R0

 CJNE @R0,#0FFH,JIANYI44

 MOV @R0,#5

JIANYI44:DEC R0

  

JIANYI_END:MOV A,#0CH  ;开启光标闪烁设置

 LCALL LCDWCN

 JNB NZBZ,JIANYI88 ;为“1”闹钟   为“0”时钟

 LCALL JPXS

 SJMP JIANYI99

JIANYI88: LCALL DISPLAY  ;显示子程序 

JIANYI99: RET

 

;******************************闹钟开关部分************************ 

NZBF: JB NZKG,NZBF_END

 LCALL DELAY5MS

 JB NZKG,NZBF_END

 JNB NZKG,$

 CPL NZBZ

 JB NZBZ,NZBF_LL

 MOV     A,#01H          ;显示清屏

        LCALL   LCDWC

        CLR P2.5

        LCALL DISPSTART ;调用显示初始状态

        LCALL DISPLAY  ;调用显示初始状态

        

        JB BSKGBZ,NZBF_LP    ; |

        SJMP NZBF_END    ; |

NZBF_LP:MOV     A,#8FH          ;报时标志显示位置 ;  |

        LCALL   LCDWC     ;  |保护报时标志在清屏是不被误清

 MOV A,#25H  ;显示报时标志  ;  |

 LCALL LCDWD          ; |

       SJMP NZBF_END    ; |

       

       

NZBF_LL:MOV     A,#8EH          ;闹钟标志显示位置

        LCALL   LCDWC

 MOV A,#26H  ;显示闹钟标志 

 LCALL LCDWD

 

NZBF_END:RET 

;******************************闹钟比较部分************************

NZBJ: JB NZBZ,NZBJ_LL

 SJMP NZBJ_END

NZBJ_LL:MOV A,07H

 CJNE A,37H,NZBJ_END

 MOV A,06H

 CJNE A,36H,NZBJ_END

 MOV A,04H

 CJNE A,34H,NZBJ_END

 MOV A,03H

 CJNE A,33H,NZBJ_END

 SETB P2.5

NZBJ_END:RET

;***************报时开关********************

BSKG: JB FANHUI,BSKG_END

 LCALL DELAY5MS

 JB FANHUI,BSKG_END

 JNB FANHUI,$

 CPL BSKGBZ

 

 

 JB BSKGBZ,BSKG_LL

 MOV     A,#01H          ;显示清屏

        LCALL   LCDWC

        CLR P2.6

        LCALL DISPSTART ;调用显示初始状态

        LCALL DISPLAY  ;调用显示

        

        JB NZBZ,BSKG_LP ; |

        SJMP BSKG_END ; |

BSKG_LP:MOV     A,#8EH          ;  |

        LCALL   LCDWC  ;  |保护闹钟标志在清屏是不被误清

 MOV A,#26H  ;  |

 LCALL LCDWD  ; |     

 SJMP BSKG_END ; | 

 

BSKG_LL:MOV     A,#8FH          ;报时标志显示位置

        LCALL   LCDWC

 MOV A,#25H  ;显示报时标志

 LCALL LCDWD

BSKG_END:RET

;*********************报时次数********************

BSCS: JNB BSKGBZ,BSCS_END

 JNB BSCSBZ,BSCS_END

 MOV A,37H

 CJNE A,#01H,BSCS_LL

 MOV A,#0AH

 SJMP BSCS_LP

BSCS_LL:CJNE A,#02H,BSCS_LP

 MOV A,#14H

BSCS_LP:ADD A,36H

 RL A

 MOV BSCSCC,A

 CLR BSCSBZ

BSCS_END: RET

;**********************闪烁报时******************************** 

SSBS: JNB BSKGBZ,SSBS_END

 JNB ZDBSBZ,SSBS_END

 JNB ZMBSBZ,SSBS_END

 CPL P2.6

 CPL     P2.7

 CLR ZMBSBZ

 DJNZ BSCSCC,SSBS_END

 CLR ZDBSBZ

 CLR P2.6

SSBS_END:RET

;************************延时子程序(5MS)************************

DELAY5MS:

 PUSH PSW

 SETB RS0

 SETB RS1

 MOV     R1,#25              ;延时子程序(5MS)

DL5_PA: MOV     R2,#100

        DJNZ    R2,$

        DJNZ    R1,DL5_PA       

        POP PSW

        RET

TAB: DB "TIME:",00h

TAB1: DB "DATE:",00h

TAB2: DB "01234567891"

TAB3: DB 0AH,06H,00H,0AH,06H,00H,0AH,03H ;用于比较调整时间时的比较

TAB4: DB 0AH,04H,00H,0AH,02H,00H,0AH,0AH,0AH,0AH;用于调整日期时的比较

TAB5: DB 00H,03H,02H,03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;用于天数十位比较

TAB6: DB 00H,02H,09H,02H,01H,02H,01H,02H,02H,01H,02H,01H,02H;用于天数个位比较

        END

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-22
自己学着做吧,这个问题说难不算难,但是要给你代码你也很难看明白的,而且硬件不同的话程序也不同了。如果你能设计出数字钟了,增加其它闹钟,定时器就不难了,直接在中断程序了写代码就可以了。主程序用来设定时钟,或者别的。
我就做了一个懂功能的,有10组闹钟,定时控制继电器,红外线遥控,很方便本回答被网友采纳
第2个回答  2009-11-24
我有51+DS1302+18B20+LCD的现货,C语言的,而且有protues仿真,要不要?要的话跟我说下邮箱。

基于单片机的数字时钟设计方案
数字钟〔★〕这里用了两种编写方法(即汇编语言与C语言)(1. 开机时,显示12:00:00的时间开始计时;(2. P0.0\/AD0控制“秒”的调整,每按一次加1秒;(3. P0.1\/AD1控制“分”的调整,每按一次加1分;(4. P0.2\/AD2控制“时”的调整,每按一次加1个小时;2. 电路...

单片机数字钟如何设置两个起闹时间并同时开启闹钟功能
1、首先在单片机数字钟待机界面依次打开手机应用程序。2、其次点击时钟进入闹铃设置页面。3、最后选择右侧+创建新闹铃级可以设置两个闹钟。

急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~_百度知...
用89C51控制3个HC595,前两个595接8段数码显示管,显示“0”~“9”每秒跳动一次.第3个HC595接8个LED灯,每隔1秒闪烁1次.include<at89x52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90...

用单片机设计一个时钟,可显示时和分,可以调时间,也要有闹钟功能,要有设...
其实不用定时中断也能实现功能:include<reg51.h> 主函数 unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定义0-9数组 unsigned int tmp;定义变量 void delay(unsigned int xms)定义延时函数 {unsigned int j,i;for(i=0;i<xms;i++)for(j=0;j<100...

单片机数字钟,开机时显示12:00:00
1、编写代码:使用所选单片机的编程语言(如C、C++、Python等),编写程序代码来实现数字钟功能。可以使用定时器来计时,并在开机时将显示设置为12:00:00。2、显示控制:连接合适的显示设备(如7段LED显示器、LCD显示屏等),通过控制单片机的输出端口,将正确的数字显示在显示器上。3、初始化设置:...

基于单片机51系列及DS1302时钟芯片数字电子钟的制作。求电路总原理图...
这是1602电路,和时钟电路。元件基本差不多。电路如图 include <intrins.h> define uchar unsigned char define uint unsigned int sbit ds1302_RST =P2^0;sbit ds1302_IO =P2^1;sbit ds1302_SCLK=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit A1=P3^0;sbit A2=P3^1;sbit A3=P3^2;...

基于单片机的数字时钟设计开题报告
sbit A1=P2^0;sbit A2=P2^1;sbit A3=P2^2;sbit A4=P2^3;sbit beep=P1^4;unsigned char Shiwan;unsigned char Wanwei;unsigned char Qianwei;unsigned char Baiwei;unsigned char Shiwei;\/\/定义十位 unsigned char Gewei,Naoling1,Naoling2,Naoling3,Naoling4; \/\/定义个位 static ...

我正在写一篇基于AT89C52单片机的数字时钟设计。下面是我的论文后面的...
具体是多少时间需要综合考虑,比如你要处理定时闹钟,每1秒钟处理一次即可,如果要处理按键,这个时间可以提高到100ms,这样按键时不会有明显的迟顿。综合考虑会一般取最短的一个延时,控制主循环的延时就可以。以我的经验,你的系统只需要开一个比较短的定时中断进行显示扫描,并在定时中断处理过程中顺便...

请问一个基于MSP430单片机的数字时钟用的3.2768MHZ的晶振,为什么用3.2768...
应该是32.768KHz吧?它正常运行时可以使用内部DCO产生1M至16M的频率,也可以外接6M、12M的晶振(这个频率常用在8051上,因为它内部有6分频,所以算出来的主频是整数)。但作为数字时钟时适合32.768K,有点包括:1、这个频率的晶体广泛用于电子钟上,货源稳定,价格低,质量可靠 2、这个频率相对于1M以上...

菜鸟一个,用单片机做了个数字钟,带语音播报,问题:语音播报的时候,时 ...
别用while(xx==1);在那傻等。可以使用中断或者扫描法检测一段语音是否放完。发送指令很快,卡进程的是等语音放完这段时间,而语音芯片这段时间内并不需要单片机干涉。放完后自然会给出一个状态的,这也是每个语音芯片都有一个状态端,可能是INH,BUSY等,但是肯定会有的。

相似回答