📄 lesson6.lst
字号:
__text_start:
__start:
003E E5CF LDI R28,0x5F
003F E0D4 LDI R29,4
0040 BFCD OUT P3D,R28
0041 BFDE OUT P3E,R29
0042 51C0 SUBI R28,0x10
0043 40D0 SBCI R29,0
0044 EA0A LDI R16,0xAA
0045 8308 STD R16,0+Y
0046 2400 CLR R0
0047 E6E0 LDI R30,0x60
0048 E0F0 LDI R31,0
0049 E010 LDI R17,0
004A 36E0 CPI R30,0x60
004B 07F1 CPC R31,R17
004C F011 BEQ 0x004F
004D 9201 ST R0,Z+
004E CFFB RJMP 0x004A
004F 8300 STD R16,0+Z
0050 E7EC LDI R30,0x7C
0051 E0F0 LDI R31,0
0052 E6A0 LDI R26,0x60
0053 E0B0 LDI R27,0
0054 E010 LDI R17,0
0055 37EC CPI R30,0x7C
0056 07F1 CPC R31,R17
0057 F021 BEQ 0x005C
0058 95C8 LPM
0059 9631 ADIW R30,1
005A 920D ST R0,X+
005B CFF9 RJMP 0x0055
005C 940E0091 CALL _main
_exit:
005E CFFF RJMP _exit
_delay:
i --> R20
j --> R22
ms --> R16
005F 940E00F9 CALL push_gset2
FILE: C:\icc\examples.avr\自己编写的程序\LCD显示\lesson6.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #pragma data:code
(0006) /*code存储器类型说明*/
(0007) const uchar table[]="I LOVE YOU !";//const类型说明,表示在程序执行过程中不可更改的常量值
(0008) const uchar table1[]="Li huang sheng";
(0009)
(0010) void delay(uint ms)
(0011) {
(0012) uint i,j;
(0013) for(i=0;i<ms;i++)
0061 2744 CLR R20
0062 2755 CLR R21
0063 C00B RJMP 0x006F
(0014) {
(0015) for(j=0;j<1141;j++);
0064 2766 CLR R22
0065 2777 CLR R23
0066 C002 RJMP 0x0069
0067 5F6F SUBI R22,0xFF
0068 4F7F SBCI R23,0xFF
0069 3765 CPI R22,0x75
006A E0E4 LDI R30,4
006B 077E CPC R23,R30
006C F3D0 BCS 0x0067
006D 5F4F SUBI R20,0xFF
006E 4F5F SBCI R21,0xFF
006F 1740 CP R20,R16
0070 0751 CPC R21,R17
0071 F390 BCS 0x0064
(0016) }
(0017) }
0072 940E00FD CALL pop_gset2
0074 9508 RET
_write_com:
com --> R20
0075 940E00E2 CALL push_gset1
0077 2F40 MOV R20,R16
(0018) void write_com(uchar com)
(0019) {
(0020) PORTD&=~BIT(4);
0078 9894 CBI P12,4
(0021) PORTD&=~BIT(5);
0079 9895 CBI P12,5
(0022) PORTB=com;
007A BB48 OUT P18,R20
(0023) PORTD|=BIT(6);
007B 9A96 SBI P12,6
(0024) delay(1);
007C E001 LDI R16,1
007D E010 LDI R17,0
007E DFE0 RCALL _delay
(0025) PORTD&=~BIT(6);
007F 9896 CBI P12,6
(0026) }
0080 940E00E5 CALL pop_gset1
0082 9508 RET
_write_dat:
dat --> R20
0083 940E00E2 CALL push_gset1
0085 2F40 MOV R20,R16
(0027)
(0028) void write_dat(uchar dat)
(0029) {
(0030) PORTD|=BIT(4);
0086 9A94 SBI P12,4
(0031) PORTD&=~BIT(5);
0087 9895 CBI P12,5
(0032) PORTB=dat;
0088 BB48 OUT P18,R20
(0033) PORTD|=BIT(6);
0089 9A96 SBI P12,6
(0034) delay(1);
008A E001 LDI R16,1
008B E010 LDI R17,0
008C DFD2 RCALL _delay
(0035) PORTD&=~BIT(6);
008D 9896 CBI P12,6
(0036)
(0037) }
008E 940E00E5 CALL pop_gset1
0090 9508 RET
(0038) void main()
(0039) {
_main:
i --> R20
0091 C04E RJMP 0x00E0
(0040) while(1)
(0041) {
(0042) uchar i;
(0043) DDRB=0XFF;
0092 EF8F LDI R24,0xFF
0093 BB87 OUT P17,R24
(0044) DDRD|=BIT(4)|BIT(5)|BIT(6);
0094 B381 IN R24,P11
0095 6780 ORI R24,0x70
0096 BB81 OUT P11,R24
(0045) PORTD&=~BIT(6);
0097 9896 CBI P12,6
(0046)
(0047) write_com(0X38);//设置显示模式
0098 E308 LDI R16,0x38
0099 DFDB RCALL _write_com
(0048) delay(5);
009A E005 LDI R16,5
009B E010 LDI R17,0
009C DFC2 RCALL _delay
(0049) write_com(0X01);//清屏
009D E001 LDI R16,1
009E DFD6 RCALL _write_com
(0050) delay(5);
009F E005 LDI R16,5
00A0 E010 LDI R17,0
00A1 DFBD RCALL _delay
(0051) write_com(0X0C);//设置显示开关和光标
00A2 E00C LDI R16,0xC
00A3 DFD1 RCALL _write_com
(0052) delay(5);
00A4 E005 LDI R16,5
00A5 E010 LDI R17,0
00A6 DFB8 RCALL _delay
(0053) write_com(0X06);//设置字符显示移动模式
00A7 E006 LDI R16,6
00A8 DFCC RCALL _write_com
(0054) delay(5);
00A9 E005 LDI R16,5
00AA E010 LDI R17,0
00AB DFB3 RCALL _delay
(0055) write_com(0X80+0X10);//设置第1行数据地址指针
00AC E900 LDI R16,0x90
00AD DFC7 RCALL _write_com
(0056) delay(5);
00AE E005 LDI R16,5
00AF E010 LDI R17,0
00B0 DFAE RCALL _delay
(0057) for(i=0;i<12;i++)//显示第1行的字符
00B1 2744 CLR R20
00B2 C00C RJMP 0x00BF
(0058) {
(0059) write_dat(table[i]);
00B3 E680 LDI R24,0x60
00B4 E090 LDI R25,0
00B5 2FE4 MOV R30,R20
00B6 27FF CLR R31
00B7 0FE8 ADD R30,R24
00B8 1FF9 ADC R31,R25
00B9 9104 LD R16,R16
00BA DFC8 RCALL _write_dat
(0060) delay(5);
00BB E005 LDI R16,5
00BC E010 LDI R17,0
00BD DFA1 RCALL _delay
00BE 9543 INC R20
00BF 304C CPI R20,0xC
00C0 F390 BCS 0x00B3
(0061) }
(0062) write_com(0X80+0X50);//设置第2行的数据地址指针
00C1 ED00 LDI R16,0xD0
00C2 DFB2 RCALL _write_com
(0063) delay(5);
00C3 E005 LDI R16,5
00C4 E010 LDI R17,0
00C5 DF99 RCALL _delay
(0064) for(i=0;i<14;i++)//显示第2行的字符
00C6 2744 CLR R20
00C7 C00C RJMP 0x00D4
(0065) {
(0066) write_dat(table1[i]);
00C8 E68D LDI R24,0x6D
00C9 E090 LDI R25,0
00CA 2FE4 MOV R30,R20
00CB 27FF CLR R31
00CC 0FE8 ADD R30,R24
00CD 1FF9 ADC R31,R25
00CE 9104 LD R16,R16
00CF DFB3 RCALL _write_dat
(0067) delay(5);
00D0 E005 LDI R16,5
00D1 E010 LDI R17,0
00D2 DF8C RCALL _delay
00D3 9543 INC R20
00D4 304E CPI R20,0xE
00D5 F390 BCS 0x00C8
(0068) }
(0069) for(i=0;i<16;i++)//设置字符从右到左显示
00D6 2744 CLR R20
00D7 C006 RJMP 0x00DE
(0070) {
(0071) write_com(0X18);//从右到左显示指令
00D8 E108 LDI R16,0x18
00D9 DF9B RCALL _write_com
(0072) delay(500);
00DA EF04 LDI R16,0xF4
00DB E011 LDI R17,1
00DC DF82 RCALL _delay
00DD 9543 INC R20
00DE 3140 CPI R20,0x10
00DF F3C0 BCS 0x00D8
00E0 CFB1 RJMP 0x0092
(0073) }
(0074)
(0075) }
(0076) }FILE: <library>
00E1 9508 RET
push_gset1:
00E2 935A ST R21,-Y
00E3 934A ST R20,-Y
00E4 9508 RET
pop_gset1:
00E5 E0E1 LDI R30,1
pop:
00E6 9149 LD R20,Y+
00E7 9159 LD R21,Y+
00E8 FDE0 SBRC R30,0
00E9 9508 RET
00EA 9169 LD R22,Y+
00EB 9179 LD R23,Y+
00EC FDE1 SBRC R30,1
00ED 9508 RET
00EE 90A9 LD R10,Y+
00EF 90B9 LD R11,Y+
00F0 FDE2 SBRC R30,2
00F1 9508 RET
00F2 90C9 LD R12,Y+
00F3 90D9 LD R13,Y+
00F4 FDE3 SBRC R30,3
00F5 9508 RET
00F6 90E9 LD R14,Y+
00F7 90F9 LD R15,Y+
00F8 9508 RET
push_gset2:
00F9 937A ST R23,-Y
00FA 936A ST R22,-Y
00FB 940C00E2 JMP push_gset1
pop_gset2:
00FD E0E2 LDI R30,2
00FE 940C00E6 JMP pop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -