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

📄 ds1302.lis

📁 1302+lcd时钟显示C语言程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0398 80E0              ldi R24,<L73
 039A 90E0              ldi R25,>L73
 039C FE01              movw R30,R28
 039E 3B96              adiw R30,11
 03A0 0BE0              ldi R16,11
 03A2 10E0              ldi R17,0
 03A4 FA93              st -y,R31
 03A6 EA93              st -y,R30
 03A8 9A93              st -y,R25
 03AA 8A93              st -y,R24
 03AC 0E940000          xcall asgncblk
 03B0                   .dbline 269
 03B0           ;  uchar line2[9]={0,0,':',0,0,':',0,0,'\0'};             //显示第2行的字符数组
 03B0 80E0              ldi R24,<L74
 03B2 90E0              ldi R25,>L74
 03B4 FE01              movw R30,R28
 03B6 3296              adiw R30,2
 03B8 09E0              ldi R16,9
 03BA 10E0              ldi R17,0
 03BC FA93              st -y,R31
 03BE EA93              st -y,R30
 03C0 9A93              st -y,R25
 03C2 8A93              st -y,R24
 03C4 0E940000          xcall asgncblk
 03C8                   .dbline 270
 03C8           ;  for(i=0;i<3;i++)                                                               //为第2行的字符数组赋值
 03C8 4427              clr R20
 03CA 1EC0              xjmp L78
 03CC           L75:
 03CC                   .dbline 271
 03CC                   .dbline 272
 03CC 9E01              movw R18,R28
 03CE 242E              mov R2,R20
 03D0 3324              clr R3
 03D2 E2E0              ldi R30,2
 03D4 F0E0              ldi R31,0
 03D6 E219              sub R30,R2
 03D8 F309              sbc R31,R3
 03DA E60F              add R30,R22
 03DC F71F              adc R31,R23
 03DE 0081              ldd R16,z+0
 03E0 CCDF              xcall _BCD_ASCII
 03E2                   .dbline 273
 03E2 83E0              ldi R24,3
 03E4 849F              mul R24,R20
 03E6 F001              movw R30,R0
 03E8 CE01              movw R24,R28
 03EA 0296              adiw R24,2
 03EC E80F              add R30,R24
 03EE F91F              adc R31,R25
 03F0 2880              ldd R2,y+0
 03F2 2082              std z+0,R2
 03F4                   .dbline 274
 03F4 83E0              ldi R24,3
 03F6 849F              mul R24,R20
 03F8 F001              movw R30,R0
 03FA CE01              movw R24,R28
 03FC 0396              adiw R24,3
 03FE E80F              add R30,R24
 0400 F91F              adc R31,R25
 0402 2980              ldd R2,y+1
 0404 2082              std z+0,R2
 0406                   .dbline 275
 0406           L76:
 0406                   .dbline 270
 0406 4395              inc R20
 0408           L78:
 0408                   .dbline 270
 0408 4330              cpi R20,3
 040A 00F3              brlo L75
 040C                   .dbline 276
 040C           ;  {
 040C           ;   BCD_ASCII(time[2-i],asc);
 040C           ;   line2[i*3]=asc[0];
 040C           ;   line2[i*3+1]=asc[1];
 040C           ;  } 
 040C           ;  BCD_ASCII(time[6],asc);                                                //为第1行的年赋值
 040C 9E01              movw R18,R28
 040E FB01              movw R30,R22
 0410 0681              ldd R16,z+6
 0412 B3DF              xcall _BCD_ASCII
 0414                   .dbline 277
 0414           ;  line1[0]=asc[0];
 0414 2880              ldd R2,y+0
 0416 2B86              std y+11,R2
 0418                   .dbline 278
 0418           ;  line1[1]=asc[1];
 0418 2980              ldd R2,y+1
 041A 2C86              std y+12,R2
 041C                   .dbline 279
 041C           ;  BCD_ASCII(time[4],asc);                                                //为第1行的月赋值
 041C 9E01              movw R18,R28
 041E FB01              movw R30,R22
 0420 0481              ldd R16,z+4
 0422 ABDF              xcall _BCD_ASCII
 0424                   .dbline 280
 0424           ;  line1[3]=asc[0];
 0424 2880              ldd R2,y+0
 0426 2E86              std y+14,R2
 0428                   .dbline 281
 0428           ;  line1[4]=asc[1];
 0428 2980              ldd R2,y+1
 042A 2F86              std y+15,R2
 042C                   .dbline 282
 042C           ;  BCD_ASCII(time[3],asc);                                                //为第1行的日赋值
 042C 9E01              movw R18,R28
 042E FB01              movw R30,R22
 0430 0381              ldd R16,z+3
 0432 A3DF              xcall _BCD_ASCII
 0434                   .dbline 283
 0434           ;  line1[6]=asc[0];
 0434 2880              ldd R2,y+0
 0436 298A              std y+17,R2
 0438                   .dbline 284
 0438           ;  line1[7]=asc[1];
 0438 2980              ldd R2,y+1
 043A 2A8A              std y+18,R2
 043C                   .dbline 285
 043C           ;  BCD_ASCII(time[5],asc);                                                //为第1行的星期赋值
 043C 9E01              movw R18,R28
 043E FB01              movw R30,R22
 0440 0581              ldd R16,z+5
 0442 9BDF              xcall _BCD_ASCII
 0444                   .dbline 286
 0444           ;  line1[9]=asc[1];
 0444 2980              ldd R2,y+1
 0446 2C8A              std y+20,R2
 0448                   .dbline 288
 0448           ;  
 0448           ;  LCD_write_string(0X82,"20");                   //第1行从第3个位置开始显示,将07年显示为2007的形式
 0448 20E0              ldi R18,<L91
 044A 30E0              ldi R19,>L91
 044C 02E8              ldi R16,130
 044E 66DE              xcall _LCD_write_string
 0450                   .dbline 290
 0450           ;  
 0450           ;  LCD_write_string(0X84,line1);
 0450 9E01              movw R18,R28
 0452 255F              subi R18,245  ; offset = 11
 0454 3F4F              sbci R19,255
 0456 04E8              ldi R16,132
 0458 61DE              xcall _LCD_write_string
 045A                   .dbline 292
 045A           ; 
 045A           ;  LCD_write_string(0X80+0X44,line2);             //第2行从第5个位置开始显示,/第2行显示
 045A 9E01              movw R18,R28
 045C 2E5F              subi R18,254  ; offset = 2
 045E 3F4F              sbci R19,255
 0460 04EC              ldi R16,196
 0462 5CDE              xcall _LCD_write_string
 0464                   .dbline -2
 0464           L72:
 0464 6696              adiw R28,22
 0466 0E940000          xcall pop_gset2
 046A                   .dbline 0 ; func end
 046A 0895              ret
 046C                   .dbsym l line1 11 A[11:11]c
 046C                   .dbsym l line2 2 A[9:9]c
 046C                   .dbsym l asc 0 A[2:2]c
 046C                   .dbsym r i 20 c
 046C                   .dbsym r time 22 pc
 046C                   .dbend
                        .area lit(rom, con, rel)
 0014           L93:
 0014 5059              .byte 'P,'Y
 0016 2301              .byte 35,1
 0018 0106              .byte 1,6
 001A 07                .byte 7
 001B           L94:
 001B 0000              .byte 0,0
 001D 0000              .byte 0,0
 001F 0000              .byte 0,0
 0021 00                .byte 0
                        .area text(rom, con, rel)
 046C                   .dbfile D:\单片机\ds1302\ds1302_end\ds1302.c
 046C                   .dbfunc e main _main fV
 046C           ;          dis_y -> <dead>
 046C           ;          dis_x -> <dead>
 046C           ;          shift -> <dead>
 046C           ;         setdat -> <dead>
 046C           ;         setadd -> <dead>
 046C           ;        settime -> y+7
 046C           ;        gettime -> y+0
                        .even
 046C           _main::
 046C 2E97              sbiw R28,14
 046E                   .dbline -1
 046E                   .dbline 301
 046E           ; }
 046E           ; /*******************************************
 046E           ; 函数名称: main
 046E           ; 功    能: 1. 在1602液晶上显示当前时间 2.可以设置时间(M1-M9为数字0-9,M13为设置模式和显示模式选择,M14为当前设置位选择)
 046E           ; 参    数: 无
 046E           ; 返回值  : 无
 046E           ; /********************************************/
 046E           ; void main(void)
 046E           ; {
 046E                   .dbline 308
 046E           ;       
 046E           ;       uchar setadd,setdat,shift;        //setadd指定将当前数值送入DS1302的哪个寄存器
 046E           ;                                                         //setdat是当前设置的数值,即被送入DS1302指定寄存器的数
 046E           ;                                                         //shift来实现十位和各位的设置相互独立(因为十位和个位是在一个寄存器里的)
 046E           ;     
 046E           ;       uchar dis_x,dis_y;                        //存储1602液晶当前光标的位置
 046E           ;       uchar settime[7]={0x50,0x59,0x23,0x01,0x01,0x06,0x07};//设置的秒,分,时,日,月,星期,年
 046E 80E0              ldi R24,<L93
 0470 90E0              ldi R25,>L93
 0472 FE01              movw R30,R28
 0474 3796              adiw R30,7
 0476 07E0              ldi R16,7
 0478 10E0              ldi R17,0
 047A FA93              st -y,R31
 047C EA93              st -y,R30
 047E 9A93              st -y,R25
 0480 8A93              st -y,R24
 0482 0E940000          xcall asgncblk
 0486                   .dbline 309
 0486           ;       uchar gettime[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//保存当前时间的数
 0486 80E0              ldi R24,<L94
 0488 90E0              ldi R25,>L94
 048A FE01              movw R30,R28
 048C 07E0              ldi R16,7
 048E 10E0              ldi R17,0
 0490 FA93              st -y,R31
 0492 EA93              st -y,R30
 0494 9A93              st -y,R25
 0496 8A93              st -y,R24
 0498 0E940000          xcall asgncblk
 049C                   .dbline 311
 049C           ;       //初始化液晶
 049C           ;       DDRC=0xff;
 049C 8FEF              ldi R24,255
 049E 84BB              out 0x14,R24
 04A0                   .dbline 312
 04A0           ;       PORTC=0x00;
 04A0 2224              clr R2
 04A2 25BA              out 0x15,R2
 04A4                   .dbline 313
 04A4           ;       LCD_init();
 04A4 5FDE              xcall _LCD_init
 04A6                   .dbline 315
 04A6           ;  
 04A6           ;       DS1302_portinit();                      //初始化DS1302的三根数据线
 04A6 AFDE              xcall _DS1302_portinit
 04A8                   .dbline 316
 04A8           ;       DS1302_init();                          //启动振荡器,DS1302开始工作 
 04A8 5EDF              xcall _DS1302_init
 04AA                   .dbline 317
 04AA           ;       DS1302_setT(settime);           //设置初始时间
 04AA 8E01              movw R16,R28
 04AC 095F              subi R16,249  ; offset = 7
 04AE 1F4F              sbci R17,255
 04B0 1DDF              xcall _DS1302_setT
 04B2 04C0              xjmp L96
 04B4           L95:
 04B4                   .dbline 320
 04B4                   .dbline 321
 04B4 8E01              movw R16,R28
 04B6 3ADF              xcall _DS1302_getT
 04B8                   .dbline 322
 04B8 8E01              movw R16,R28
 04BA 6ADF              xcall _Disp_time
 04BC                   .dbline 324
 04BC           L96:
 04BC                   .dbline 319
 04BC FBCF              xjmp L95
 04BE           X1:
 04BE                   .dbline -2
 04BE           L92:
 04BE 2E96              adiw R28,14
 04C0                   .dbline 0 ; func end
 04C0 0895              ret
 04C2                   .dbsym l dis_y 1 c
 04C2                   .dbsym l dis_x 1 c
 04C2                   .dbsym l shift 1 c
 04C2                   .dbsym l setdat 1 c
 04C2                   .dbsym l setadd 1 c
 04C2                   .dbsym l settime 7 A[7:7]c
 04C2                   .dbsym l gettime 0 A[7:7]c
 04C2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\单片机\ds1302\ds1302_end\ds1302.c
 0000           _data_temp::
 0000                   .blkb 2
 0002                   .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C
 0002                   .dbsym e data_temp _data_temp i
                        .area data(ram, con, rel)
 0000                   .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C
 0000           L91:
 0000                   .blkb 3
                        .area idata
 0000 323000            .byte 50,48,0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\单片机\ds1302\ds1302_end/1602B_LCD.C

⌨️ 快捷键说明

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