PIC16F887数码管显示10 37 81怎么编写程序 小白求教

2019-03-25 19:07发布

最好有详细程序参考下 现在就显示3个比较少 我想知道多了的话怎么办 显示的数字没有规律排列的 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
dingzy_2002
2019-03-26 05:31
这是DS1302读写子程序:
;*************************************
;        DS1302读写与设置子程序
;*************************************
;说明:
;用于对MAXIN(DALLAS)的DS1302进行读写与相关设置
;DS1302写指令格式:(低位在前方式收发数据)
;-----------------------------------------------------------
;| BIT7 |  BIT6  | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
;|  1   | RAM/CK |  A4  |  A3  |  A2  |  A1  |  A0  | R/W  |
;-----------------------------------------------------------
;第6位为L时,读写时钟;为H时,读写内部RAM
;第0位为L时,写DS1302;为H时,读DS1302
        ;#DEFINE        DS1302_RAM_R        0xC1
        ;#DEFINE        DS1302_RAM_W        0xC0
        ;#DEFINE        DS1302_RTC_R        0x81
        ;#DEFINE        DS1302_RTC_W        0X80
;相关读写RTC数据指令(单字节模式下):
        ;#DEFINE        DS1302_SEC_W        0X80
        ;#DEFINE        DS1302_SEC_R        0x81;秒读写
;        BIT7=振荡时钟使能(0),BIT6~4=十位秒数据,BIT3~0=个位秒数据
        ;#DEFINE        DS1302_MIN_W        0X82
        ;#DEFINE        DS1302_MIN_R        0X83;分读写
;        BIT7=未用,BIT6~4=十位分钟数据,BIT3~0=个位分钟数据
        ;#DEFINE        DS1302_HOUR_W        0X84
        ;#DEFINE        DS1302_HOUR_R        0X85;时读写
;        BIT7=12/24制指示,12H=1,24H=0;
;        BIT6:未用,读为0
;        BIT5:24小时制为小时的十位数据;12小时制为上午(0)/下午(1)指示
;        BIT4:小时数据的十位
;        BIT3~0:个位小时数据.
        ;#DEFINE        DS1302_DATE_W        0X86
        ;#DEFINE        DS1302_DATE_R        0X87;日读写
;        BIT7~6:未用,读为0
;        BIT5~4:十位日期
;        BIT3~0:个位日期
        ;#DEFINE        DS1302_MONTH_W        0X88
        ;#DEFINE        DS1302_MONTH_R        0X89;月读写
;        BIT7~5:未用,读为0
;        BIT4:十位月份
;        BIT3~0:个位月份
        ;#DEFINE        DS1302_DAY_W        0X8A
        ;#DEFINE        DS1302_DAY_R        0X8B;周读写
;        BIT7~3:未用,读为0
;        BIT2~0:星期数据
        ;#DEFINE        DS1302_YEAR_W        0X8C
        ;#DEFINE        DS1302_YEAR_R        0X8D;年读写
;        BIT7~4:十位年数据(固定为20)
;        BIT3~0:个位年
        ;#DEFINE        DS1302_SET1_W        0X8E
        ;#DEFINE        DS1302_SET1_R        0X8F;配置1读写
;        BIT7:        写保护,H为禁止写保护
;        BIT6~0:未用,读为0
        ;#DEFINE        DS1302_SET2_W        0X90
        ;#DEFINE        DS1302_SET2_R        0X91;配置2读写
;        BIT7~4:涓流充电使能=1010,其它数据不使能
;        BIT3~2:充电二极管选择:01=1个二极管,10=2个二极管串联
;        BIT1~0:充电电阻选择:00=0Ω,01=2KΩ,10=4KΩ,11=8KΩ
;------------------------------------------------
;需设置的管脚:
;        #DEFINE        RTC_CS        PORTC,0;DS1302片选,H=选通
;        #DEFINE        RTC_DA        PORTC,1;DS1302数据,I/O
;        #DEFINE        RTC_CK        PORTC,2;DS1302时钟
;需使用的寄存器:
;        RTC_SECOND        EQU        50H                ;秒数据
;        #DEFINE        RTC_MINUTES        RTC_SECOND+1;分钟数据
;        #DEFINE        RTC_HOUR                RTC_SECOND+2;小时数据
;        #DEFINE        RTC_DATE                RTC_SECOND+3;日期数据
;        #DEFINE        RTC_MONTH        RTC_SECOND+4;月份数据
;        #DEFINE        RTC_DAY                RTC_SECOND+5;日期数据
;        #DEFINE        RTC_YEAR                RTC_SECOND+6;年数据
;        #DEFINE        RTC_SET1                RTC_SECOND+7
;        #DEFINE        RTC_SET2                RTC_SECOND+8;涓流充电控制
;涉及到的工作寄存器:
;        W:中间寄存器
;        R0:命令传输寄存器
;        R1:数据传输寄存器
;        R7:读取字节数寄存器
;        R6:位发送控制寄存器
;        FSR:INDF:间接寄存器
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;        子程序开始
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;*************************************
;DS1302读出时钟数据程序:
;*************************************
DS1302_DATA_READ:
        MOVLW        .7
        MOVWF        R7
        MOVLW        DS1302_SEC_R
        MOVWF        R2
        MOVLW        RTC_SECOND
        MOVWF        FSR

        MOVFW        R2
        CALL        DS1302_RTC_READ
        MOVWF        INDF
        INCF        FSR
        INCF        R2
        INCF        R2
        DECFSZ        R7
        GOTO        $-7
        RETURN
;*************************************
;DS1302初始化程序:
;*************************************
DS1302_INIT:
        CALL        DS1302_DATA_READ
        ;写保护关闭
DS1302_WP_DISABLE:
        CLRF        R1
        MOVLW        DS1302_SET1_W
        CALL        DS1302_RTC_WRITE
DS1302_CHARGE:
        ;设置涓流充电参数:
        MOVLW        B'00001011';B'10101011';(涓流充电允许=1010,2个二极管=10,充电限流电阻8KΩ=11)
        MOVWF        R1
        MOVLW        DS1302_SET2_W
        CALL        DS1302_RTC_WRITE
DS1302_HOUR_SYS:
        ;设置时间制:若是12小时制,则改为24小时制
        BTFSS        RTC_HOUR,7
        GOTO        $+.6
        BCF        RTC_HOUR,7
        MOVFW        RTC_HOUR
        MOVWF        R1
        MOVLW        DS1302_HOUR_W
        CALL        DS1302_RTC_WRITE
        ;检查时钟振荡,停振则开启:
DS1302_OSO_SET:
        BTFSS        RTC_SECOND,7
        GOTO        $+.5
        CLRF        RTC_SECOND
        CLRF        R1
        MOVLW        DS1302_SEC_W
        CALL        DS1302_RTC_WRITE
        ;写保护打开:
DS1302_WP_ENABLE:
        MOVLW        80H
        MOVWF        R1
        MOVLW        DS1302_SET1_W
        CALL        DS1302_RTC_WRITE
        RETURN
;*************************************
;DS1302读数据子程序:
;*************************************
;W:给定的指令(含地址)
;R1:读出的数据
DS1302_RTC_READ:
        BCF        RTC_CK
        BSF        RTC_CS
        CALL        DS1302_OUT
        CALL        DS1302_IN
        BCF        RTC_CS       
        RETURN
;*************************************
;DS1302写数据子程序:
;*************************************
DS1302_RTC_WRITE:
;W:给定的指令(含地址)
;R1:需写入的数据
        BCF        RTC_CK
        BSF        RTC_CS
        CALL        DS1302_OUT
        MOVFW        R1
        CALL        DS1302_OUT
        BCF        RTC_CS
        RETURN
;-------------------------------------
;DS1302字节数据发送子程序:
;-------------------------------------
DS1302_OUT:
        MOVWF        R0
        MOVLW        .8
        MOVWF        R6
        BSF        STATUS,RP0
        BCF        TRISA,0;RTC_DA
        CLRF        STATUS
DS1302_OUT1:
        BCF        RTC_CK
        BTFSS        R0,0
        BCF        RTC_DA
        BTFSC        R0,0
        BSF        RTC_DA
        GOTO        $+1
        GOTO        $+1
        RRF        R0
        BSF        RTC_CK
        DECFSZ        R6
        GOTO        DS1302_OUT1

        BSF        STATUS,RP0
        BSF        TRISA,0;RTC_DA
        CLRF        STATUS
        BCF        RTC_CK
        RETURN
;-------------------------------------
;DS1302字节数据接收子程序:
;-------------------------------------
DS1302_IN:
        MOVLW        .8
        MOVWF        R6
DS1302_IN1:
        BTFSS        RTC_DA
        BCF        STATUS,C
        BTFSC        RTC_DA
        BSF        STATUS,C
        RRF        R0
        BSF        RTC_CK
        GOTO        $+1
        GOTO        $+1
        BCF        RTC_CK
        DECFSZ        R6
        GOTO        DS1302_IN1
        MOVFW        R0
        RETURN
       
       

一周热门 更多>