📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile F:\avrprojs\lcd_block\lcd.c
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 17
0000 ; //ICC-AVR application builder : 2008-8-5 下午 04:30:31
0000 ; // Target : M48
0000 ; // Crystal: 1.0000Mhz
0000 ;
0000 ; #include <iom48v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define LCD_DATA_PORT PORTB
0000 ; #define LCD_DATA_DDR DDRB
0000 ; #define LCD_EN_PORT PORTD
0000 ; #define LCD_RS_PORT PORTD
0000 ; #define LCD_EN 0x10
0000 ; #define LCD_RS 0x08
0000 ;
0000 ;
0000 ; void LCD_init(void) //液晶初始化
0000 ; {
0000 .dbline 18
0000 ; delay_nms(2);
0000 02E0 ldi R16,2
0002 10E0 ldi R17,0
0004 E2D0 rcall _delay_nms
0006 .dbline 19
0006 ; LCD_write_char(0x38,0); //8位显示
0006 2227 clr R18
0008 3327 clr R19
000A 08E3 ldi R16,56
000C 10E0 ldi R17,0
000E 97D0 rcall _LCD_write_char
0010 .dbline 21
0010 ;
0010 ; delay_nms(6);
0010 06E0 ldi R16,6
0012 10E0 ldi R17,0
0014 DAD0 rcall _delay_nms
0016 .dbline 22
0016 ; LCD_write_char(0x38,0); //8位显示
0016 2227 clr R18
0018 3327 clr R19
001A 08E3 ldi R16,56
001C 10E0 ldi R17,0
001E 8FD0 rcall _LCD_write_char
0020 .dbline 24
0020 ;
0020 ; delay_nms(2);
0020 02E0 ldi R16,2
0022 10E0 ldi R17,0
0024 D2D0 rcall _delay_nms
0026 .dbline 25
0026 ; LCD_write_char(0x38,0); //8位显示
0026 2227 clr R18
0028 3327 clr R19
002A 08E3 ldi R16,56
002C 10E0 ldi R17,0
002E 87D0 rcall _LCD_write_char
0030 .dbline 27
0030 ;
0030 ; LCD_write_char(0x38,0); //8位显示
0030 2227 clr R18
0032 3327 clr R19
0034 08E3 ldi R16,56
0036 10E0 ldi R17,0
0038 82D0 rcall _LCD_write_char
003A .dbline 28
003A ; delay_nms(2);
003A 02E0 ldi R16,2
003C 10E0 ldi R17,0
003E C5D0 rcall _delay_nms
0040 .dbline 29
0040 ; LCD_write_char(0x01,0); //8位显示
0040 2227 clr R18
0042 3327 clr R19
0044 01E0 ldi R16,1
0046 10E0 ldi R17,0
0048 7AD0 rcall _LCD_write_char
004A .dbline 30
004A ; delay_nms(2);
004A 02E0 ldi R16,2
004C 10E0 ldi R17,0
004E BDD0 rcall _delay_nms
0050 .dbline 31
0050 ; LCD_write_char(0x08,0); //8位显示
0050 2227 clr R18
0052 3327 clr R19
0054 08E0 ldi R16,8
0056 10E0 ldi R17,0
0058 72D0 rcall _LCD_write_char
005A .dbline 32
005A ; delay_nms(1);
005A 01E0 ldi R16,1
005C 10E0 ldi R17,0
005E B5D0 rcall _delay_nms
0060 .dbline 34
0060 ;
0060 ; LCD_write_char(0x06,0); //8位显示
0060 2227 clr R18
0062 3327 clr R19
0064 06E0 ldi R16,6
0066 10E0 ldi R17,0
0068 6AD0 rcall _LCD_write_char
006A .dbline 35
006A ; delay_nms(1);
006A 01E0 ldi R16,1
006C 10E0 ldi R17,0
006E ADD0 rcall _delay_nms
0070 .dbline 38
0070 ;
0070 ;
0070 ; LCD_write_char(0x0c,0); //显示开
0070 2227 clr R18
0072 3327 clr R19
0074 0CE0 ldi R16,12
0076 10E0 ldi R17,0
0078 62D0 rcall _LCD_write_char
007A .dbline 40
007A ; //delay_nms(100);
007A ; LCD_write_char(0x01,0); //清屏
007A 2227 clr R18
007C 3327 clr R19
007E 01E0 ldi R16,1
0080 10E0 ldi R17,0
0082 5DD0 rcall _LCD_write_char
0084 .dbline -2
0084 L1:
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbend
0086 .dbfunc e LCD_write_string _LCD_write_string fV
0086 ; s -> R20,R21
0086 ; Y -> R10,R11
0086 ; X -> R22,R23
.even
0086 _LCD_write_string::
0086 00D0 rcall push_gset3
0088 A22E mov R10,R18
008A B32E mov R11,R19
008C 602F mov R22,R16
008E 712F mov R23,R17
0090 4E81 ldd R20,y+6
0092 5F81 ldd R21,y+7
0094 .dbline -1
0094 .dbline 45
0094 ; //delay_nms(3);
0094 ; }
0094 ;
0094 ; void LCD_write_string(int X,int Y,unsigned char *s)
0094 ; {
0094 .dbline 46
0094 ; LCD_set_xy( X, Y ); //写地址
0094 2A2D mov R18,R10
0096 3B2D mov R19,R11
0098 062F mov R16,R22
009A 172F mov R17,R23
009C 11D0 rcall _LCD_set_xy
009E 09C0 rjmp L4
00A0 L3:
00A0 .dbline 49
00A0 .dbline 50
00A0 E42F mov R30,R20
00A2 F52F mov R31,R21
00A4 2081 ldd R18,z+0
00A6 3327 clr R19
00A8 0027 clr R16
00AA 1127 clr R17
00AC 48D0 rcall _LCD_write_char
00AE .dbline 51
00AE 4F5F subi R20,255 ; offset = 1
00B0 5F4F sbci R21,255
00B2 .dbline 52
00B2 L4:
00B2 .dbline 48
00B2 ;
00B2 ; while (*s) // 写显示字符
00B2 E42F mov R30,R20
00B4 F52F mov R31,R21
00B6 2080 ldd R2,z+0
00B8 2220 tst R2
00BA 91F7 brne L3
00BC .dbline -2
00BC L2:
00BC 00D0 rcall pop_gset3
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r s 20 pc
00C0 .dbsym r Y 10 I
00C0 .dbsym r X 22 I
00C0 .dbend
00C0 .dbfunc e LCD_set_xy _LCD_set_xy fV
00C0 ; address -> R20
00C0 ; y -> R22,R23
00C0 ; x -> R20,R21
.even
00C0 _LCD_set_xy::
00C0 00D0 rcall push_gset2
00C2 622F mov R22,R18
00C4 732F mov R23,R19
00C6 402F mov R20,R16
00C8 512F mov R21,R17
00CA .dbline -1
00CA .dbline 57
00CA ; {
00CA ; LCD_write_char( 0, *s );
00CA ; s ++;
00CA ; }
00CA ; }
00CA ;
00CA ;
00CA ; void LCD_set_xy( int x, int y ) //写地址函数
00CA ; {
00CA .dbline 60
00CA ;
00CA ; unsigned char address;
00CA ; delay_nus(100);
00CA 04E6 ldi R16,100
00CC 10E0 ldi R17,0
00CE 65D0 rcall _delay_nus
00D0 .dbline 61
00D0 ; address=x&0x0f;
00D0 4F70 andi R20,15
00D2 5070 andi R21,0
00D4 .dbline 62
00D4 ; switch(y)
00D4 6030 cpi R22,0
00D6 6707 cpc R22,R23
00D8 69F0 breq L9
00DA X0:
00DA 6130 cpi R22,1
00DC E0E0 ldi R30,0
00DE 7E07 cpc R23,R30
00E0 51F0 breq L10
00E2 6230 cpi R22,2
00E4 E0E0 ldi R30,0
00E6 7E07 cpc R23,R30
00E8 41F0 breq L11
00EA 6330 cpi R22,3
00EC E0E0 ldi R30,0
00EE 7E07 cpc R23,R30
00F0 31F0 breq L12
00F2 06C0 rjmp L8
00F4 X1:
00F4 .dbline 63
00F4 ; {
00F4 L9:
00F4 .dbline 65
00F4 ; case 0:
00F4 ; address+= 0x00; //0x00 - 0x0f
00F4 .dbline 66
00F4 ; break;
00F4 05C0 rjmp L8
00F6 L10:
00F6 .dbline 68
00F6 ; case 1:
00F6 ; address+= 0x40; //0x40 - 0x4f
00F6 405C subi R20,192 ; addi 64
00F8 .dbline 69
00F8 ; break;
00F8 03C0 rjmp L8
00FA L11:
00FA .dbline 71
00FA ; case 2:
00FA ; address+= 0x10; //0x10 - 0x1f
00FA 405F subi R20,240 ; addi 16
00FC .dbline 72
00FC ; break;
00FC 01C0 rjmp L8
00FE L12:
00FE .dbline 74
00FE ; case 3:
00FE ; address+= 0x50; //0x50 - 0x5f
00FE 405B subi R20,176 ; addi 80
0100 .dbline 75
0100 ; break;
0100 .dbline 77
0100 ; default :
0100 ; break;
0100 L8:
0100 .dbline 79
0100 ; }
0100 ; address=address|0x80;
0100 4068 ori R20,128
0102 .dbline 80
0102 ; LCD_write_char( address, 0 );
0102 2227 clr R18
0104 3327 clr R19
0106 042F mov R16,R20
0108 1127 clr R17
010A 19D0 rcall _LCD_write_char
010C .dbline -2
010C L6:
010C 00D0 rcall pop_gset2
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r address 20 c
0110 .dbsym r y 22 I
0110 .dbsym r x 20 I
0110 .dbend
0110 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0110 _LCD_en_write::
0110 .dbline -1
0110 .dbline 86
0110 ; //delay_nms(2);
0110 ; }
0110 ;
0110 ;
0110 ; void LCD_en_write(void) //液晶使能
0110 ; {
0110 .dbline 87
0110 ; LCD_EN_PORT|=LCD_EN;
0110 5C9A sbi 0xb,4
0112 .dbline 88
0112 ; delay_nus(1);
0112 01E0 ldi R16,1
0114 10E0 ldi R17,0
0116 41D0 rcall _delay_nus
0118 .dbline 89
0118 ; LCD_EN_PORT&=~LCD_EN;
0118 5C98 cbi 0xb,4
011A .dbline -2
011A L13:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -