📄 lcm.lis
字号:
.module lcm.c
.area text(rom, con, rel)
0000 .dbfile G:\AVR系列\LCM0825\lcm.c
0000 .dbfunc e delay_1us _delay_1us fV
0000 ; k -> R16,R17
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 5
0000 ; //lcm.c
0000 ; //液晶显示程序
0000 ; #include<iom8v.h>
0000 ; void delay_1us(void)//1us延时程序
0000 ; {
0000 .dbline 7
0000 ; unsigned int k;
0000 ; for(k=1;k<10;k++)
0000 01E0 ldi R16,1
0002 10E0 ldi R17,0
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 8
0006 L3:
0006 .dbline 7
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 7
000A 0A30 cpi R16,10
000C E0E0 ldi R30,0
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r k 16 i
0014 .dbend
0014 .dbfunc e delay_1ms _delay_1ms fV
0014 ; k -> R16,R17
.even
0014 _delay_1ms::
0014 .dbline -1
0014 .dbline 12
0014 ; ;
0014 ; }
0014 ;
0014 ; void delay_1ms(void)//1ms延时程序
0014 ; {
0014 .dbline 14
0014 ; unsigned int k;
0014 ; for(k=1;k<856;k++)
0014 01E0 ldi R16,1
0016 10E0 ldi R17,0
0018 02C0 rjmp L10
001A L7:
001A .dbline 15
001A L8:
001A .dbline 14
001A 0F5F subi R16,255 ; offset = 1
001C 1F4F sbci R17,255
001E L10:
001E .dbline 14
001E 0835 cpi R16,88
0020 E3E0 ldi R30,3
0022 1E07 cpc R17,R30
0024 D0F3 brlo L7
0026 .dbline -2
0026 L6:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r k 16 i
0028 .dbend
0028 .dbfunc e delay _delay fV
0028 ; l -> R20,R21
0028 ; m -> R22,R23
.even
0028 _delay::
0028 00D0 rcall push_gset2
002A B801 movw R22,R16
002C .dbline -1
002C .dbline 18
002C ; ;
002C ; }
002C ; void delay(unsigned int m)//延时m ms程序
002C ; {
002C .dbline 21
002C ; unsigned int l;
002C ;
002C ; for(l=0;l<m;l++)
002C 4427 clr R20
002E 5527 clr R21
0030 03C0 rjmp L15
0032 L12:
0032 .dbline 22
0032 F0DF rcall _delay_1ms
0034 L13:
0034 .dbline 21
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 L15:
0038 .dbline 21
0038 4617 cp R20,R22
003A 5707 cpc R21,R23
003C D0F3 brlo L12
003E .dbline -2
003E L11:
003E 00D0 rcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r l 20 i
0042 .dbsym r m 22 i
0042 .dbend
0042 .dbfunc e data_0 _data_0 fV
0042 ; i -> R20,R21
0042 ; n -> R22,R23
.even
0042 _data_0::
0042 00D0 rcall push_gset2
0044 B801 movw R22,R16
0046 .dbline -1
0046 .dbline 26
0046 ; delay_1ms();
0046 ; }
0046 ;
0046 ; void data_0(unsigned int n)//传输N个0
0046 ; { int i;
0046 .dbline 27
0046 ; for(i=0;i<n;i++)
0046 4427 clr R20
0048 5527 clr R21
004A 0CC0 rjmp L20
004C L17:
004C .dbline 28
004C .dbline 30
004C 82B3 in R24,0x12
004E 8F77 andi R24,127
0050 82BB out 0x12,R24
0052 .dbline 30
0052 D6DF rcall _delay_1us
0054 .dbline 31
0054 82B3 in R24,0x12
0056 8F7B andi R24,191
0058 82BB out 0x12,R24
005A .dbline 31
005A D2DF rcall _delay_1us
005C .dbline 32
005C 969A sbi 0x12,6
005E .dbline 32
005E D0DF rcall _delay_1us
0060 .dbline 33
0060 L18:
0060 .dbline 27
0060 4F5F subi R20,255 ; offset = 1
0062 5F4F sbci R21,255
0064 L20:
0064 .dbline 27
0064 4617 cp R20,R22
0066 5707 cpc R21,R23
0068 88F3 brlo L17
006A .dbline -2
006A L16:
006A 00D0 rcall pop_gset2
006C .dbline 0 ; func end
006C 0895 ret
006E .dbsym r i 20 I
006E .dbsym r n 22 i
006E .dbend
006E .dbfunc e data_1 _data_1 fV
006E ; i -> R20,R21
006E ; n -> R22,R23
.even
006E _data_1::
006E 00D0 rcall push_gset2
0070 B801 movw R22,R16
0072 .dbline -1
0072 .dbline 37
0072 ; {
0072 ;
0072 ; PORTD&=0x7F; delay_1us();//data=0
0072 ; PORTD&=0xBF;delay_1us();//wr=0
0072 ; PORTD|=0x40; delay_1us();//wr=1
0072 ; }
0072 ; }
0072 ;
0072 ; void data_1(unsigned int n)//传输N个1
0072 ; { int i;
0072 .dbline 38
0072 ; for(i=0;i<n;i++)
0072 4427 clr R20
0074 5527 clr R21
0076 0DC0 rjmp L25
0078 L22:
0078 .dbline 39
0078 .dbline 40
0078 82B3 in R24,0x12
007A 8F77 andi R24,127
007C 82BB out 0x12,R24
007E .dbline 41
007E 979A sbi 0x12,7
0080 .dbline 41
0080 BFDF rcall _delay_1us
0082 .dbline 42
0082 82B3 in R24,0x12
0084 8F7B andi R24,191
0086 82BB out 0x12,R24
0088 .dbline 42
0088 BBDF rcall _delay_1us
008A .dbline 43
008A 969A sbi 0x12,6
008C .dbline 43
008C B9DF rcall _delay_1us
008E .dbline 44
008E L23:
008E .dbline 38
008E 4F5F subi R20,255 ; offset = 1
0090 5F4F sbci R21,255
0092 L25:
0092 .dbline 38
0092 4617 cp R20,R22
0094 5707 cpc R21,R23
0096 80F3 brlo L22
0098 .dbline -2
0098 L21:
0098 00D0 rcall pop_gset2
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r i 20 I
009C .dbsym r n 22 i
009C .dbend
009C .dbfunc e write_lcd _write_lcd fV
009C ; j -> R20
009C ; dat -> R22
009C ; data -> R10
009C ; n -> R20
.even
009C _write_lcd::
009C 00D0 rcall push_gset3
009E A22E mov R10,R18
00A0 402F mov R20,R16
00A2 .dbline -1
00A2 .dbline 49
00A2 ; {
00A2 ; PORTD&=0x7f;
00A2 ; PORTD|=0x80;delay_1us();//data=1
00A2 ; PORTD&=0xBF;delay_1us();//wr=0
00A2 ; PORTD|=0x40;delay_1us();//wr=1
00A2 ; }
00A2 ; }
00A2 ;
00A2 ;
00A2 ; void write_lcd(char n,unsigned char data )
00A2 ; {
00A2 .dbline 51
00A2 ; char j;
00A2 ; unsigned char dat=data;
00A2 6A2D mov R22,R10
00A4 .dbline 52
00A4 ; DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
00A4 80EF ldi R24,240
00A6 81BB out 0x11,R24
00A8 .dbline 52
00A8 ABDF rcall _delay_1us
00AA .dbline 53
00AA ; PORTD=0xff; delay_1us();
00AA 8FEF ldi R24,255
00AC 82BB out 0x12,R24
00AE .dbline 53
00AE A8DF rcall _delay_1us
00B0 .dbline 54
00B0 ; switch(n)
00B0 5527 clr R21
00B2 4A30 cpi R20,10
00B4 E0E0 ldi R30,0
00B6 5E07 cpc R21,R30
00B8 09F4 brne X1
00BA 62C0 rjmp L40
00BC X1:
00BC 4C30 cpi R20,12
00BE E0E0 ldi R30,0
00C0 5E07 cpc R21,R30
00C2 29F0 breq L30
00C4 4D30 cpi R20,13
00C6 E0E0 ldi R30,0
00C8 5E07 cpc R21,R30
00CA 61F1 breq L35
00CC 89C0 rjmp L27
00CE X0:
00CE .dbline 55
00CE ; {
00CE L30:
00CE .dbline 57
00CE ; case 12://写命令
00CE ; {
00CE .dbline 59
00CE ;
00CE ; PORTD&=0xef;delay_1us();
00CE 82B3 in R24,0x12
00D0 8F7E andi R24,239
00D2 82BB out 0x12,R24
00D4 .dbline 59
00D4 95DF rcall _delay_1us
00D6 .dbline 60
00D6 ; data_1(1);
00D6 01E0 ldi R16,1
00D8 10E0 ldi R17,0
00DA C9DF rcall _data_1
00DC .dbline 61
00DC ; data_0(2);
00DC 02E0 ldi R16,2
00DE 10E0 ldi R17,0
00E0 B0DF rcall _data_0
00E2 .dbline 62
00E2 ; for(j=0;j<8;j++)
00E2 4427 clr R20
00E4 13C0 rjmp L34
00E6 L31:
00E6 .dbline 63
00E6 .dbline 64
00E6 82B3 in R24,0x12
00E8 8F77 andi R24,127
00EA 82BB out 0x12,R24
00EC .dbline 64
00EC 89DF rcall _delay_1us
00EE .dbline 65
00EE 862F mov R24,R22
00F0 8078 andi R24,128
00F2 22B2 in R2,0x12
00F4 282A or R2,R24
00F6 22BA out 0x12,R2
00F8 .dbline 65
00F8 83DF rcall _delay_1us
00FA .dbline 66
00FA 82B3 in R24,0x12
00FC 8F7B andi R24,191
00FE 82BB out 0x12,R24
0100 .dbline 66
0100 7FDF rcall _delay_1us
0102 .dbline 67
0102 969A sbi 0x12,6
0104 .dbline 67
0104 7DDF rcall _delay_1us
0106 .dbline 68
0106 660F lsl R22
0108 .dbline 68
0108 7BDF rcall _delay_1us
010A .dbline 70
010A L32:
010A .dbline 62
010A 4395 inc R20
010C L34:
010C .dbline 62
010C 4830 cpi R20,8
010E 58F3 brlo L31
0110 .dbline 71
0110 ; {
0110 ; PORTD&=0x7f; delay_1us();
0110 ; PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
0110 ; PORTD&=0xbf;delay_1us();
0110 ; PORTD|=0x40;delay_1us();
0110 ; dat=(dat<<1);delay_1us();
0110 ;
0110 ; }
0110 ; data_0(1);
0110 01E0 ldi R16,1
0112 10E0 ldi R17,0
0114 96DF rcall _data_0
0116 .dbline 72
0116 ; PORTD|=0x10;delay_1us();
0116 949A sbi 0x12,4
0118 .dbline 72
0118 73DF rcall _delay_1us
011A .dbline 73
011A ; PORTD|=0xc0;delay_1us();
011A 82B3 in R24,0x12
011C 806C ori R24,192
011E 82BB out 0x12,R24
0120 .dbline 73
0120 6FDF rcall _delay_1us
0122 .dbline 75
0122 ; //delay(100);
0122 ; }break;
0122 .dbline 75
0122 5EC0 rjmp L28
0124 L35:
0124 .dbline 77
0124 ; case 13://写最低位数据
0124 ; {
0124 .dbline 80
0124 ;
0124 ;
0124 ; PORTD&=0xef;delay_1us();
0124 82B3 in R24,0x12
0126 8F7E andi R24,239
0128 82BB out 0x12,R24
012A .dbline 80
012A 6ADF rcall _delay_1us
012C .dbline 81
012C ; data_1(1);
012C 01E0 ldi R16,1
012E 10E0 ldi R17,0
0130 9EDF rcall _data_1
0132 .dbline 82
0132 ; data_0(1);
0132 01E0 ldi R16,1
0134 10E0 ldi R17,0
0136 85DF rcall _data_0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -