📄 lcd.lis
字号:
00B4 8BBB out 0x1b,R24
00B6 .dbline 101
00B6 ; LCD_DATA_PORT|=data&0xf0; //写高四位
00B6 842F mov R24,R20
00B8 807F andi R24,240
00BA 2BB2 in R2,0x1b
00BC 282A or R2,R24
00BE 2BBA out 0x1b,R2
00C0 .dbline 102
00C0 ; LCD_en_write();
00C0 CADF xcall _LCD_en_write
00C2 .dbline 103
00C2 ; data=data<<4; //低四位移到高四位
00C2 842F mov R24,R20
00C4 8F70 andi R24,#0x0F
00C6 8295 swap R24
00C8 482F mov R20,R24
00CA .dbline 104
00CA ; LCD_DATA_PORT&=0X0f; //清高四位
00CA 8BB3 in R24,0x1b
00CC 8F70 andi R24,15
00CE 8BBB out 0x1b,R24
00D0 .dbline 105
00D0 ; LCD_DATA_PORT|=data&0xf0; //写低四位
00D0 842F mov R24,R20
00D2 807F andi R24,240
00D4 2BB2 in R2,0x1b
00D6 282A or R2,R24
00D8 2BBA out 0x1b,R2
00DA .dbline 106
00DA ; LCD_en_write();
00DA BDDF xcall _LCD_en_write
00DC .dbline -2
00DC L12:
00DC 0E940000 xcall pop_gset1
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym r data 20 c
00E2 .dbend
00E2 .dbfunc e LCD_set_xy _LCD_set_xy fV
00E2 ; address -> R20
00E2 ; y -> R20
00E2 ; x -> R22
.even
00E2 _LCD_set_xy::
00E2 0E940000 xcall push_gset2
00E6 422F mov R20,R18
00E8 602F mov R22,R16
00EA .dbline -1
00EA .dbline 111
00EA ; }
00EA ;
00EA ;
00EA ; void LCD_set_xy( uchar x, uchar y ) //写地址函数
00EA ; {
00EA .dbline 113
00EA ; uchar address;
00EA ; if (y == 0) address = 0x80 + x;
00EA 4423 tst R20
00EC 19F4 brne L14
00EE .dbline 113
00EE 462F mov R20,R22
00F0 4058 subi R20,128 ; addi 128
00F2 02C0 xjmp L15
00F4 L14:
00F4 .dbline 114
00F4 ; else address = 0xc0 + x;
00F4 462F mov R20,R22
00F6 4054 subi R20,64 ; addi 192
00F8 L15:
00F8 .dbline 115
00F8 ; LCD_write_command( address);
00F8 042F mov R16,R20
00FA B3DF xcall _LCD_write_command
00FC .dbline -2
00FC L13:
00FC 0E940000 xcall pop_gset2
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r address 20 c
0102 .dbsym r y 20 c
0102 .dbsym r x 22 c
0102 .dbend
0102 .dbfunc e LCD_write_string _LCD_write_string fV
0102 ; s -> R20,R21
0102 ; Y -> R10
0102 ; X -> R22
.even
0102 _LCD_write_string::
0102 0E940000 xcall push_gset3
0106 A22E mov R10,R18
0108 602F mov R22,R16
010A 4E81 ldd R20,y+6
010C 5F81 ldd R21,y+7
010E .dbline -1
010E .dbline 119
010E ; }
010E ;
010E ; void LCD_write_string(uchar X,uchar Y,uchar *s) //列x=0~15,行y=0,1
010E ; {
010E .dbline 120
010E ; LCD_set_xy( X, Y ); //写地址
010E 2A2D mov R18,R10
0110 062F mov R16,R22
0112 E7DF xcall _LCD_set_xy
0114 05C0 xjmp L18
0116 L17:
0116 .dbline 122
0116 .dbline 123
0116 FA01 movw R30,R20
0118 0081 ldd R16,z+0
011A C3DF xcall _LCD_write_data
011C .dbline 124
011C 4F5F subi R20,255 ; offset = 1
011E 5F4F sbci R21,255
0120 .dbline 125
0120 L18:
0120 .dbline 121
0120 ; while (*s) // 写显示字符
0120 FA01 movw R30,R20
0122 2080 ldd R2,z+0
0124 2220 tst R2
0126 B9F7 brne L17
0128 .dbline -2
0128 L16:
0128 0E940000 xcall pop_gset3
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r s 20 pc
012E .dbsym r Y 10 c
012E .dbsym r X 22 c
012E .dbend
012E .dbfunc e LCD_write_char _LCD_write_char fV
012E ; data -> y+4
012E ; Y -> R22
012E ; X -> R20
.even
012E _LCD_write_char::
012E 0E940000 xcall push_gset2
0132 622F mov R22,R18
0134 402F mov R20,R16
0136 .dbline -1
0136 .dbline 130
0136 ; {
0136 ; LCD_write_data( *s );
0136 ; s ++;
0136 ; }
0136 ;
0136 ; }
0136 ;
0136 ; void LCD_write_char(uchar X,uchar Y,uchar data) //列x=0~15,行y=0,1
0136 ; {
0136 .dbline 131
0136 ; LCD_set_xy( X, Y ); //写地址
0136 262F mov R18,R22
0138 042F mov R16,R20
013A D3DF xcall _LCD_set_xy
013C .dbline 132
013C ; LCD_write_data( data);
013C 0C81 ldd R16,y+4
013E B1DF xcall _LCD_write_data
0140 .dbline -2
0140 L20:
0140 0E940000 xcall pop_gset2
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbsym l data 4 c
0146 .dbsym r Y 22 c
0146 .dbsym r X 20 c
0146 .dbend
0146 .dbfunc e init_devices _init_devices fV
.even
0146 _init_devices::
0146 .dbline -1
0146 .dbline 137
0146 ;
0146 ; }
0146 ;
0146 ; void init_devices(void)
0146 ; {
0146 .dbline 138
0146 ; CLI(); //disable all interrupts
0146 F894 cli
0148 .dbline 139
0148 ; LCD_init();
0148 71DF xcall _LCD_init
014A .dbline 140
014A ; MCUCR = 0x00;
014A 2224 clr R2
014C 25BE out 0x35,R2
014E .dbline 141
014E ; GICR = 0x00;
014E 2BBE out 0x3b,R2
0150 .dbline 142
0150 ; TIMSK = 0x00; // r interrupt sources
0150 29BE out 0x39,R2
0152 .dbline 143
0152 ; SEI(); //re-enable interrupts
0152 7894 sei
0154 .dbline -2
0154 L21:
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbend
0156 .dbfunc e main _main fV
.even
0156 _main::
0156 2297 sbiw R28,2
0158 .dbline -1
0158 .dbline 148
0158 ; }
0158 ;
0158 ;
0158 ; void main(void)
0158 ; {
0158 .dbline 149
0158 ; init_devices();
0158 F6DF xcall _init_devices
015A .dbline 150
015A ; LCD_write_string(0,0,"MCU IS:");
015A 80E0 ldi R24,<L23
015C 90E0 ldi R25,>L23
015E 9983 std y+1,R25
0160 8883 std y+0,R24
0162 2227 clr R18
0164 0027 clr R16
0166 CDDF xcall _LCD_write_string
0168 .dbline 151
0168 ; for(;;)
0168 L24:
0168 .dbline 152
0168 .dbline 153
0168 80E0 ldi R24,<L28
016A 90E0 ldi R25,>L28
016C 9983 std y+1,R25
016E 8883 std y+0,R24
0170 21E0 ldi R18,1
0172 0027 clr R16
0174 C6DF xcall _LCD_write_string
0176 .dbline 154
0176 2224 clr R2
0178 2882 std y+0,R2
017A 2227 clr R18
017C 07E0 ldi R16,7
017E D7DF xcall _LCD_write_char
0180 .dbline 155
0180 .dbline 151
0180 .dbline 151
0180 F3CF xjmp L24
0182 X1:
0182 .dbline -2
0182 L22:
0182 2296 adiw R28,2
0184 .dbline 0 ; func end
0184 0895 ret
0186 .dbend
.area data(ram, con, rel)
0000 .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c
0000 L28:
0000 .blkb 9
.area idata
0000 41546D656761313600 .byte 'A,'T,'m,'e,'g,'a,49,54,0
.area data(ram, con, rel)
0009 .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c
0009 L23:
0009 .blkb 8
.area idata
0009 4D43552049533A00 .byte 'M,'C,'U,32,'I,'S,58,0
.area data(ram, con, rel)
0011 .dbfile F:\单片机源程序\AVR单片机程序\MAGE16\lcd1602\lcd.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -