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