📄 1.lis
字号:
00CE 402F mov R20,R16
00D0 .dbline -1
00D0 .dbline 108
00D0 ;
00D0 ; }
00D0 ; /*----------------------------------------------------------------------------*/
00D0 ; void LCD_write_data(unsigned char data) //写数据
00D0 ; {
00D0 .dbline 109
00D0 ; delay_nus(16);
00D0 00E1 ldi R16,16
00D2 10E0 ldi R17,0
00D4 97DF xcall _delay_nus
00D6 .dbline 110
00D6 ; LCD_RS_PORT|=LCD_RS; //RS=1
00D6 D89A sbi 0x1b,0
00D8 .dbline 111
00D8 ; LCD_DATA_PORT&=0X0f; //清高四位
00D8 8BB3 in R24,0x1b
00DA 8F70 andi R24,15
00DC 8BBB out 0x1b,R24
00DE .dbline 112
00DE ; LCD_DATA_PORT|=data&0xf0; //写高四位
00DE 842F mov R24,R20
00E0 807F andi R24,240
00E2 2BB2 in R2,0x1b
00E4 282A or R2,R24
00E6 2BBA out 0x1b,R2
00E8 .dbline 113
00E8 ; LCD_en_write();
00E8 CADF xcall _LCD_en_write
00EA .dbline 114
00EA ; data=data<<4; //低四位移到高四位
00EA 842F mov R24,R20
00EC 8F70 andi R24,#0x0F
00EE 8295 swap R24
00F0 482F mov R20,R24
00F2 .dbline 115
00F2 ; LCD_DATA_PORT&=0X0f; //清高四位
00F2 8BB3 in R24,0x1b
00F4 8F70 andi R24,15
00F6 8BBB out 0x1b,R24
00F8 .dbline 116
00F8 ; LCD_DATA_PORT|=data&0xf0; //写低四位
00F8 842F mov R24,R20
00FA 807F andi R24,240
00FC 2BB2 in R2,0x1b
00FE 282A or R2,R24
0100 2BBA out 0x1b,R2
0102 .dbline 117
0102 ; LCD_en_write();
0102 BDDF xcall _LCD_en_write
0104 .dbline -2
0104 L20:
0104 0E940000 xcall pop_gset1
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r data 20 c
010A .dbend
010A .dbfunc e LCD_set_xy _LCD_set_xy fV
010A ; address -> R20
010A ; y -> R20
010A ; x -> R22
.even
010A _LCD_set_xy::
010A 0E940000 xcall push_gset2
010E 422F mov R20,R18
0110 602F mov R22,R16
0112 .dbline -1
0112 .dbline 121
0112 ; }
0112 ; /*----------------------------------------------------------------------------*/
0112 ; void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
0112 ; {
0112 .dbline 123
0112 ; unsigned char address;
0112 ; if (y == 0) address = 0x80 + x;
0112 4423 tst R20
0114 19F4 brne L22
0116 .dbline 123
0116 462F mov R20,R22
0118 4058 subi R20,128 ; addi 128
011A 02C0 xjmp L23
011C L22:
011C .dbline 124
011C ; else address = 0xc0 + x;
011C 462F mov R20,R22
011E 4054 subi R20,64 ; addi 192
0120 L23:
0120 .dbline 125
0120 ; LCD_write_command( address);
0120 042F mov R16,R20
0122 B3DF xcall _LCD_write_command
0124 .dbline -2
0124 L21:
0124 0E940000 xcall pop_gset2
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r address 20 c
012A .dbsym r y 20 c
012A .dbsym r x 22 c
012A .dbend
012A .dbfunc e LCD_write_string _LCD_write_string fV
012A ; s -> R20,R21
012A ; Y -> R10
012A ; X -> R22
.even
012A _LCD_write_string::
012A 0E940000 xcall push_gset3
012E A22E mov R10,R18
0130 602F mov R22,R16
0132 4E81 ldd R20,y+6
0134 5F81 ldd R21,y+7
0136 .dbline -1
0136 .dbline 129
0136 ; }
0136 ; /*----------------------------------------------------------------------------*/
0136 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
0136 ; {
0136 .dbline 130
0136 ; LCD_set_xy( X, Y ); //写地址
0136 2A2D mov R18,R10
0138 062F mov R16,R22
013A E7DF xcall _LCD_set_xy
013C 05C0 xjmp L26
013E L25:
013E .dbline 132
013E .dbline 133
013E FA01 movw R30,R20
0140 0081 ldd R16,z+0
0142 C3DF xcall _LCD_write_data
0144 .dbline 134
0144 4F5F subi R20,255 ; offset = 1
0146 5F4F sbci R21,255
0148 .dbline 135
0148 L26:
0148 .dbline 131
0148 ; while (*s) // 写显示字符
0148 FA01 movw R30,R20
014A 2080 ldd R2,z+0
014C 2220 tst R2
014E B9F7 brne L25
0150 .dbline -2
0150 L24:
0150 0E940000 xcall pop_gset3
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbsym r s 20 pc
0156 .dbsym r Y 10 c
0156 .dbsym r X 22 c
0156 .dbend
0156 .dbfunc e LCD_write_char _LCD_write_char fV
0156 ; data -> y+4
0156 ; Y -> R22
0156 ; X -> R20
.even
0156 _LCD_write_char::
0156 0E940000 xcall push_gset2
015A 622F mov R22,R18
015C 402F mov R20,R16
015E .dbline -1
015E .dbline 141
015E ; {
015E ; LCD_write_data( *s );
015E ; s ++;
015E ; }
015E ;
015E ; }
015E ;
015E ; /*----------------------------------------------------------------------------*/
015E ; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
015E ; {
015E .dbline 142
015E ; LCD_set_xy( X, Y ); //写地址
015E 262F mov R18,R22
0160 042F mov R16,R20
0162 D3DF xcall _LCD_set_xy
0164 .dbline 143
0164 ; LCD_write_data( data);
0164 0C81 ldd R16,y+4
0166 B1DF xcall _LCD_write_data
0168 .dbline -2
0168 L28:
0168 0E940000 xcall pop_gset2
016C .dbline 0 ; func end
016C 0895 ret
016E .dbsym l data 4 c
016E .dbsym r Y 22 c
016E .dbsym r X 20 c
016E .dbend
016E .dbfunc e delay _delay fV
016E ; x -> R16,R17
.even
016E _delay::
016E .dbline -1
016E .dbline 155
016E ;
016E ; }
016E ;
016E ;
016E ;
016E ;
016E ;
016E ;
016E ;
016E ; /////////////////////////////////////////
016E ; void delay(uint x) //1.5us左右
016E ; {
016E 02C0 xjmp L31
0170 L30:
0170 .dbline 157
0170 .dbline 158
0170 0150 subi R16,1
0172 1040 sbci R17,0
0174 .dbline 159
0174 L31:
0174 .dbline 156
0174 ; while(x)
0174 0030 cpi R16,0
0176 0107 cpc R16,R17
0178 D9F7 brne L30
017A X0:
017A .dbline -2
017A L29:
017A .dbline 0 ; func end
017A 0895 ret
017C .dbsym r x 16 i
017C .dbend
017C .dbfunc e init_1820 _init_1820 fV
.even
017C _init_1820::
017C .dbline -1
017C .dbline 164
017C ; {
017C ; x--;
017C ; }
017C ; }
017C ;
017C ; //////////////////////////////////////////
017C ; void init_1820()
017C ; {
017C .dbline 165
017C ; PORTD|=(1<<6);
017C 969A sbi 0x12,6
017E .dbline 166
017E ; PORTD&=~(1<<6);
017E 9698 cbi 0x12,6
0180 .dbline 167
0180 ; delay(3000); //480us以上
0180 08EB ldi R16,3000
0182 1BE0 ldi R17,11
0184 F4DF xcall _delay
0186 .dbline 168
0186 ; PORTD|=(1<<6);
0186 969A sbi 0x12,6
0188 .dbline 169
0188 ; DDRD&=~(1<<6);
0188 8E98 cbi 0x11,6
018A .dbline 170
018A ; delay(40); //15~60us
018A 08E2 ldi R16,40
018C 10E0 ldi R17,0
018E EFDF xcall _delay
0190 L34:
0190 .dbline 172
0190 .dbline 176
0190 L35:
0190 .dbline 171
0190 ; while(PIND&(1<<6))
0190 8699 sbic 0x10,6
0192 FECF rjmp L34
0194 .dbline 177
0194 ; {
0194 ; // disp_led(3,0);
0194 ; // for(;;)
0194 ; //{}
0194 ; }
0194 ; DDRD|=(1<<6);
0194 8E9A sbi 0x11,6
0196 .dbline 178
0196 ; PORTD|=(1<<6);
0196 969A sbi 0x12,6
0198 .dbline 179
0198 ; delay(150); //60~240us
0198 06E9 ldi R16,150
019A 10E0 ldi R17,0
019C E8DF xcall _delay
019E .dbline -2
019E L33:
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbend
01A0 .dbfunc e write_1820 _write_1820 fI
01A0 ; m -> R20
01A0 ; x -> R22
.even
01A0 _write_1820::
01A0 0E940000 xcall push_gset2
01A4 602F mov R22,R16
01A6 .dbline -1
01A6 .dbline 183
01A6 ; }
01A6 ; ///////////////////////////////////////////////////////
01A6 ; write_1820(uchar x)
01A6 ; {
01A6 .dbline 185
01A6 ; uchar m;
01A6 ; for(m=0;m<8;m++)
01A6 4427 clr R20
01A8 10C0 xjmp L41
01AA L38:
01AA .dbline 186
01AA ; {
01AA .dbline 187
01AA ; PORTD&=~(1<<6);
01AA 9698 cbi 0x12,6
01AC .dbline 188
01AC ; if(x&(1<<m)) //写数据,从低位开始
01AC 01E0 ldi R16,1
01AE 142F mov R17,R20
01B0 0E940000 xcall lsl8
01B4 262E mov R2,R22
01B6 2022 and R2,R16
01B8 11F0 breq L42
01BA .dbline 189
01BA ; PORTD|=(1<<6);
01BA 969A sbi 0x12,6
01BC 01C0 xjmp L43
01BE L42:
01BE .dbline 191
01BE ; else
01BE ; PORTD&=~(1<<6);
01BE 9698 cbi 0x12,6
01C0 L43:
01C0 .dbline 192
01C0 08E2 ldi R16,40
01C2 10E0 ldi R17,0
01C4 D4DF xcall _delay
01C6 .dbline 193
01C6 969A sbi 0x12,6
01C8 .dbline 194
01C8 L39:
01C8 .dbline 185
01C8 4395 inc R20
01CA L41:
01CA .dbline 185
01CA 4830 cpi R20,8
01CC 70F3 brlo L38
01CE .dbline 195
01CE ; delay(40); //15~60us
01CE ; PORTD|=(1<<6);
01CE ; }
01CE ; PORTD|=(1<<6);
01CE 969A sbi 0x12,6
01D0 .dbline -2
01D0 L37:
01D0 0E940000 xcall pop_gset2
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 .dbsym r m 20 c
01D6 .dbsym r x 22 c
01D6 .dbend
01D6 .dbfunc e read_1820 _read_1820 fc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -