📄 lcd_1602_driver.lis
字号:
0404 0EC0 rjmp L63
0406 L62:
0406 .dbline 213
0406 ; else
0406 ; {data[add]=lcd[i];}
0406 .dbline 213
0406 CE01 movw R24,R28
0408 EE2D mov R30,R14
040A FF27 clr R31
040C E80F add R30,R24
040E F91F adc R31,R25
0410 2080 ldd R2,z+0
0412 80E0 ldi R24,<_data
0414 90E0 ldi R25,>_data
0416 E0910000 lds R30,_add
041A FF27 clr R31
041C E80F add R30,R24
041E F91F adc R31,R25
0420 2082 std z+0,R2
0422 .dbline 213
0422 L63:
0422 .dbline 214
0422 ; add++;
0422 80910000 lds R24,_add
0426 8F5F subi R24,255 ; addi 1
0428 80930000 sts _add,R24
042C .dbline 215
042C ; }
042C .dbline 217
042C ; else
042C ; {}
042C .dbline 217
042C .dbline 218
042C ; }
042C 26C0 rjmp L59
042E L58:
042E .dbline 220
042E ; else
042E ; {
042E .dbline 221
042E ; if(lcd_data[add]==lcd[i])
042E CE01 movw R24,R28
0430 EE2D mov R30,R14
0432 FF27 clr R31
0434 E80F add R30,R24
0436 F91F adc R31,R25
0438 2080 ldd R2,z+0
043A 80E0 ldi R24,<_lcd_data
043C 90E0 ldi R25,>_lcd_data
043E E0910000 lds R30,_add
0442 FF27 clr R31
0444 E80F add R30,R24
0446 F91F adc R31,R25
0448 3080 ldd R3,z+0
044A 3214 cp R3,R2
044C 09F4 brne L64
044E .dbline 222
044E ; {}
044E .dbline 222
044E 0EC0 rjmp L65
0450 L64:
0450 .dbline 224
0450 ; else
0450 ; {data[add]=lcd[i];}
0450 .dbline 224
0450 CE01 movw R24,R28
0452 EE2D mov R30,R14
0454 FF27 clr R31
0456 E80F add R30,R24
0458 F91F adc R31,R25
045A 2080 ldd R2,z+0
045C 80E0 ldi R24,<_data
045E 90E0 ldi R25,>_data
0460 E0910000 lds R30,_add
0464 FF27 clr R31
0466 E80F add R30,R24
0468 F91F adc R31,R25
046A 2082 std z+0,R2
046C .dbline 224
046C L65:
046C .dbline 225
046C ; add++;
046C 80910000 lds R24,_add
0470 8F5F subi R24,255 ; addi 1
0472 80930000 sts _add,R24
0476 .dbline 226
0476 ; b=1;
0476 CC24 clr R12
0478 C394 inc R12
047A .dbline 227
047A ; }
047A L59:
047A .dbline 228
047A L51:
047A .dbline 196
047A E394 inc R14
047C L53:
047C .dbline 196
047C 8E2D mov R24,R14
047E 8B30 cpi R24,11
0480 08F4 brsh X4
0482 83CF rjmp L50
0484 X4:
0484 24C0 rjmp L67
0486 L66:
0486 .dbline 230
0486 ; }
0486 ; while (*s)
0486 ; {
0486 .dbline 231
0486 ; if(lcd_data[add]==*s)//如果LCD上显示的数和
0486 80E0 ldi R24,<_lcd_data
0488 90E0 ldi R25,>_lcd_data
048A E0910000 lds R30,_add
048E FF27 clr R31
0490 E80F add R30,R24
0492 F91F adc R31,R25
0494 2080 ldd R2,z+0
0496 F401 movw R30,R8
0498 E491 lpm R30,Z
049A 2E16 cp R2,R30
049C 09F4 brne L69
049E .dbline 232
049E ; {} //待写入的数相同的话
049E .dbline 232
049E 0FC0 rjmp L70
04A0 L69:
04A0 .dbline 233
04A0 ; else{data[add]=*s;}//要显示的数据存入显存
04A0 .dbline 233
04A0 80E0 ldi R24,<_data
04A2 90E0 ldi R25,>_data
04A4 E0910000 lds R30,_add
04A8 FF27 clr R31
04AA E80F add R30,R24
04AC F91F adc R31,R25
04AE D401 movw R26,R8
04B0 FA93 st -y,R31
04B2 EA93 st -y,R30
04B4 FD01 movw R30,R26
04B6 A491 lpm R26,Z
04B8 E991 ld R30,y+
04BA F991 ld R31,y+
04BC A083 std z+0,R26
04BE .dbline 233
04BE L70:
04BE .dbline 234
04BE C401 movw R24,R8
04C0 0196 adiw R24,1
04C2 4C01 movw R8,R24
04C4 .dbline 235
04C4 80910000 lds R24,_add
04C8 8F5F subi R24,255 ; addi 1
04CA 80930000 sts _add,R24
04CE .dbline 236
04CE L67:
04CE .dbline 229
04CE F401 movw R30,R8
04D0 E491 lpm R30,Z
04D2 EE23 tst R30
04D4 C1F6 brne L66
04D6 .dbline 237
04D6 ; s ++;//指针加1
04D6 ; add++;//显存地址加1
04D6 ; }
04D6 ; if(y==1)
04D6 8C89 ldd R24,y+20
04D8 8130 cpi R24,1
04DA 91F4 brne L76
04DC .dbline 238
04DC ; e+=16;
04DC 862D mov R24,R6
04DE 805F subi R24,240 ; addi 16
04E0 682E mov R6,R24
04E2 .dbline 239
04E2 ; for(;e>=add;add++)
04E2 0EC0 rjmp L76
04E4 L73:
04E4 .dbline 240
04E4 .dbline 240
04E4 80E0 ldi R24,<_data
04E6 90E0 ldi R25,>_data
04E8 E0910000 lds R30,_add
04EC FF27 clr R31
04EE E80F add R30,R24
04F0 F91F adc R31,R25
04F2 80E2 ldi R24,32
04F4 8083 std z+0,R24
04F6 .dbline 240
04F6 L74:
04F6 .dbline 239
04F6 80910000 lds R24,_add
04FA 8F5F subi R24,255 ; addi 1
04FC 80930000 sts _add,R24
0500 L76:
0500 .dbline 239
0500 20900000 lds R2,_add
0504 6214 cp R6,R2
0506 70F7 brsh L73
0508 .dbline 241
0508 ; {data[add]=' ';}
0508 ; LCD_updata;
0508 2224 clr R2
050A 20920000 sts _new,R2
050E .dbline -2
050E L42:
050E 2A96 adiw R28,10
0510 00D0 rcall pop_gset5
0512 2296 adiw R28,2
0514 .dbline 0 ; func end
0514 0895 ret
0516 .dbsym r c 10 c
0516 .dbsym r b 12 c
0516 .dbsym l lcd 0 A[10:10]c
0516 .dbsym r i 14 c
0516 .dbsym r e 6 c
0516 .dbsym r s 8 pkc
0516 .dbsym l dat 24 l
0516 .dbsym l d 22 c
0516 .dbsym l y 20 c
0516 .dbsym r x 14 c
0516 .dbend
.area lit(rom, con, rel)
000C L78:
000C 00 .byte 0
000D 00000000000000 .byte 0,0,0,0,0,0,0
.area text(rom, con, rel)
0516 .dbfile E:\刻录的\电子技术\项目\驱动程序\LCD1602四线接口应用范例\LCD_1602_Driver.c
0516 .dbfunc e LCD_write_time _LCD_write_time fV
0516 ; lcd -> y+0
0516 ; i -> R20
0516 ; s -> y+16
0516 ; m -> y+14
0516 ; h -> y+12
0516 ; y -> R22
0516 ; x -> R20
.even
0516 _LCD_write_time::
0516 00D0 rcall push_gset2
0518 622F mov R22,R18
051A 402F mov R20,R16
051C 2897 sbiw R28,8
051E .dbline -1
051E .dbline 252
051E ; }
051E ; /*-----------------------------------------------------------------------
051E ; LCD_write_time : 数字显示函数
051E ;
051E ; 输入参数:
051E ; X、Y : 显示数据的起始的位置
051E ; h,m,s :时,分,秒
051E ; 编写日期 :2005-10-19
051E ; -----------------------------------------------------------------------*/
051E ; void LCD_write_time(unsigned char x,unsigned char y,unsigned char h,unsigned char m,unsigned char s)
051E ; {
051E .dbline 254
051E ; unsigned char i;
051E ; unsigned char lcd[8]={0};
051E 80E0 ldi R24,<L78
0520 90E0 ldi R25,>L78
0522 FE01 movw R30,R28
0524 08E0 ldi R16,8
0526 10E0 ldi R17,0
0528 FA93 st -y,R31
052A EA93 st -y,R30
052C 9A93 st -y,R25
052E 8A93 st -y,R24
0530 00D0 rcall asgncblk
0532 .dbline 255
0532 ; if(y<2)
0532 6230 cpi R22,2
0534 30F4 brsh L79
0536 .dbline 256
0536 ; add=y*16+x;//设置起始座标LCD_set_xy( X, Y );
0536 80E1 ldi R24,16
0538 869F mul R24,R22
053A 202C mov R2,R0
053C 240E add R2,R20
053E 20920000 sts _add,R2
0542 L79:
0542 .dbline 257
0542 ; lcd[0]=h/10+48;
0542 1AE0 ldi R17,10
0544 0C85 ldd R16,y+12
0546 00D0 rcall div8u
0548 802F mov R24,R16
054A 805D subi R24,208 ; addi 48
054C 8883 std y+0,R24
054E .dbline 258
054E ; lcd[1]=h%10+48;
054E 1AE0 ldi R17,10
0550 0C85 ldd R16,y+12
0552 00D0 rcall mod8u
0554 802F mov R24,R16
0556 805D subi R24,208 ; addi 48
0558 8983 std y+1,R24
055A .dbline 259
055A ; lcd[2]=':';
055A 8AE3 ldi R24,58
055C 8A83 std y+2,R24
055E .dbline 260
055E ; lcd[3]=m/10+48;
055E 1AE0 ldi R17,10
0560 0E85 ldd R16,y+14
0562 00D0 rcall div8u
0564 802F mov R24,R16
0566 805D subi R24,208 ; addi 48
0568 8B83 std y+3,R24
056A .dbline 261
056A ; lcd[4]=m%10+48;
056A 1AE0 ldi R17,10
056C 0E85 ldd R16,y+14
056E 00D0 rcall mod8u
0570 802F mov R24,R16
0572 805D subi R24,208 ; addi 48
0574 8C83 std y+4,R24
0576 .dbline 262
0576 ; lcd[5]=':';
0576 8AE3 ldi R24,58
0578 8D83 std y+5,R24
057A .dbline 263
057A ; lcd[6]=s/10+48;
057A 1AE0 ldi R17,10
057C 0889 ldd R16,y+16
057E 00D0 rcall div8u
0580 802F mov R24,R16
0582 805D subi R24,208 ; addi 48
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -