PIC单片机多功能万学年历电子钟.docx

上传人:b****6 文档编号:6566657 上传时间:2023-01-08 格式:DOCX 页数:14 大小:20.82KB
下载 相关 举报
PIC单片机多功能万学年历电子钟.docx_第1页
第1页 / 共14页
PIC单片机多功能万学年历电子钟.docx_第2页
第2页 / 共14页
PIC单片机多功能万学年历电子钟.docx_第3页
第3页 / 共14页
PIC单片机多功能万学年历电子钟.docx_第4页
第4页 / 共14页
PIC单片机多功能万学年历电子钟.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

PIC单片机多功能万学年历电子钟.docx

《PIC单片机多功能万学年历电子钟.docx》由会员分享,可在线阅读,更多相关《PIC单片机多功能万学年历电子钟.docx(14页珍藏版)》请在冰豆网上搜索。

PIC单片机多功能万学年历电子钟.docx

PIC单片机多功能万学年历电子钟

PIC单片机-多功能万年历电子钟

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

  LISTP=PIC16F72

  #INCLUDE

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

#DEFINE DIO_A        PORTA   ;RA端口寄存器

#DEFINE DIO_B        PORTB   ;RB端口寄存器

#DEFINE DIO_C        PORTC   ;RC端口寄存器

#DEFINE SIO_A        TRISA   ;RA端口输入、输出设定

#DEFINE SIO_B        TRISB   ;RB端口输入、输出设定

#DEFINE SIO_C        TRISC   ;RC端口输入、输出设定

;===============数码管共脚位定义=============================

#DEFINE HOUH_LED     PORTB,3 ;数码管位选

#DEFINE HOUL_LED     PORTB,2 ;数码管位选

#DEFINE MINH_LED     PORTB,1 ;数码管位选

#DEFINE MINL_LED     PORTB,0 ;数码管位选

#DEFINE SEC_LED      PORTB,4 ;LED位选

;===============按键脚位定义=================================

#DEFINE SETUP_KEY    PORTA,3 ;时钟设置键

#DEFINE INCREASE_KEY PORTA,4 ;时间加键

#DEFINE DECREASE_KEY PORTA,5 ;时间减键

;==============DS1302引脚定义==============================

#DEFINE T_CLK        PORTA,0 ;1302时钟->7

#DEFINE T_IO         PORTA,1 ;1302数据输入/输出->6

#DEFINE T_RST        PORTA,2 ;1302使能位->5

#DEFINE SET_IO       TRISA,1 ;设定1302I_O

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

#DEFINE FLAG_10S     FLAG,7  ;

#DEFINE FLAG_SETUP   FLAG,6  ;

#DEFINE FLAG_500MS   FLAG,5  ;

#DEFINE FLAG_250MS   FLAG,4  ;

#DEFINE FLAG_MINUTE  FLAG,3  ;

#DEFINE FLAG_HOUR    FLAG,2  ;

#DEFINE FLAG_TIME    FLAG,1  ;

#DEFINE FLAG_DATE    FLAG,0  ;

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

#DEFINE FLAG_YEAR    FLAG1,7  ;

#DEFINE FLAG_DAY     FLAG1,6  ;

#DEFINE FLAG_DATA    FLAG1,5  ;

;*********************寄存器定义***************************

ID_TEMP      EQU  72H

W_TEMP       EQU  73H

STATUS_TEMP  EQU  74H

PCLATH_TEMP  EQU  75H

 ERRORLEVEL-302

 CBLOCK 020H

   SEC                        ;秒寄存器

   MINUTE                     ;分寄存器

   HOUR                       ;小时寄存器

   DATE                       ;日寄存器

   MONTH                      ;月寄存器

   DAY                        ;星期寄存器

   YEAR                       ;年寄存器

   WRITE_ENABLED              ;写使能寄存器

   DS1302_RX                  ;保存接受的1个数据

   DS1302_TX                  ;准备写入到DS1302的一个数据

   BYTE_COUNT                 ;字节数寄存器

   BIT_COUNT                  ;BIT数寄存器

   TEMP1                      ;转换进制用

   TIMER0                     ;\

   TIMER1                     ;定时用

   TIMER2                     ;/

