📄 lesson6.lis
字号:
.module lesson6.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _table::
0000 49204C4F564520594F55202100 .byte 'I,32,'L,'O,'V,'E,32,'Y,'O,'U,32,33,0
000D .dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
000D .dbsym e table _table A[13:13]c
000D _table1::
000D 4C69206875616E67207368656E6700 .byte 'L,'i,32,'h,'u,'a,'n,'g,32,'s,'h,'e,'n,'g,0
001C .dbsym e table1 _table1 A[15:15]c
.area text(rom, con, rel)
0000 .dbfile C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 11
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; #pragma data:code
0004 ; /*code存储器类型说明*/
0004 ; const uchar table[]="I LOVE YOU !";//const类型说明,表示在程序执行过程中不可更改的常量值
0004 ; const uchar table1[]="Li huang sheng";
0004 ;
0004 ; void delay(uint ms)
0004 ; {
0004 .dbline 13
0004 ; uint i,j;
0004 ; for(i=0;i<ms;i++)
0004 4427 clr R20
0006 5527 clr R21
0008 0BC0 xjmp L5
000A L2:
000A .dbline 14
000A ; {
000A .dbline 15
000A 6627 clr R22
000C 7727 clr R23
000E 02C0 xjmp L9
0010 L6:
0010 .dbline 15
0010 L7:
0010 .dbline 15
0010 6F5F subi R22,255 ; offset = 1
0012 7F4F sbci R23,255
0014 L9:
0014 .dbline 15
0014 6537 cpi R22,117
0016 E4E0 ldi R30,4
0018 7E07 cpc R23,R30
001A D0F3 brlo L6
001C .dbline 16
001C L3:
001C .dbline 13
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 13
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 90F3 brlo L2
0026 .dbline -2
0026 .dbline 17
0026 ; for(j=0;j<1141;j++);
0026 ; }
0026 ; }
0026 L1:
0026 0E940000 xcall pop_gset2
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r i 20 i
002C .dbsym r j 22 i
002C .dbsym r ms 16 i
002C .dbend
002C .dbfunc e write_com _write_com fV
002C ; com -> R20
.even
002C _write_com::
002C 0E940000 xcall push_gset1
0030 402F mov R20,R16
0032 .dbline -1
0032 .dbline 19
0032 ; void write_com(uchar com)
0032 ; {
0032 .dbline 20
0032 ; PORTD&=~BIT(4);
0032 9498 cbi 0x12,4
0034 .dbline 21
0034 ; PORTD&=~BIT(5);
0034 9598 cbi 0x12,5
0036 .dbline 22
0036 ; PORTB=com;
0036 48BB out 0x18,R20
0038 .dbline 23
0038 ; PORTD|=BIT(6);
0038 969A sbi 0x12,6
003A .dbline 24
003A ; delay(1);
003A 01E0 ldi R16,1
003C 10E0 ldi R17,0
003E E0DF xcall _delay
0040 .dbline 25
0040 ; PORTD&=~BIT(6);
0040 9698 cbi 0x12,6
0042 .dbline -2
0042 .dbline 26
0042 ; }
0042 L10:
0042 0E940000 xcall pop_gset1
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r com 20 c
0048 .dbend
0048 .dbfunc e write_dat _write_dat fV
0048 ; dat -> R20
.even
0048 _write_dat::
0048 0E940000 xcall push_gset1
004C 402F mov R20,R16
004E .dbline -1
004E .dbline 29
004E ;
004E ; void write_dat(uchar dat)
004E ; {
004E .dbline 30
004E ; PORTD|=BIT(4);
004E 949A sbi 0x12,4
0050 .dbline 31
0050 ; PORTD&=~BIT(5);
0050 9598 cbi 0x12,5
0052 .dbline 32
0052 ; PORTB=dat;
0052 48BB out 0x18,R20
0054 .dbline 33
0054 ; PORTD|=BIT(6);
0054 969A sbi 0x12,6
0056 .dbline 34
0056 ; delay(1);
0056 01E0 ldi R16,1
0058 10E0 ldi R17,0
005A D2DF xcall _delay
005C .dbline 35
005C ; PORTD&=~BIT(6);
005C 9698 cbi 0x12,6
005E .dbline -2
005E .dbline 37
005E ;
005E ; }
005E L11:
005E 0E940000 xcall pop_gset1
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r dat 20 c
0064 .dbend
0064 .dbfunc e main _main fV
0064 ; i -> R20
.even
0064 _main::
0064 .dbline -1
0064 .dbline 39
0064 ; void main()
0064 ; {
0064 4EC0 xjmp L14
0066 L13:
0066 .dbline 41
0066 ; while(1)
0066 ; {
0066 .dbline 43
0066 ; uchar i;
0066 ; DDRB=0XFF;
0066 8FEF ldi R24,255
0068 87BB out 0x17,R24
006A .dbline 44
006A ; DDRD|=BIT(4)|BIT(5)|BIT(6);
006A 81B3 in R24,0x11
006C 8067 ori R24,112
006E 81BB out 0x11,R24
0070 .dbline 45
0070 ; PORTD&=~BIT(6);
0070 9698 cbi 0x12,6
0072 .dbline 47
0072 ;
0072 ; write_com(0X38);//设置显示模式
0072 08E3 ldi R16,56
0074 DBDF xcall _write_com
0076 .dbline 48
0076 ; delay(5);
0076 05E0 ldi R16,5
0078 10E0 ldi R17,0
007A C2DF xcall _delay
007C .dbline 49
007C ; write_com(0X01);//清屏
007C 01E0 ldi R16,1
007E D6DF xcall _write_com
0080 .dbline 50
0080 ; delay(5);
0080 05E0 ldi R16,5
0082 10E0 ldi R17,0
0084 BDDF xcall _delay
0086 .dbline 51
0086 ; write_com(0X0C);//设置显示开关和光标
0086 0CE0 ldi R16,12
0088 D1DF xcall _write_com
008A .dbline 52
008A ; delay(5);
008A 05E0 ldi R16,5
008C 10E0 ldi R17,0
008E B8DF xcall _delay
0090 .dbline 53
0090 ; write_com(0X06);//设置字符显示移动模式
0090 06E0 ldi R16,6
0092 CCDF xcall _write_com
0094 .dbline 54
0094 ; delay(5);
0094 05E0 ldi R16,5
0096 10E0 ldi R17,0
0098 B3DF xcall _delay
009A .dbline 55
009A ; write_com(0X80+0X10);//设置第1行数据地址指针
009A 00E9 ldi R16,144
009C C7DF xcall _write_com
009E .dbline 56
009E ; delay(5);
009E 05E0 ldi R16,5
00A0 10E0 ldi R17,0
00A2 AEDF xcall _delay
00A4 .dbline 57
00A4 ; for(i=0;i<12;i++)//显示第1行的字符
00A4 4427 clr R20
00A6 0CC0 xjmp L19
00A8 L16:
00A8 .dbline 58
00A8 .dbline 59
00A8 80E0 ldi R24,<_table
00AA 90E0 ldi R25,>_table
00AC E42F mov R30,R20
00AE FF27 clr R31
00B0 E80F add R30,R24
00B2 F91F adc R31,R25
00B4 0491 lpm R16,Z
00B6 C8DF xcall _write_dat
00B8 .dbline 60
00B8 05E0 ldi R16,5
00BA 10E0 ldi R17,0
00BC A1DF xcall _delay
00BE .dbline 61
00BE L17:
00BE .dbline 57
00BE 4395 inc R20
00C0 L19:
00C0 .dbline 57
00C0 4C30 cpi R20,12
00C2 90F3 brlo L16
00C4 .dbline 62
00C4 ; {
00C4 ; write_dat(table[i]);
00C4 ; delay(5);
00C4 ; }
00C4 ; write_com(0X80+0X50);//设置第2行的数据地址指针
00C4 00ED ldi R16,208
00C6 B2DF xcall _write_com
00C8 .dbline 63
00C8 ; delay(5);
00C8 05E0 ldi R16,5
00CA 10E0 ldi R17,0
00CC 99DF xcall _delay
00CE .dbline 64
00CE ; for(i=0;i<14;i++)//显示第2行的字符
00CE 4427 clr R20
00D0 0CC0 xjmp L23
00D2 L20:
00D2 .dbline 65
00D2 .dbline 66
00D2 80E0 ldi R24,<_table1
00D4 90E0 ldi R25,>_table1
00D6 E42F mov R30,R20
00D8 FF27 clr R31
00DA E80F add R30,R24
00DC F91F adc R31,R25
00DE 0491 lpm R16,Z
00E0 B3DF xcall _write_dat
00E2 .dbline 67
00E2 05E0 ldi R16,5
00E4 10E0 ldi R17,0
00E6 8CDF xcall _delay
00E8 .dbline 68
00E8 L21:
00E8 .dbline 64
00E8 4395 inc R20
00EA L23:
00EA .dbline 64
00EA 4E30 cpi R20,14
00EC 90F3 brlo L20
00EE .dbline 69
00EE ; {
00EE ; write_dat(table1[i]);
00EE ; delay(5);
00EE ; }
00EE ; for(i=0;i<16;i++)//设置字符从右到左显示
00EE 4427 clr R20
00F0 06C0 xjmp L27
00F2 L24:
00F2 .dbline 70
00F2 .dbline 71
00F2 08E1 ldi R16,24
00F4 9BDF xcall _write_com
00F6 .dbline 72
00F6 04EF ldi R16,500
00F8 11E0 ldi R17,1
00FA 82DF xcall _delay
00FC .dbline 73
00FC L25:
00FC .dbline 69
00FC 4395 inc R20
00FE L27:
00FE .dbline 69
00FE 4031 cpi R20,16
0100 C0F3 brlo L24
0102 .dbline 75
0102 L14:
0102 .dbline 40
0102 B1CF xjmp L13
0104 X0:
0104 .dbline -2
0104 .dbline 76
0104 ; {
0104 ; write_com(0X18);//从右到左显示指令
0104 ; delay(500);
0104 ; }
0104 ;
0104 ; }
0104 ; }
0104 L12:
0104 .dbline 0 ; func end
0104 0895 ret
0106 .dbsym r i 20 c
0106 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -