📄 lcd.lis
字号:
008C .dbline 91
008C ; LCD_DATA_PORT &=0x0F;
008C 8BB3 in R24,0x1b
008E 8F70 andi R24,15
0090 8BBB out 0x1b,R24
0092 .dbline 92
0092 ; LCD_DATA_PORT |= data&0xf0;
0092 842F mov R24,R20
0094 807F andi R24,240
0096 2BB2 in R2,0x1b
0098 282A or R2,R24
009A 2BBA out 0x1b,R2
009C .dbline 93
009C ; LCD16xx_en_write();
009C D2DF xcall _LCD16xx_en_write
009E .dbline -2
009E L4:
009E 0E940000 xcall pop_gset2
00A2 .dbline 0 ; func end
00A2 0895 ret
00A4 .dbsym r data 20 c
00A4 .dbsym r command 22 c
00A4 .dbend
00A4 .dbfunc e LCD16xx_set_xy _LCD16xx_set_xy fV
00A4 ; address -> R20
00A4 ; y -> R10
00A4 ; x -> R22
.even
00A4 _LCD16xx_set_xy::
00A4 0E940000 xcall push_gset3
00A8 A22E mov R10,R18
00AA 602F mov R22,R16
00AC .dbline -1
00AC .dbline 118
00AC ;
00AC ; }
00AC ; /*
00AC ; void LCD16xx_wait_Ready(void) //等待LCD空闲
00AC ; {
00AC ; LCD_DATA_DDR &= ~0x80; //PA7 I/O口方向设置为输入
00AC ; RW_H; //RW=1
00AC ; RS_L; //RS=0
00AC ; E_H; //EN=1
00AC ; while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PA7,为0表示空闲;
00AC ; E_L; //EN=0
00AC ; LCD_DATA_DDR |= LCD_DATA;
00AC ; }
00AC ; */
00AC ; /*-----------------------------------------------------------------------
00AC ; LCD_set_xy : 设置LCD显示的起始位置
00AC ;
00AC ; 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
00AC ; LCD第一行显示寄存器地址:0x80-0x8F
00AC ; LCD第一行显示寄存器地址:0xC0-0xCF
00AC ; 编写日期 :2008年04月11日
00AC ; 最后修改日期 :2008年04月11日
00AC ; -----------------------------------------------------------------------*/
00AC ; void LCD16xx_set_xy( unsigned char x, unsigned char y )
00AC ; {
00AC .dbline 120
00AC ; unsigned char address;
00AC ; if (y == 0)
00AC AA20 tst R10
00AE 19F4 brne L8
00B0 .dbline 121
00B0 ; address = 0x80 + x;
00B0 462F mov R20,R22
00B2 4058 subi R20,128 ; addi 128
00B4 0EC0 xjmp L9
00B6 L8:
00B6 .dbline 122
00B6 ; else if(y == 1)
00B6 8A2D mov R24,R10
00B8 8130 cpi R24,1
00BA 19F4 brne L10
00BC .dbline 123
00BC ; address = 0xc0 + x;
00BC 462F mov R20,R22
00BE 4054 subi R20,64 ; addi 192
00C0 08C0 xjmp L11
00C2 L10:
00C2 .dbline 124
00C2 ; else if(y == 2)
00C2 8A2D mov R24,R10
00C4 8230 cpi R24,2
00C6 19F4 brne L12
00C8 .dbline 125
00C8 ; address = 0x90 + x;
00C8 462F mov R20,R22
00CA 4057 subi R20,112 ; addi 144
00CC 02C0 xjmp L13
00CE L12:
00CE .dbline 127
00CE ; else
00CE ; address = 0xd0 + x;
00CE 462F mov R20,R22
00D0 4053 subi R20,48 ; addi 208
00D2 L13:
00D2 L11:
00D2 L9:
00D2 .dbline 128
00D2 ; LCD16xx_write_char( 1,address );
00D2 242F mov R18,R20
00D4 01E0 ldi R16,1
00D6 C0DF xcall _LCD16xx_write_char
00D8 .dbline -2
00D8 L7:
00D8 0E940000 xcall pop_gset3
00DC .dbline 0 ; func end
00DC 0895 ret
00DE .dbsym r address 20 c
00DE .dbsym r y 10 c
00DE .dbsym r x 22 c
00DE .dbend
00DE .dbfunc e LCD16xx_write_string _LCD16xx_write_string fV
00DE ; s -> R20,R21
00DE ; Y -> R10
00DE ; X -> R22
.even
00DE _LCD16xx_write_string::
00DE 0E940000 xcall push_gset3
00E2 A22E mov R10,R18
00E4 602F mov R22,R16
00E6 4E81 ldd R20,y+6
00E8 5F81 ldd R21,y+7
00EA .dbline -1
00EA .dbline 139
00EA ; }
00EA ; /*-----------------------------------------------------------------------
00EA ; LCD16xx_write_string : 英文字符串显示函数
00EA ;
00EA ; 输入参数:*s :英文字符串指针;
00EA ; X、Y : 显示字符串的位置
00EA ; 编写日期 :2008年04月11日
00EA ; 最后修改日期 :2008年04月11日
00EA ; -----------------------------------------------------------------------*/
00EA ; void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
00EA ; {
00EA .dbline 140
00EA ; LCD16xx_set_xy( X, Y );
00EA 2A2D mov R18,R10
00EC 062F mov R16,R22
00EE DADF xcall _LCD16xx_set_xy
00F0 0AC0 xjmp L16
00F2 L15:
00F2 .dbline 142
00F2 .dbline 143
00F2 05E0 ldi R16,5
00F4 10E0 ldi R17,0
00F6 0E940000 xcall _delay_nus
00FA .dbline 144
00FA FA01 movw R30,R20
00FC 2081 ldd R18,z+0
00FE 0027 clr R16
0100 ABDF xcall _LCD16xx_write_char
0102 .dbline 145
0102 4F5F subi R20,255 ; offset = 1
0104 5F4F sbci R21,255
0106 .dbline 146
0106 L16:
0106 .dbline 141
0106 ; while (*s)
0106 FA01 movw R30,R20
0108 2080 ldd R2,z+0
010A 2220 tst R2
010C 91F7 brne L15
010E .dbline -2
010E L14:
010E 0E940000 xcall pop_gset3
0112 .dbline 0 ; func end
0112 0895 ret
0114 .dbsym r s 20 pc
0114 .dbsym r Y 10 c
0114 .dbsym r X 22 c
0114 .dbend
0114 .dbfunc e LCD16xx_dispaly_char _LCD16xx_dispaly_char fV
0114 ; key -> y+4
0114 ; Y -> R22
0114 ; X -> R20
.even
0114 _LCD16xx_dispaly_char::
0114 0E940000 xcall push_gset2
0118 622F mov R22,R18
011A 402F mov R20,R16
011C .dbline -1
011C .dbline 152
011C ; {
011C ; delay_nus(5);
011C ; LCD16xx_write_char( 0, *s );
011C ; s++;
011C ; }
011C ; }
011C ;
011C ;
011C ; void LCD16xx_dispaly_char(unsigned char X,unsigned char Y,unsigned char key)
011C ;
011C ; {
011C .dbline 153
011C ; LCD16xx_set_xy( X, Y );
011C 262F mov R18,R22
011E 042F mov R16,R20
0120 C1DF xcall _LCD16xx_set_xy
0122 .dbline 154
0122 ; LCD16xx_write_char(0,key);
0122 2C81 ldd R18,y+4
0124 0027 clr R16
0126 98DF xcall _LCD16xx_write_char
0128 .dbline -2
0128 L18:
0128 0E940000 xcall pop_gset2
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym l key 4 c
012E .dbsym r Y 22 c
012E .dbsym r X 20 c
012E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -