⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.lis

📁 1302+lcd时钟显示C语言程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02EC 0E940000          xcall push_gset3
 02F0 5801              movw R10,R16
 02F2                   .dbline -1
 02F2                   .dbline 168
 02F2           ; }
 02F2           ; /*******************************************
 02F2           ; 函数名称: DS1302_setT
 02F2           ; 功    能: 设置DS1302的时间
 02F2           ; 参    数: ptTimeD--设置时间数组指针
 02F2           ; 返回值  : 无
 02F2           ; /********************************************/
 02F2           ; void DS1302_setT(uchar ptTimeD[])
 02F2           ; {
 02F2                   .dbline 170
 02F2           ;     uchar i;
 02F2           ;     uchar addr = 0x80;                                  //写入地址从秒寄存器开始
 02F2 40E8              ldi R20,128
 02F4                   .dbline 171
 02F4           ;     DS1302_writeD(C_WP|WR,UPROTECT); //控制命令,WP位为0,允许写操作
 02F4 2227              clr R18
 02F6 0EE8              ldi R16,142
 02F8 BDDF              xcall _DS1302_writeD
 02FA                   .dbline 172
 02FA           ;       Delayms(5);
 02FA 05E0              ldi R16,5
 02FC 10E0              ldi R17,0
 02FE 6DDF              xcall _Delayms
 0300                   .dbline 173
 0300           ;     for(i=0;i<7;i++)
 0300 6627              clr R22
 0302 0CC0              xjmp L64
 0304           L61:
 0304                   .dbline 174
 0304                   .dbline 175
 0304 E62F              mov R30,R22
 0306 FF27              clr R31
 0308 EA0D              add R30,R10
 030A FB1D              adc R31,R11
 030C 2081              ldd R18,z+0
 030E 042F              mov R16,R20
 0310 B1DF              xcall _DS1302_writeD
 0312                   .dbline 176
 0312 4E5F              subi R20,254    ; addi 2
 0314                   .dbline 177
 0314 01E0              ldi R16,1
 0316 10E0              ldi R17,0
 0318 60DF              xcall _Delayms
 031A                   .dbline 178
 031A           L62:
 031A                   .dbline 173
 031A 6395              inc R22
 031C           L64:
 031C                   .dbline 173
 031C 6730              cpi R22,7
 031E 90F3              brlo L61
 0320                   .dbline 179
 0320           ;     {
 0320           ;         DS1302_writeD(addr|WR,ptTimeD[i]);   // 秒 分 时 日 月 星期 年         
 0320           ;         addr+=2;
 0320           ;               Delayms(1);
 0320           ;     }
 0320           ;     DS1302_writeD(C_WP|WR,PROTECT);           //控制命令,WP位为1,不允许写操作
 0320 20E8              ldi R18,128
 0322 0EE8              ldi R16,142
 0324 A7DF              xcall _DS1302_writeD
 0326                   .dbline -2
 0326           L60:
 0326 0E940000          xcall pop_gset3
 032A                   .dbline 0 ; func end
 032A 0895              ret
 032C                   .dbsym r addr 20 c
 032C                   .dbsym r i 22 c
 032C                   .dbsym r ptTimeD 10 pc
 032C                   .dbend
 032C                   .dbfunc e DS1302_getT _DS1302_getT fV
 032C           ;              i -> R20
 032C           ;           time -> R22,R23
                        .even
 032C           _DS1302_getT::
 032C 0E940000          xcall push_gset2
 0330 B801              movw R22,R16
 0332                   .dbline -1
 0332                   .dbline 188
 0332           ; }
 0332           ; /*******************************************
 0332           ; 函数名称: DS1302_getT
 0332           ; 功    能: 读取DS1302的当前时间
 0332           ; 参    数: time[]--读取的时间数组
 0332           ; 返回值  : 无
 0332           ; /********************************************/
 0332           ; void DS1302_getT(uchar time[])
 0332           ; {
 0332                   .dbline 199
 0332           ;     uchar i;
 0332           ; ////////下面的是单次读写//////////////////////////    
 0332           ;    /* uchar addr = 0x80;                                                //读取地址从秒寄存器开始 
 0332           ;     for(i=0;i<7;i++)
 0332           ;     {
 0332           ;         time[i]=DS1302_readD(addr|RD);    // 秒 分 时 日 月 星期 年        
 0332           ;         addr+=2;
 0332           ;     }*/
 0332           ; ////////////////////////////////////////////////////  
 0332           ;       /////////下面是多字节读取/////////////// 
 0332           ;        PORTB&=~BIT(RTC_CS);    //拉低片选端
 0332 C498              cbi 0x18,4
 0334                   .dbline 200
 0334           ;      Delayus(10);
 0334 0AE0              ldi R16,10
 0336 10E0              ldi R17,0
 0338 4EDF              xcall _Delayus
 033A                   .dbline 201
 033A           ;      PORTB|=BIT(RTC_CS);       //拉高片选端
 033A C49A              sbi 0x18,4
 033C                   .dbline 202
 033C           ;      Delayus(10);                      //调整片选脉冲
 033C 0AE0              ldi R16,10
 033E 10E0              ldi R17,0
 0340 4ADF              xcall _Delayus
 0342                   .dbline 203
 0342           ;        DS1302_writeB(0xbf);       // 0xbf:时钟多字节读取命令 
 0342 0FEB              ldi R16,191
 0344 64DF              xcall _DS1302_writeB
 0346                   .dbline 204
 0346           ;      for (i=0;i<8;i++)       //时间数据的存放格式是:
 0346 4427              clr R20
 0348 07C0              xjmp L69
 034A           L66:
 034A                   .dbline 205
 034A                   .dbline 206
 034A 77DF              xcall _DS1302_readB
 034C E42F              mov R30,R20
 034E FF27              clr R31
 0350 E60F              add R30,R22
 0352 F71F              adc R31,R23
 0354 0083              std z+0,R16
 0356                   .dbline 207
 0356           L67:
 0356                   .dbline 204
 0356 4395              inc R20
 0358           L69:
 0358                   .dbline 204
 0358 4830              cpi R20,8
 035A B8F3              brlo L66
 035C                   .dbline 209
 035C           ;        {                        //秒,分,时,日,月,星期,年,控制
 035C           ;          time[i]=DS1302_readB(); //【7个数据(BCD格式)+1个控制】 
 035C           ;        }
 035C           ;                               
 035C           ;      PORTB&=~BIT(RTC_CS);      //拉低片选端
 035C C498              cbi 0x18,4
 035E                   .dbline 211
 035E           ;  ///////////////////////////////////////////////
 035E           ;      PORTB&=~BIT(RTC_CLK);                                      //拉低时钟端(时钟端在不操作时为低)
 035E C798              cbi 0x18,7
 0360                   .dbline -2
 0360           L65:
 0360 0E940000          xcall pop_gset2
 0364                   .dbline 0 ; func end
 0364 0895              ret
 0366                   .dbsym r i 20 c
 0366                   .dbsym r time 22 pc
 0366                   .dbend
 0366                   .dbfunc e DS1302_init _DS1302_init fV
                        .even
 0366           _DS1302_init::
 0366                   .dbline -1
 0366                   .dbline 242
 0366           ; }
 0366           ; /*******************************************
 0366           ; 函数名称: DS1302_check
 0366           ; 功    能: 检测DS1302是否正常工作
 0366           ; 参    数: 无
 0366           ; 返回值  : exist--为TRUE为检测到DS1302,为FALSE为没检测到
 0366           ; /********************************************/
 0366           ; /*uchar DS1302_check(void)
 0366           ; {
 0366           ;       uchar exist;
 0366           ;     DS1302_writeD(C_WP|WR,UPROTECT);            //写入写允许命令
 0366           ;     DS1302_writeD(C_RAMBASE|WR,0xA5);           //RAM0写入0xA5
 0366           ;     exist=DS1302_readD(C_RAMBASE|RD);           //读取RAM0
 0366           ;     if(exist==0xA5)   
 0366           ;       {
 0366           ;        exist=TRUE;                                                      //如果读取值与写入值相等,返回TRUE
 0366           ;       }
 0366           ;     else      
 0366           ;       {
 0366           ;        exist=FALSE;                                                     //如果读取值与写入值不相等,返回FALSE
 0366           ;       }       
 0366           ;       return exist;
 0366           ; }*/
 0366           ; /*******************************************
 0366           ; 函数名称: DS1302_init
 0366           ; 功    能: 初始化DS1302
 0366           ; 参    数: 无
 0366           ; 返回值  : 无
 0366           ; /********************************************/
 0366           ; void DS1302_init(void)
 0366           ; {
 0366                   .dbline 243
 0366           ;  DS1302_writeD(C_WP|WR,UPROTECT);               //写入写允许命令
 0366 2227              clr R18
 0368 0EE8              ldi R16,142
 036A 84DF              xcall _DS1302_writeD
 036C                   .dbline 244
 036C           ;  DS1302_writeD(C_SEC|WR,CLK_START);           //启动振荡器,DS1302开始工作
 036C 2227              clr R18
 036E 00E8              ldi R16,128
 0370 81DF              xcall _DS1302_writeD
 0372                   .dbline 245
 0372           ;  DS1302_writeD(C_WP|WR,PROTECT);              //控制命令,WP位为1,不允许写操作   
 0372 20E8              ldi R18,128
 0374 0EE8              ldi R16,142
 0376 7EDF              xcall _DS1302_writeD
 0378                   .dbline -2
 0378           L70:
 0378                   .dbline 0 ; func end
 0378 0895              ret
 037A                   .dbend
 037A                   .dbfunc e BCD_ASCII _BCD_ASCII fV
 037A           ;          ptasc -> R18,R19
 037A           ;            BCD -> R16
                        .even
 037A           _BCD_ASCII::
 037A                   .dbline -1
 037A                   .dbline 255
 037A           ; }
 037A           ; /*******************************************
 037A           ; 函数名称: BCD_ASCII
 037A           ; 功    能: 将压缩BCD码转换成ascii码
 037A           ; 参    数: BCD--将要转换的压缩BCD码
 037A           ;                 ptasc--转换后的ASCII码数组指针
 037A           ; 返回值  : 无
 037A           ; /********************************************/
 037A           ; void BCD_ASCII(uchar BCD,uchar ptasc[])
 037A           ; {     
 037A                   .dbline 256
 037A           ;       ptasc[0]=BCD/16|0x30;   //0X58  35  38 //转换十位
 037A 802F              mov R24,R16
 037C 8295              swap R24
 037E 8F70              andi R24,#0x0F
 0380 8063              ori R24,48
 0382 F901              movw R30,R18
 0384 8083              std z+0,R24
 0386                   .dbline 257
 0386           ;       ptasc[1]=BCD&0x0F|0x30;  //转换个位
 0386 802F              mov R24,R16
 0388 8F70              andi R24,15
 038A 8063              ori R24,48
 038C 8183              std z+1,R24
 038E                   .dbline -2
 038E           L71:
 038E                   .dbline 0 ; func end
 038E 0895              ret
 0390                   .dbsym r ptasc 18 pc
 0390                   .dbsym r BCD 16 c
 0390                   .dbend
                        .area lit(rom, con, rel)
 0000           L73:
 0000 0000              .byte 0,0
 0002 2D00              .byte 45,0
 0004 002D              .byte 0,45
 0006 0000              .byte 0,0
 0008 2000              .byte 32,0
 000A 00                .byte 0
 000B           L74:
 000B 0000              .byte 0,0
 000D 3A00              .byte 58,0
 000F 003A              .byte 0,58
 0011 0000              .byte 0,0
 0013 00                .byte 0
                        .area text(rom, con, rel)
 0390                   .dbfile D:\单片机\ds1302\ds1302_end\ds1302.c
 0390                   .dbfunc e Disp_time _Disp_time fV
 0390           ;          line1 -> y+11
 0390           ;          line2 -> y+2
 0390           ;            asc -> y+0
 0390           ;              i -> R20
 0390           ;           time -> R22,R23
                        .even
 0390           _Disp_time::
 0390 0E940000          xcall push_gset2
 0394 B801              movw R22,R16
 0396 6697              sbiw R28,22
 0398                   .dbline -1
 0398                   .dbline 266
 0398           ; }
 0398           ; /*******************************************
 0398           ; 函数名称: Disp_time
 0398           ; 功    能: 在1602液晶上显示当前时间(第1行格式:年-月-日 星期;第2行格式:时-分-秒)
 0398           ; 参    数: time[]--时间数组
 0398           ; 返回值  : 无
 0398           ; /********************************************/
 0398           ; void Disp_time(uchar time[])
 0398           ; {
 0398                   .dbline 268
 0398           ;  uchar i,asc[2];
 0398           ;  uchar line1[11]={0,0,'-',0,0,'-',0,0,' ',0,'\0'};//显示第1行的字符数组

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -