📄 1602.lis
字号:
00B2 402F mov R20,R16
00B4 .dbline -1
00B4 .dbline 80
00B4 ; }
00B4 ;
00B4 ; /****************** 写数据函数 *****************/
00B4 ; void lcd_data(uchar data)
00B4 ; {
00B4 .dbline 81
00B4 ; lcd_busy();
00B4 D5DF xcall _lcd_busy
00B6 .dbline 82
00B6 ; PORTD = 0X40;
00B6 80E4 ldi R24,64
00B8 82BB out 0x12,R24
00BA .dbline 83
00BA ; delay(1);
00BA 01E0 ldi R16,1
00BC 10E0 ldi R17,0
00BE A0DF xcall _delay
00C0 .dbline 84
00C0 ; PORTC = data; //写要显示的字
00C0 45BB out 0x15,R20
00C2 .dbline 85
00C2 ; delay(1);
00C2 01E0 ldi R16,1
00C4 10E0 ldi R17,0
00C6 9CDF xcall _delay
00C8 .dbline 86
00C8 ; PORTD = 0X50;
00C8 80E5 ldi R24,80
00CA 82BB out 0x12,R24
00CC .dbline 87
00CC ; delay(1);
00CC 01E0 ldi R16,1
00CE 10E0 ldi R17,0
00D0 97DF xcall _delay
00D2 .dbline 88
00D2 ; PORTD = 0X40;
00D2 80E4 ldi R24,64
00D4 82BB out 0x12,R24
00D6 .dbline -2
00D6 L21:
00D6 0E940000 xcall pop_gset1
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r data 20 c
00DC .dbend
00DC .dbfunc e lcd_DAT _lcd_DAT fV
00DC ; DAT -> y+4
00DC ; y -> R22
00DC ; x -> R20
.even
00DC _lcd_DAT::
00DC 0E940000 xcall push_gset2
00E0 622F mov R22,R18
00E2 402F mov R20,R16
00E4 .dbline -1
00E4 .dbline 93
00E4 ; }
00E4 ;
00E4 ; /****************** 显示函数 *****************/
00E4 ; void lcd_DAT(uchar x,uchar y,uchar DAT)
00E4 ; {
00E4 .dbline 94
00E4 ; if(y) x += 0x40;
00E4 6623 tst R22
00E6 09F0 breq L23
00E8 .dbline 94
00E8 405C subi R20,192 ; addi 64
00EA L23:
00EA .dbline 95
00EA ; x |= 0x80;
00EA 4068 ori R20,128
00EC .dbline 96
00EC ; lcd_cmd(x); //写要显示的地址
00EC 042F mov R16,R20
00EE C8DF xcall _lcd_cmd
00F0 .dbline 97
00F0 ; lcd_data(DAT); //写显示的内容
00F0 0C81 ldd R16,y+4
00F2 DDDF xcall _lcd_data
00F4 .dbline -2
00F4 L22:
00F4 0E940000 xcall pop_gset2
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbsym l DAT 4 c
00FA .dbsym r y 22 c
00FA .dbsym r x 20 c
00FA .dbend
00FA .dbfunc e lcd_init _lcd_init fV
.even
00FA _lcd_init::
00FA .dbline -1
00FA .dbline 102
00FA ; }
00FA ;
00FA ; /****************** lcd 初始化 *****************/
00FA ; void lcd_init()
00FA ; {
00FA .dbline 103
00FA ; lcd_cmd(0x38);
00FA 08E3 ldi R16,56
00FC C1DF xcall _lcd_cmd
00FE .dbline 104
00FE ; lcd_cmd(0x08);
00FE 08E0 ldi R16,8
0100 BFDF xcall _lcd_cmd
0102 .dbline 105
0102 ; lcd_cmd(0x01);
0102 01E0 ldi R16,1
0104 BDDF xcall _lcd_cmd
0106 .dbline 106
0106 ; lcd_cmd(0x06);
0106 06E0 ldi R16,6
0108 BBDF xcall _lcd_cmd
010A .dbline 107
010A ; lcd_cmd(0x0c);
010A 0CE0 ldi R16,12
010C B9DF xcall _lcd_cmd
010E .dbline -2
010E L25:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbend
0110 .dbfunc e main _main fV
0110 ; p -> R20
0110 ; m -> R22
0110 ; i -> R10
.even
0110 _main::
0110 2197 sbiw R28,1
0112 .dbline -1
0112 .dbline 112
0112 ; }
0112 ;
0112 ; /****************** 主函数 *****************/
0112 ; void main(void)
0112 ; {
0112 .dbline 113
0112 ; uchar i,p=1;
0112 41E0 ldi R20,1
0114 .dbline 114
0114 ; char m = 11;
0114 6BE0 ldi R22,11
0116 .dbline 115
0116 ; init_devices();
0116 9CDF xcall _init_devices
0118 .dbline 116
0118 ; delay_ms(100);
0118 04E6 ldi R16,100
011A 10E0 ldi R17,0
011C 79DF xcall _delay_ms
011E .dbline 117
011E ; lcd_init();
011E EDDF xcall _lcd_init
0120 .dbline 126
0120 ;
0120 ; /*lcd_DAT(0,0,'G');
0120 ; lcd_DAT(1,0,'O');
0120 ; lcd_DAT(2,0,'O');
0120 ; lcd_DAT(3,0,'D');
0120 ; lcd_DAT(5,1,'B');
0120 ; lcd_DAT(6,1,'Y');
0120 ; lcd_DAT(7,1,'E');*/
0120 ; lcd_cmd(0x80);
0120 00E8 ldi R16,128
0122 AEDF xcall _lcd_cmd
0124 .dbline 127
0124 ; for(i=0;DATA1[i] != '\0';i++)
0124 AA24 clr R10
0126 0CC0 xjmp L30
0128 L27:
0128 .dbline 128
0128 .dbline 129
0128 80E0 ldi R24,<_DATA1
012A 90E0 ldi R25,>_DATA1
012C EA2D mov R30,R10
012E FF27 clr R31
0130 E80F add R30,R24
0132 F91F adc R31,R25
0134 2080 ldd R2,z+0
0136 2882 std y+0,R2
0138 2227 clr R18
013A 0A2D mov R16,R10
013C CFDF xcall _lcd_DAT
013E .dbline 130
013E L28:
013E .dbline 127
013E A394 inc R10
0140 L30:
0140 .dbline 127
0140 80E0 ldi R24,<_DATA1
0142 90E0 ldi R25,>_DATA1
0144 EA2D mov R30,R10
0146 FF27 clr R31
0148 E80F add R30,R24
014A F91F adc R31,R25
014C 2080 ldd R2,z+0
014E 2220 tst R2
0150 59F7 brne L27
0152 27C0 xjmp L32
0154 L31:
0154 .dbline 132
0154 ; {
0154 ; lcd_DAT(i,0,DATA1[i]);
0154 ; }
0154 ; while(1)
0154 ; {
0154 .dbline 133
0154 ; for(i=0;i<16;i++)
0154 AA24 clr R10
0156 10C0 xjmp L37
0158 L34:
0158 .dbline 134
0158 .dbline 135
0158 262E mov R2,R22
015A 3324 clr R3
015C EA2D mov R30,R10
015E FF27 clr R31
0160 E20D add R30,R2
0162 F31D adc R31,R3
0164 80E0 ldi R24,<_DATA2
0166 90E0 ldi R25,>_DATA2
0168 E80F add R30,R24
016A F91F adc R31,R25
016C 2080 ldd R2,z+0
016E 2882 std y+0,R2
0170 21E0 ldi R18,1
0172 0A2D mov R16,R10
0174 B3DF xcall _lcd_DAT
0176 .dbline 136
0176 L35:
0176 .dbline 133
0176 A394 inc R10
0178 L37:
0178 .dbline 133
0178 8A2D mov R24,R10
017A 8031 cpi R24,16
017C 68F3 brlo L34
017E .dbline 137
017E ; {
017E ; lcd_DAT(i,1,DATA2[i+m]);
017E ; }
017E ; delay_ms(700); //滚动屏
017E 0CEB ldi R16,700
0180 12E0 ldi R17,2
0182 46DF xcall _delay_ms
0184 .dbline 138
0184 ; if(p == 1) m --;
0184 4130 cpi R20,1
0186 11F4 brne L38
0188 .dbline 138
0188 6A95 dec R22
018A 03C0 xjmp L39
018C L38:
018C .dbline 139
018C ; else if(p == 0) m++;
018C 4423 tst R20
018E 09F4 brne L40
0190 .dbline 139
0190 6395 inc R22
0192 L40:
0192 L39:
0192 .dbline 140
0192 ; if(m >= 11) p = 1;
0192 6B30 cpi R22,11
0194 10F0 brlo L42
0196 .dbline 140
0196 41E0 ldi R20,1
0198 04C0 xjmp L43
019A L42:
019A .dbline 141
019A ; else if(m <= 0) p = 0;
019A 2224 clr R2
019C 2616 cp R2,R22
019E 08F0 brlo L44
01A0 .dbline 141
01A0 4427 clr R20
01A2 L44:
01A2 L43:
01A2 .dbline 142
01A2 L32:
01A2 .dbline 131
01A2 D8CF xjmp L31
01A4 X2:
01A4 .dbline -2
01A4 L26:
01A4 2196 adiw R28,1
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbsym r p 20 c
01A8 .dbsym r m 22 c
01A8 .dbsym r i 10 c
01A8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -