📄 lcd.lis
字号:
009A DDDF xcall _LCD_en_write
009C .dbline -2
009C L11:
009C 0E940000 xcall pop_gset1
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r command 20 c
00A2 .dbend
00A2 .dbfunc e LCD_write_data _LCD_write_data fV
00A2 ; data -> R20
.even
00A2 _LCD_write_data::
00A2 0E940000 xcall push_gset1
00A6 402F mov R20,R16
00A8 .dbline -1
00A8 .dbline 96
00A8 ;
00A8 ; }
00A8 ;
00A8 ; void LCD_write_data(uchar data) //写数据
00A8 ; {
00A8 .dbline 97
00A8 ; delay(16);
00A8 00E1 ldi R16,16
00AA 10E0 ldi R17,0
00AC A9DF xcall _delay
00AE .dbline 98
00AE ; LCD_RS_PORT|=LCD_RS; //RS=1
00AE D99A sbi 0x1b,1
00B0 .dbline 99
00B0 ; LCD_DATA_PORT&=0X0f; //清高四位
00B0 8BB3 in R24,0x1b
00B2 8F70 andi R24,15
00B4 8BBB out 0x1b,R24
00B6 .dbline 100
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 101
00C0 ; LCD_en_write();
00C0 CADF xcall _LCD_en_write
00C2 .dbline 102
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 103
00CA ; LCD_DATA_PORT&=0X0f; //清高四位
00CA 8BB3 in R24,0x1b
00CC 8F70 andi R24,15
00CE 8BBB out 0x1b,R24
00D0 .dbline 104
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 105
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 110
00EA ; }
00EA ;
00EA ;
00EA ; void LCD_set_xy( uchar x, uchar y ) //写地址函数
00EA ; {
00EA .dbline 112
00EA ; uchar address;
00EA ; if (y == 0) address = 0x80 + x;
00EA 4423 tst R20
00EC 19F4 brne L14
00EE .dbline 112
00EE 462F mov R20,R22
00F0 4058 subi R20,128 ; addi 128
00F2 02C0 xjmp L15
00F4 L14:
00F4 .dbline 113
00F4 ; else address = 0xc0 + x;
00F4 462F mov R20,R22
00F6 4054 subi R20,64 ; addi 192
00F8 L15:
00F8 .dbline 114
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 118
010E ; }
010E ;
010E ; void LCD_write_string(uchar X,uchar Y,uchar *s) //列x=0~15,行y=0,1
010E ; {
010E .dbline 119
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 121
0116 .dbline 122
0116 FA01 movw R30,R20
0118 0081 ldd R16,z+0
011A C3DF xcall _LCD_write_data
011C .dbline 123
011C 4F5F subi R20,255 ; offset = 1
011E 5F4F sbci R21,255
0120 .dbline 124
0120 L18:
0120 .dbline 120
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 129
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 130
0136 ; LCD_set_xy( X, Y ); //写地址
0136 262F mov R18,R22
0138 042F mov R16,R20
013A D3DF xcall _LCD_set_xy
013C .dbline 131
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_lcd _init_lcd fV
.even
0146 _init_lcd::
0146 .dbline -1
0146 .dbline 136
0146 ;
0146 ; }
0146 ;
0146 ; void init_lcd(void)
0146 ; {
0146 .dbline 137
0146 ; CLI(); //禁止所有中断
0146 F894 cli
0148 .dbline 138
0148 ; LCD_init();
0148 71DF xcall _LCD_init
014A .dbline 139
014A ; MCUCR = 0x00;
014A 2224 clr R2
014C 25BE out 0x35,R2
014E .dbline 140
014E ; GICR = 0x00;
014E 2BBE out 0x3b,R2
0150 .dbline 141
0150 ; TIMSK = 0x00;
0150 29BE out 0x39,R2
0152 .dbline 142
0152 ; SEI(); //重新开启所有中断
0152 7894 sei
0154 .dbline -2
0154 L21:
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -