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

📄 ds1302.lis

📁 AVR单片机视频教程的课件和每一次课的源程序是学习AVR单片机的首选 第11节
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 031A 8183              std z+1,R24
 031C                   .dbline -2
 031C                   .dbline 262
 031C           ; }
 031C           L76:
 031C 0E940000          xcall pop_gset2
 0320                   .dbline 0 ; func end
 0320 0895              ret
 0322                   .dbsym r ptasc 20 pc
 0322                   .dbsym r BCD 22 c
 0322                   .dbend
                        .area lit(rom, con, rel)
 0000           L78:
 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           L79:
 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)
 0322                   .dbfile I:\AVR视频教程\视频教程\lesson11\ds1302\ds1302\ds1302.c
 0322                   .dbfunc e Disp_time _Disp_time fV
 0322           ;          line1 -> y+11
 0322           ;          line2 -> y+2
 0322           ;            asc -> y+0
 0322           ;              i -> R20
 0322           ;           time -> R22,R23
                        .even
 0322           _Disp_time::
 0322 0E940000          xcall push_gset2
 0326 B801              movw R22,R16
 0328 6697              sbiw R28,22
 032A                   .dbline -1
 032A                   .dbline 270
 032A           ; /*******************************************
 032A           ; 函数名称: Disp_time
 032A           ; 功    能: 在1602液晶上显示当前时间(第1行格式:年-月-日 星期;第2行格式:时-分-秒)
 032A           ; 参    数: time[]--时间数组
 032A           ; 返回值  : 无
 032A           ; /********************************************/
 032A           ; void Disp_time(uchar time[])
 032A           ; {
 032A                   .dbline 272
 032A           ;  uchar i,asc[2];
 032A           ;  uchar line1[11]={0,0,'-',0,0,'-',0,0,' ',0,'\0'};//显示第1行的字符数组
 032A 80E0              ldi R24,<L78
 032C 90E0              ldi R25,>L78
 032E FE01              movw R30,R28
 0330 3B96              adiw R30,11
 0332 0BE0              ldi R16,11
 0334 10E0              ldi R17,0
 0336 FA93              st -y,R31
 0338 EA93              st -y,R30
 033A 9A93              st -y,R25
 033C 8A93              st -y,R24
 033E 0E940000          xcall asgncblk
 0342                   .dbline 273
 0342           ;  uchar line2[9]={0,0,':',0,0,':',0,0,'\0'};             //显示第2行的字符数组
 0342 80E0              ldi R24,<L79
 0344 90E0              ldi R25,>L79
 0346 FE01              movw R30,R28
 0348 3296              adiw R30,2
 034A 09E0              ldi R16,9
 034C 10E0              ldi R17,0
 034E FA93              st -y,R31
 0350 EA93              st -y,R30
 0352 9A93              st -y,R25
 0354 8A93              st -y,R24
 0356 0E940000          xcall asgncblk
 035A                   .dbline 274
 035A           ;  for(i=0;i<3;i++)                                                               //为第2行的字符数组赋值
 035A 4427              clr R20
 035C 1EC0              xjmp L83
 035E           L80:
 035E                   .dbline 275
 035E                   .dbline 276
 035E 9E01              movw R18,R28
 0360 242E              mov R2,R20
 0362 3324              clr R3
 0364 E2E0              ldi R30,2
 0366 F0E0              ldi R31,0
 0368 E219              sub R30,R2
 036A F309              sbc R31,R3
 036C E60F              add R30,R22
 036E F71F              adc R31,R23
 0370 0081              ldd R16,z+0
 0372 C4DF              xcall _BCD_ASCII
 0374                   .dbline 277
 0374 83E0              ldi R24,3
 0376 849F              mul R24,R20
 0378 F001              movw R30,R0
 037A CE01              movw R24,R28
 037C 0296              adiw R24,2
 037E E80F              add R30,R24
 0380 F91F              adc R31,R25
 0382 2880              ldd R2,y+0
 0384 2082              std z+0,R2
 0386                   .dbline 278
 0386 83E0              ldi R24,3
 0388 849F              mul R24,R20
 038A F001              movw R30,R0
 038C CE01              movw R24,R28
 038E 0396              adiw R24,3
 0390 E80F              add R30,R24
 0392 F91F              adc R31,R25
 0394 2980              ldd R2,y+1
 0396 2082              std z+0,R2
 0398                   .dbline 279
 0398           L81:
 0398                   .dbline 274
 0398 4395              inc R20
 039A           L83:
 039A                   .dbline 274
 039A 4330              cpi R20,3
 039C 00F3              brlo L80
 039E                   .dbline 280
 039E           ;  {
 039E           ;   BCD_ASCII(time[2-i],asc);
 039E           ;   line2[i*3]=asc[0];
 039E           ;   line2[i*3+1]=asc[1];
 039E           ;  } 
 039E           ;  BCD_ASCII(time[6],asc);                                                //为第1行的年赋值
 039E 9E01              movw R18,R28
 03A0 FB01              movw R30,R22
 03A2 0681              ldd R16,z+6
 03A4 ABDF              xcall _BCD_ASCII
 03A6                   .dbline 281
 03A6           ;  line1[0]=asc[0];
 03A6 2880              ldd R2,y+0
 03A8 2B86              std y+11,R2
 03AA                   .dbline 282
 03AA           ;  line1[1]=asc[1];
 03AA 2980              ldd R2,y+1
 03AC 2C86              std y+12,R2
 03AE                   .dbline 283
 03AE           ;  BCD_ASCII(time[4],asc);                                                //为第1行的月赋值
 03AE 9E01              movw R18,R28
 03B0 FB01              movw R30,R22
 03B2 0481              ldd R16,z+4
 03B4 A3DF              xcall _BCD_ASCII
 03B6                   .dbline 284
 03B6           ;  line1[3]=asc[0];
 03B6 2880              ldd R2,y+0
 03B8 2E86              std y+14,R2
 03BA                   .dbline 285
 03BA           ;  line1[4]=asc[1];
 03BA 2980              ldd R2,y+1
 03BC 2F86              std y+15,R2
 03BE                   .dbline 286
 03BE           ;  BCD_ASCII(time[3],asc);                                                //为第1行的日赋值
 03BE 9E01              movw R18,R28
 03C0 FB01              movw R30,R22
 03C2 0381              ldd R16,z+3
 03C4 9BDF              xcall _BCD_ASCII
 03C6                   .dbline 287
 03C6           ;  line1[6]=asc[0];
 03C6 2880              ldd R2,y+0
 03C8 298A              std y+17,R2
 03CA                   .dbline 288
 03CA           ;  line1[7]=asc[1];
 03CA 2980              ldd R2,y+1
 03CC 2A8A              std y+18,R2
 03CE                   .dbline 289
 03CE           ;  BCD_ASCII(time[5],asc);                                                //为第1行的星期赋值
 03CE 9E01              movw R18,R28
 03D0 FB01              movw R30,R22
 03D2 0581              ldd R16,z+5
 03D4 93DF              xcall _BCD_ASCII
 03D6                   .dbline 290
 03D6           ;  line1[9]=asc[1];
 03D6 2980              ldd R2,y+1
 03D8 2C8A              std y+20,R2
 03DA           L96:
 03DA                   .dbline 292
 03DA           L97:
 03DA                   .dbline 292
 03DA           ;  
 03DA           ;  while(LCD1602_readBF());
 03DA 5ADE              xcall _LCD1602_readBF
 03DC 0023              tst R16
 03DE E9F7              brne L96
 03E0                   .dbline 293
 03E0           ;  LCD1602_gotoXY(1,2);                                                   //第1行从第3个位置开始显示
 03E0 22E0              ldi R18,2
 03E2 01E0              ldi R16,1
 03E4 63DE              xcall _LCD1602_gotoXY
 03E6                   .dbline 294
 03E6           ;  LCD1602_sendstr("20");                                                         //将07年显示为2007的形式
 03E6 00E0              ldi R16,<L99
 03E8 10E0              ldi R17,>L99
 03EA 3CDE              xcall _LCD1602_sendstr
 03EC                   .dbline 295
 03EC           ;  LCD1602_sendstr(line1);                                                //第1行显示
 03EC 8E01              movw R16,R28
 03EE 055F              subi R16,245  ; offset = 11
 03F0 1F4F              sbci R17,255
 03F2 38DE              xcall _LCD1602_sendstr
 03F4           L100:
 03F4                   .dbline 296
 03F4           L101:
 03F4                   .dbline 296
 03F4           ;  while(LCD1602_readBF());
 03F4 4DDE              xcall _LCD1602_readBF
 03F6 0023              tst R16
 03F8 E9F7              brne L100
 03FA                   .dbline 297
 03FA           ;  LCD1602_gotoXY(2,4);                                                           //第2行从第5个位置开始显示
 03FA 24E0              ldi R18,4
 03FC 02E0              ldi R16,2
 03FE 56DE              xcall _LCD1602_gotoXY
 0400                   .dbline 298
 0400           ;  LCD1602_sendstr(line2);                                                //第2行显示
 0400 8E01              movw R16,R28
 0402 0E5F              subi R16,254  ; offset = 2
 0404 1F4F              sbci R17,255
 0406 2EDE              xcall _LCD1602_sendstr
 0408                   .dbline -2
 0408                   .dbline 299
 0408           ; }
 0408           L77:
 0408 6696              adiw R28,22
 040A 0E940000          xcall pop_gset2
 040E                   .dbline 0 ; func end
 040E 0895              ret
 0410                   .dbsym l line1 11 A[11:11]c
 0410                   .dbsym l line2 2 A[9:9]c
 0410                   .dbsym l asc 0 A[2:2]c
 0410                   .dbsym r i 20 c
 0410                   .dbsym r time 22 pc
 0410                   .dbend
                        .area lit(rom, con, rel)
 0014           L104:
 0014 5059              .byte 'P,'Y
 0016 2301              .byte 35,1
 0018 0106              .byte 1,6
 001A 07                .byte 7
 001B           L105:
 001B 0000              .byte 0,0
 001D 0000              .byte 0,0
 001F 0000              .byte 0,0
 0021 00                .byte 0
                        .area text(rom, con, rel)
 0410                   .dbfile I:\AVR视频教程\视频教程\lesson11\ds1302\ds1302\ds1302.c
 0410                   .dbfunc e main _main fV
 0410           ;          dis_y -> <dead>
 0410           ;          dis_x -> <dead>
 0410           ;          shift -> <dead>
 0410           ;         setdat -> <dead>
 0410           ;         setadd -> <dead>
 0410           ;        settime -> y+7
 0410           ;        gettime -> y+0
                        .even
 0410           _main::
 0410 2E97              sbiw R28,14
 0412                   .dbline -1
 0412                   .dbline 307
 0412           ; /*******************************************
 0412           ; 函数名称: main
 0412           ; 功    能: 1. 在1602液晶上显示当前时间 2.可以设置时间(M1-M9为数字0-9,M13为设置模式和显示模式选择,M14为当前设置位选择)
 0412           ; 参    数: 无
 0412           ; 返回值  : 无
 0412           ; /********************************************/
 0412           ; void main(void)
 0412           ; {
 0412                   .dbline 314
 0412           ;       
 0412           ;       
 0412           ;       uchar setadd,setdat,shift;        //setadd指定将当前数值送入DS1302的哪个寄存器
 0412           ;                                                         //setdat是当前设置的数值,即被送入DS1302指定寄存器的数
 0412           ;                                                         //shift来实现十位和各位的设置相互独立(因为十位和个位是在一个寄存器里的)
 0412           ;  uchar dis_x,dis_y;                     //存储1602液晶当前光标的位置
 0412           ;  uchar settime[7]={0x50,0x59,0x23,0x01,0x01,0x06,0x07};//设置的秒,分,时,日,月,星期,年
 0412 80E0              ldi R24,<L104
 0414 90E0              ldi R25,>L104
 0416 FE01              movw R30,R28
 0418 3796              adiw R30,7
 041A 07E0              ldi R16,7
 041C 10E0              ldi R17,0
 041E FA93              st -y,R31
 0420 EA93              st -y,R30
 0422 9A93              st -y,R25
 0424 8A93              st -y,R24
 0426 0E940000          xcall asgncblk
 042A                   .dbline 315
 042A           ;  uchar gettime[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//保存当前时间的数组
 042A 80E0              ldi R24,<L105
 042C 90E0              ldi R25,>L105
 042E FE01              movw R30,R28
 0430 07E0              ldi R16,7
 0432 10E0              ldi R17,0
 0434 FA93              st -y,R31
 0436 EA93              st -y,R30
 0438 9A93              st -y,R25
 043A 8A93              st -y,R24
 043C 0E940000          xcall asgncblk
 0440                   .dbline 316
 0440           ;  LCD1602_initial();           //初始化1602液晶
 0440 4BDE              xcall _LCD1602_initial
 0442                   .dbline 317
 0442           ;  DS1302_portinit();                   //初始化DS1302的三根数据线
 0442 8FDE              xcall _DS1302_portinit
 0444                   .dbline 318
 0444           ;  DS1302_init();                               //启动振荡器,DS1302开始工作 
 0444 52DF              xcall _DS1302_init
 0446                   .dbline 319
 0446           ;  DS1302_setT(settime);                //设置初始时间
 0446 8E01              movw R16,R28
 0448 095F              subi R16,249  ; offset = 7
 044A 1F4F              sbci R17,255
 044C FDDE              xcall _DS1302_setT
 044E 04C0              xjmp L107
 0450           L106:
 0450                   .dbline 321
 0450                   .dbline 322
 0450 8E01              movw R16,R28
 0452 1ADF              xcall _DS1302_getT
 0454                   .dbline 324
 0454 8E01              movw R16,R28
 0456 65DF              xcall _Disp_time
 0458                   .dbline 325
 0458           L107:
 0458                   .dbline 320
 0458 FBCF              xjmp L106
 045A           X1:
 045A                   .dbline -2
 045A                   .dbline 326
 045A           ;  while(1)                                     //以下程序完成显示和设置时间
 045A           ;  {
 045A           ;    DS1302_getT(gettime);      //获得当前时间
 045A           ;    
 045A           ;    Disp_time(gettime);                //显示当前时间
 045A           ;  }
 045A           ; }
 045A           L103:
 045A 2E96              adiw R28,14
 045C                   .dbline 0 ; func end
 045C 0895              ret
 045E                   .dbsym l dis_y 1 c
 045E                   .dbsym l dis_x 1 c
 045E                   .dbsym l shift 1 c
 045E                   .dbsym l setdat 1 c
 045E                   .dbsym l setadd 1 c
 045E                   .dbsym l settime 7 A[7:7]c
 045E                   .dbsym l gettime 0 A[7:7]c
 045E                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile I:\AVR视频教程\视频教程\lesson11\ds1302\ds1302\ds1302.c
 0000           L99:
 0000                   .blkb 3
                        .area idata
 0000 323000            .byte 50,48,0
                        .area data(ram, con, rel)
 0003                   .dbfile I:\AVR视频教程\视频教程\lesson11\ds1302\ds1302\ds1302.c

⌨️ 快捷键说明

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