;-------------------------------------

   FLAG

   FLAG1

   FSR_TEMP

   COUNT

   COUNT1                     ;显示数据位数

   COUNT2                     ;显示数据表中位置

   COUNT3                     ;显示位置

   COUNT4

   CNT

   CNT0

   CNT1

   CNT2

   SHOW_MIN

   SHOW_HOU

   DATA_INC

   DATEP

   C1                         ;

   C2                         ;

   C3                         ;

 ENDC

;*******************宏定义*********************************

BANK1MACRO                    ;体1

   BSR      STATUS,RP0

   BCR      STATUS,RP1        

   ENDM

BANK0MACRO                    ;体0

   BCR      STATUS,RP0

   BCR      STATUS,RP1

   ENDM

;-------------------------------------------------------------------

;子程序名:

;功   能:

中断服务主程序入口

;功能说明:

;-----------------------------------------------------------------            

INTERMIT_SERVE:

;---------现场保护-----------------------

   STWR    W_TEMP           ;          

   SWAPR    STATUS,W         ;

   CLRR     STATUS           ;

   STWR    STATUS_TEMP      ; 

   LDR     PCLATH,W         ;

   STWR    PCLATH_TEMP      ;

   CLRR     PCLATH           ;

;-------中断服务-------------------------  

   INCR     TIMER0,F         ;\

   LDWI    .100              ;\

   XORWR    TIMER0,W         ;判断是否到250MS

   BTSS    STATUS,Z         ;/

   LJUMP     AAA              ;ON,

   LDWI    B'00010000'      ;\每到250MS取反一次标志位1

   XORWR    FLAG,F           ;/     

   CLRR     TIMER0

   INCR     TIMER1,F         ;\

   LDWI    .2               ;\

   XORWR    TIMER1,W         ;判断是否到500MS

   BTSS    STATUS,Z         ;/

   LJUMP     AAA              ;ON,

   LDWI    B'00100000'      ;\每到500MS取反一次标志位1

   XORWR    FLAG,F           ;/                 

   CLRR     TIMER1           ;YES,

   INCR     TIMER2,F         ;\

   LDWI    .20              ;\

   XORWR    TIMER2,W         ;判断是否到5S

   BTSS    STATUS,Z         ;/

   LJUMP     $+3              ;/

   CLRR     TIMER2           ;YES,     

   BSR      FLAG_10S         ;

DP_SEC

   LCALL     PLAY_SEC

   MOVFW    DIO_B

   ANDWI    0F0H

   STWR    DIO_B

   CLRR     DIO_C

   INCR     COUNT,F

   LDWI    01H           ;;;;;;;;;;;;;;;;;

   XORWR    COUNT,W

   BTSC    STATUS,Z

   LCALL     PLAY_HOUR_H      ;

   LDWI    02H           ;;;;;;;;;;;;;;;;;;;

   XORWR    COUNT,W

   BTSC    STATUS,Z

   LCALL     PLAY_HOUR_L      ;

   LDWI    03H           ;;;;;;;;;;;;;;;;;;

   XORWR    COUNT,W

   BTSC    STATUS,Z

   LCALL     PLAY_MINUTE_H    ;

   LDWI    04H           ;;;;;;;;;;;;;;;;

   XORWR    COUNT,W

   BTSS    STATUS,Z

   LJUMP     $+3

   CLRR     COUNT

   LCALL     PLAY_MINUTE_L    ;

   LDWI    0D9H             ;\

   STWR    TMR0             ;/写入TMR0初始值

   BCR      INTCON,T0IF      ;清TMR0中断标志

;-------恢复现场-------------------  

   LDR     PCLATH_TEMP,W    ;

   STWR    PCLATH           ;

   SWAPR    STATUS_TEMP,F    ;

   STWR    STATUS           ;

   SWAPR    W_TEMP,F         ;

   SWAPR    W_TEMP,W         ;

   RTFI                     ;中断返回

;.............................................................              

;子程序名:

 

;功   能:

清寄存器

;功能说明:

;................................................................ 

CLR_RAM:

   LDWI    20H

   STWR    FSR

   CLRR     INDF

   INCR     FSR,F

   BTSS    FSR,7

   LJUMP     $-3

   RTIW    00H

;--------------------------------------------------------------------------

;子程序名:

;功   能:

查表子程序

;功能说明:

用于显示0-9时钟数据字型码,共阳LED无小数点

;---------------------------------------------------------------------------  

TABLE:

 

   ADDWR       PCL,F

   RTIW    B'11001111';0

   RTIW    B'00000101';1

   RTIW    B'11011100';2

   RTIW    B'10011101';3

   RTIW    B'00010111';4

   RTIW    B'10011011';5

   RTIW    B'11011011';6

   RTIW    B'00001101';7

   RTIW    B'11011111';8

   RTIW    B'10011111';9

   ;...........Program Initialization........................................    

;子程序名:

单片机复位进入点 

;功   能:

;功能说明:

;............................................................................   

PORT_INIT:

   CLRR     INTCON           ;清除中断

   BANK1                      ;\

   LDWI    B'00000000'      ;\   

   STWR    SIO_C            ;\RC口设为输出

   LDWI    B'11100000'      ;\   

   STWR    SIO_B            ;/RB口设为输入

   LDWI    B'11111000'      ;\   

   STWR    SIO_A            ;

   LDWI    06H              ;

   STWR    ADCON1           ;A口配置为普通数字I/O

   LDWI    B'10000101'      ;\设TMR0分频1:

64

   STWR    OPTION_REG       ;/RB口同时输入、出时不能上拉

   BANK0                      ;

;----------------------------------

   CLRR     DIO_A            ;清控制位

   CLRR     DIO_B

   CLRR     DIO_C            ;\关闭显示

   LDWI    0DAH             ;\写入TMR0初始值

   STWR    TMR0             ;/2.5MS中断一次

   LDWI    B'10100000'      ;\开TMR0中断使能位

   STWR    INTCON           ;/    

   LCALL     CLR_RAM          ;->清寄存器

   LCALL     DS1302_INIT      ;->初始化DS1302

   LCALL     READ_DS1302      ;

   ;CALL     DATE_INIT         ;\

   ;CALL     WRITE_DS1302      ;/写数据

   LCALL     QINDON_INIT

   MOVFW    DATE

   STWR    DATEP

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

;程序名:

;功   能:

;功能说明:

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MAIN_PROGRAM:

   BTSC    FLAG_SETUP

   LJUMP     $+3

   ;NOP

   ;NOP

   LCALL     DELAY250MS       

   LCALL     READ_DS1302     ;

   BTSS    FLAG_10S         ;检测是否到5S

   LJUMP     $+3              ;

   CLRR     FLAG             ;3S到,退出校正时间状态

   CLRR     FLAG1            ;

   MOVFW    DATE

   XORWR    DATEP,W

   BTSC    STATUS,Z

   LJUMP     TEST_KEY

   LDWI    030H

   SUBWR    SEC,W

   BTSS    STATUS,Z  

   LJUMP     TEST_KEY         ;->检测按键

   LDWI    005H

   SUBWR    SEC,F

   LCALL     WRITE_DS1302     ;写入设置的数据

   MOVFW    DATE

   STWR    DATEP       

   LJUMP     MAIN_PROGRAM     ;循环

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

TEST_KEY:

   NOP                        ;\

   LDR     DIO_A,W          ;\

   ANDWI    B'00111000'      ;\

   XORWI    B'00111000'      ;检测是否有按键按下?

   BTSC    STATUS,Z         ;/

   LJUMP     MAIN_PROGRAM     ;/

   BCR      FLAG_10S         ;YES,重新启动5S到标记

   CLRR     TIMER2           ;/

;------------------------------------------------------

   BTSC    FLAG_DATA        ;显示日期时禁止调整

   LJUMP     MAIN_PROGRAM     ;/ 

   BTSS    SETUP_KEY        ;检测是否按时间设置键?

   LJUMP     SETUP            ;YES,跳设置键处理程序     

   BTSS    INCREASE_KEY     ;检测是否按增键?

   LJUMP     INCREASE         ;YES,

   BTSS    DECREASE_KEY     ;检测是否按减键?

   LJUMP     DECREASE         ;YES,

   LJUMP     MAIN_PROGRAM     ;

;时间设置键处理--------------------

SETUP:

   LCALL     DELAY_10MS       ;\

   BTSS    SETUP_KEY        ;检测设置键是否松开?

   LJUMP     $-2              ;/ 

   LCALL     DELAY_10MS       ;   

   LDWI    SHOW_HOU             ;

   STWR    FSR              ;第一个调整单元

   LDWI    24H

   STWR    DATA_INC         ;调整最大值

   BSR      FLAG_SETUP

   BSR      FLAG_HOUR

   BSR   

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1