📄 1602b_lcd.lis
字号:
00B2 X1:
00B2 .dbline 78
00B2 ; LCD_DATA_PORT |= data_temp&0xf0;
00B2 CB01 movw R24,R22
00B4 807F andi R24,240
00B6 9070 andi R25,0
00B8 22B2 in R2,0x12
00BA 3324 clr R3
00BC 282A or R2,R24
00BE 392A or R3,R25
00C0 22BA out 0x12,R2
00C2 08C0 rjmp L7
00C4 L6:
00C4 .dbline 80
00C4 ; else
00C4 ; LCD_DATA_PORT |= command_temp&0xf0;
00C4 CA01 movw R24,R20
00C6 807F andi R24,240
00C8 9070 andi R25,0
00CA 22B2 in R2,0x12
00CC 3324 clr R3
00CE 282A or R2,R24
00D0 392A or R3,R25
00D2 22BA out 0x12,R2
00D4 L7:
00D4 .dbline 81
00D4 ; LCD_en_write();
00D4 ADDF rcall _LCD_en_write
00D6 .dbline 83
00D6 ;
00D6 ; LCD_RW_PORT |= LCD_RW;
00D6 939A sbi 0x12,3
00D8 .dbline 85
00D8 ;
00D8 ; LCD_RS_PORT ^= LCD_RS;
00D8 80E1 ldi R24,16
00DA 25B2 in R2,0x15
00DC 2826 eor R2,R24
00DE 25BA out 0x15,R2
00E0 .dbline -2
00E0 L3:
00E0 00D0 rcall pop_gset4
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r data_temp 22 i
00E4 .dbsym r command_temp 20 i
00E4 .dbsym r data 12 i
00E4 .dbsym r command 10 i
00E4 .dbend
00E4 .dbfunc e LCD_wait_Ready _LCD_wait_Ready fV
.even
00E4 _LCD_wait_Ready::
00E4 .dbline -1
00E4 .dbline 89
00E4 ; }
00E4 ;
00E4 ; void LCD_wait_Ready(void) //等待LCD空闲
00E4 ; {
00E4 .dbline 90
00E4 ; LCD_DATA_DDR &= ~0x80; //PD7 I/O口方向设置为输入
00E4 8F98 cbi 0x11,7
00E6 .dbline 92
00E6 ;
00E6 ; LCD_RW_PORT |= LCD_RW; //RW=1
00E6 939A sbi 0x12,3
00E8 .dbline 94
00E8 ;
00E8 ; LCD_RS_PORT &= ~LCD_RS; //RS=0
00E8 AC98 cbi 0x15,4
00EA .dbline 96
00EA ;
00EA ; LCD_EN_PORT |= LCD_EN; //EN=1
00EA AD9A sbi 0x15,5
00EC L9:
00EC .dbline 98
00EC L10:
00EC .dbline 98
00EC ;
00EC ; while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PD7,为0表示空闲;
00EC 8799 sbic 0x10,7
00EE 03C0 rjmp L12
00F0 01E0 ldi R16,1
00F2 10E0 ldi R17,0
00F4 02C0 rjmp L13
00F6 L12:
00F6 0027 clr R16
00F8 1127 clr R17
00FA L13:
00FA 0030 cpi R16,0
00FC 0107 cpc R16,R17
00FE B1F3 breq L9
0100 X2:
0100 .dbline 100
0100 ;
0100 ; LCD_EN_PORT &= ~LCD_EN; //EN=0
0100 AD98 cbi 0x15,5
0102 .dbline 102
0102 ;
0102 ; LCD_DATA_DDR |= 0xf0;
0102 81B3 in R24,0x11
0104 806F ori R24,240
0106 81BB out 0x11,R24
0108 .dbline -2
0108 L8:
0108 .dbline 0 ; func end
0108 0895 ret
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 00D0 rcall push_gset2
010C 422F mov R20,R18
010E 602F mov R22,R16
0110 .dbline -1
0110 .dbline 116
0110 ; }
0110 ;
0110 ; /*-----------------------------------------------------------------------
0110 ; LCD_set_xy : 设置LCD显示的起始位置
0110 ;
0110 ; 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
0110 ; LCD第一行显示寄存器地址:0X80-0X8F
0110 ; LCD第一行显示寄存器地址:0XC0-0XCF
0110 ;
0110 ; 编写日期 :2004-8-19
0110 ; 最后修改日期 :2004-8-19
0110 ; -----------------------------------------------------------------------*/
0110 ; void LCD_set_xy( unsigned char x, unsigned char y )
0110 ; {
0110 .dbline 118
0110 ; unsigned char address;
0110 ; if (y == 0) address = 0x80 + x;
0110 4423 tst R20
0112 19F4 brne L15
0114 .dbline 118
0114 462F mov R20,R22
0116 4058 subi R20,128 ; addi 128
0118 02C0 rjmp L16
011A L15:
011A .dbline 120
011A ; else
011A ; address = 0xc0 + x;
011A 462F mov R20,R22
011C 4054 subi R20,64 ; addi 192
011E L16:
011E .dbline 121
011E ; LCD_write_char( address, 0 );
011E 2227 clr R18
0120 3327 clr R19
0122 042F mov R16,R20
0124 1127 clr R17
0126 8ADF rcall _LCD_write_char
0128 .dbline -2
0128 L14:
0128 00D0 rcall pop_gset2
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r address 20 c
012C .dbsym r y 20 c
012C .dbsym r x 22 c
012C .dbend
012C .dbfunc e LCD_write_string _LCD_write_string fV
012C ; s -> R20,R21
012C ; Y -> R10
012C ; X -> R22
.even
012C _LCD_write_string::
012C 00D0 rcall 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 133
0136 ; }
0136 ; /*-----------------------------------------------------------------------
0136 ; LCD_write_string : 英文字符串显示函数
0136 ;
0136 ; 输入参数:*s :英文字符串指针;
0136 ; X、Y : 显示字符串的位置
0136 ;
0136 ; 编写日期 :2004-8-19
0136 ; 最后修改日期 :2004-8-19
0136 ; -----------------------------------------------------------------------*/
0136 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
0136 ; {
0136 .dbline 134
0136 ; LCD_set_xy( X, Y );
0136 2A2D mov R18,R10
0138 062F mov R16,R22
013A E7DF rcall _LCD_set_xy
013C 08C0 rjmp L19
013E L18:
013E .dbline 137
013E .dbline 138
013E FA01 movw R30,R20
0140 2081 ldd R18,z+0
0142 3327 clr R19
0144 0027 clr R16
0146 1127 clr R17
0148 79DF rcall _LCD_write_char
014A .dbline 139
014A 4F5F subi R20,255 ; offset = 1
014C 5F4F sbci R21,255
014E .dbline 140
014E L19:
014E .dbline 136
014E ;
014E ; while (*s)
014E FA01 movw R30,R20
0150 2080 ldd R2,z+0
0152 2220 tst R2
0154 A1F7 brne L18
0156 .dbline -2
0156 L17:
0156 00D0 rcall pop_gset3
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbsym r s 20 pc
015A .dbsym r Y 10 c
015A .dbsym r X 22 c
015A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -