📄 lcd.lst
字号:
__text_start:
__start:
0027 E5CF LDI R28,0x5F
0028 E0D2 LDI R29,2
0029 BFCD OUT 0x3D,R28
002A BFDE OUT 0x3E,R29
002B 51C0 SUBI R28,0x10
002C 40D0 SBCI R29,0
002D EA0A LDI R16,0xAA
002E 8308 STD Y+0,R16
002F 2400 CLR R0
0030 E7EB LDI R30,0x7B
0031 E0F0 LDI R31,0
0032 E010 LDI R17,0
0033 37EB CPI R30,0x7B
0034 07F1 CPC R31,R17
0035 F011 BEQ 0x0038
0036 9201 ST R0,Z+
0037 CFFB RJMP 0x0033
0038 8300 STD Z+0,R16
0039 E3E2 LDI R30,0x32
003A E0F0 LDI R31,0
003B E6A0 LDI R26,0x60
003C E0B0 LDI R27,0
003D E010 LDI R17,0
003E 34ED CPI R30,0x4D
003F 07F1 CPC R31,R17
0040 F021 BEQ 0x0045
0041 95C8 LPM
0042 9631 ADIW R30,1
0043 920D ST R0,X+
0044 CFF9 RJMP 0x003E
0045 D018 RCALL _main
_exit:
0046 CFFF RJMP _exit
FILE: C:\ATMega8515\LCD\init.c
(0001) //ICC-AVR application builder : 2006-4-27 13:29:25
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004)
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007)
(0008) void port_init(void)
(0009) {
(0010) PORTA = 0x00;
_port_init:
0047 2422 CLR R2
0048 BA2B OUT 0x1B,R2
(0011) DDRA = 0xFF;
0049 EF8F LDI R24,0xFF
004A BB8A OUT 0x1A,R24
(0012) PORTB = 0x00;
004B BA28 OUT 0x18,R2
(0013) DDRB = 0x00;
004C BA27 OUT 0x17,R2
(0014) PORTC = 0x00;
004D BA25 OUT 0x15,R2
(0015) DDRC = 0x1C;
004E E18C LDI R24,0x1C
004F BB84 OUT 0x14,R24
(0016) PORTD = 0x00;
0050 BA22 OUT 0x12,R2
(0017) DDRD = 0x00;
0051 BA21 OUT 0x11,R2
(0018) PORTE = 0x00;
0052 B827 OUT 0x07,R2
(0019) DDRE = 0x00;
0053 B826 OUT 0x06,R2
0054 9508 RET
(0020) }
(0021)
(0022) //call this routine to initialize all peripherals
(0023) void init_devices(void)
(0024) {
(0025) //stop errant interrupts until set up
(0026) CLI(); //disable all interrupts
_init_devices:
0055 94F8 BCLR 7
(0027) port_init();
0056 DFF0 RCALL _port_init
(0028)
(0029) MCUCR = 0x00;
0057 2422 CLR R2
0058 BE25 OUT 0x35,R2
(0030) EMCUCR = 0x00;
0059 BE26 OUT 0x36,R2
(0031) GICR = 0x00;
005A BE2B OUT 0x3B,R2
(0032) TIMSK = 0x00;
005B BE29 OUT 0x39,R2
(0033) SEI(); //re-enable interrupts
005C 9478 BSET 7
005D 9508 RET
FILE: C:\ATMega8515\LCD\main.c
(0001) #include <iom8515v.h>
(0002) #include"ForATmega8515.h"
(0003)
(0004) void delay(uint ticks);
(0005) ///////////////////////
(0006) void writedata(uchar lcddata);//写数据到LCD
(0007) void writecom(uchar lcddata);//写命令到LCD
(0008) void writeline(uchar *str); //写一串数据到LCD
(0009) void initlcd(); //初始话LCD
(0010) ////////////////////////////
(0011) void main()
(0012) {
(0013) uint softdelay=1000;
_main:
softdelay --> R20
005E EE48 LDI R20,0xE8
005F E053 LDI R21,3
(0014) init_devices();
0060 DFF4 RCALL _init_devices
(0015) initlcd();
0061 D05C RCALL _initlcd
0062 C028 RJMP 0x008B
(0016)
(0017) while(1)
(0018) {
(0019) writeline("Hello World!");//在LCD上面显示Hello World!
0063 E60E LDI R16,0x6E
0064 E010 LDI R17,0
0065 D04B RCALL _writeline
0066 C003 RJMP 0x006A
(0020) while(softdelay--)delay(30);softdelay=1000;//延时
0067 E10E LDI R16,0x1E
0068 E010 LDI R17,0
0069 D023 RCALL _delay
006A 011A MOVW R2,R20
006B 5041 SUBI R20,1
006C 4050 SBCI R21,0
006D 2022 TST R2
006E F7C1 BNE 0x0067
006F 2033 TST R3
0070 F7B1 BNE 0x0067
0071 EE48 LDI R20,0xE8
0072 E053 LDI R21,3
(0021) writecom(0x01);//清屏
0073 E001 LDI R16,1
0074 D031 RCALL _writecom
(0022) writecom(0x80);//回车
0075 E800 LDI R16,0x80
0076 D02F RCALL _writecom
(0023) writeline("ForATMega8515");//在LCD上面显示ForATMega8515
0077 E600 LDI R16,0x60
0078 E010 LDI R17,0
0079 D037 RCALL _writeline
007A C003 RJMP 0x007E
(0024) while(softdelay--)delay(30);softdelay=1000;//延时
007B E10E LDI R16,0x1E
007C E010 LDI R17,0
007D D00F RCALL _delay
007E 011A MOVW R2,R20
007F 5041 SUBI R20,1
0080 4050 SBCI R21,0
0081 2022 TST R2
0082 F7C1 BNE 0x007B
0083 2033 TST R3
0084 F7B1 BNE 0x007B
0085 EE48 LDI R20,0xE8
0086 E053 LDI R21,3
(0025) writecom(0x01);//清屏
0087 E001 LDI R16,1
0088 D01D RCALL _writecom
(0026) writecom(0x80);//回车
0089 E800 LDI R16,0x80
008A D01B RCALL _writecom
008B CFD7 RJMP 0x0063
008C 9508 RET
_delay:
i --> R20
ticks --> R16
008D D045 RCALL push_gset1
(0027)
(0028) }
(0029) }
(0030)
(0031)
(0032) void delay(uint ticks)
(0033) {
(0034) uchar i;
(0035) for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
008E C007 RJMP 0x0096
008F EC48 LDI R20,0xC8
0090 C001 RJMP 0x0092
0091 954A DEC R20
0092 2344 TST R20
0093 F7E9 BNE 0x0091
0094 5001 SUBI R16,1
0095 4010 SBCI R17,0
0096 3000 CPI R16,0
0097 0701 CPC R16,R17
0098 F7B1 BNE 0x008F
0099 D03C RCALL pop_gset1
009A 9508 RET
_writedata:
lcddata --> R20
009B D037 RCALL push_gset1
009C 2F40 MOV R20,R16
(0036) }
(0037)
(0038)
(0039)
(0040) ///////////////////////////////
(0041) void writedata(uchar lcddata)
(0042) {
(0043) // E=1;
(0044) PORTC|=E;
009D 9AAC SBI 0x15,4
(0045) // RS=1;
(0046) PORTC|=RS;
009E 9AAA SBI 0x15,2
(0047) // RW=0;
(0048) PORTA=lcddata;
009F BB4B OUT 0x1B,R20
(0049) // E=0;
(0050) PORTC&=~E;
00A0 98AC CBI 0x15,4
(0051) delay(100);
00A1 E604 LDI R16,0x64
00A2 E010 LDI R17,0
00A3 DFE9 RCALL _delay
00A4 D031 RCALL pop_gset1
00A5 9508 RET
_writecom:
lcddata --> R20
00A6 D02C RCALL push_gset1
00A7 2F40 MOV R20,R16
(0052) }
(0053) /////////////////////////////////
(0054) void writecom(uchar lcddata)
(0055) {
(0056) // E=1;
(0057) PORTC|=E;
00A8 9AAC SBI 0x15,4
(0058) // RS=0;
(0059) PORTC&=~RS;
00A9 98AA CBI 0x15,2
(0060) // RW=0;
(0061) PORTA=lcddata;
00AA BB4B OUT 0x1B,R20
(0062) // E=0;
(0063) PORTC&=~E;
00AB 98AC CBI 0x15,4
(0064) delay(100);
00AC E604 LDI R16,0x64
00AD E010 LDI R17,0
00AE DFDE RCALL _delay
00AF D026 RCALL pop_gset1
00B0 9508 RET
_writeline:
str --> R20
00B1 D021 RCALL push_gset1
00B2 01A8 MOVW R20,R16
(0065) }
(0066)
(0067) void writeline(uchar *str)
(0068) {
00B3 C004 RJMP 0x00B8
(0069) while(*str)writedata(*str++);
00B4 01FA MOVW R30,R20
00B5 9101 LD R16,Z+
00B6 01AF MOVW R20,R30
00B7 DFE3 RCALL _writedata
00B8 01FA MOVW R30,R20
00B9 8020 LDD R2,Z+0
00BA 2022 TST R2
00BB F7C1 BNE 0x00B4
00BC D019 RCALL pop_gset1
00BD 9508 RET
(0070) }
(0071)
(0072) ///////////////////////////////////
(0073) void initlcd()
(0074) {
(0075)
(0076) writecom(0x01); //清屏
_initlcd:
00BE E001 LDI R16,1
00BF DFE6 RCALL _writecom
(0077) writecom(0x38); //功能设置
00C0 E308 LDI R16,0x38
00C1 DFE4 RCALL _writecom
(0078) writecom(0x0f); //显示开关控制
00C2 E00F LDI R16,0xF
00C3 DFE2 RCALL _writecom
(0079) writecom(0x06); //设置输入模式
00C4 E006 LDI R16,6
00C5 DFE0 RCALL _writecom
(0080) writecom(0x01); //清屏
00C6 E001 LDI R16,1
00C7 DFDE RCALL _writecom
(0081) writecom(0x80); //回车
FILE: <library>
00C8 E800 LDI R16,0x80
00C9 DFDC RCALL _writecom
00CA 9508 RET
push_gset5:
00CB 92FA ST R15,-Y
00CC 92EA ST R14,-Y
push_gset4:
00CD 92DA ST R13,-Y
00CE 92CA ST R12,-Y
push_gset3:
00CF 92BA ST R11,-Y
00D0 92AA ST R10,-Y
push_gset2:
00D1 937A ST R23,-Y
00D2 936A ST R22,-Y
push_gset1:
00D3 935A ST R21,-Y
00D4 934A ST R20,-Y
00D5 9508 RET
pop_gset1:
00D6 E0E1 LDI R30,1
pop:
00D7 9149 LD R20,Y+
00D8 9159 LD R21,Y+
00D9 FDE0 SBRC R30,0
00DA 9508 RET
00DB 9169 LD R22,Y+
00DC 9179 LD R23,Y+
00DD FDE1 SBRC R30,1
00DE 9508 RET
00DF 90A9 LD R10,Y+
00E0 90B9 LD R11,Y+
00E1 FDE2 SBRC R30,2
00E2 9508 RET
00E3 90C9 LD R12,Y+
00E4 90D9 LD R13,Y+
00E5 FDE3 SBRC R30,3
00E6 9508 RET
00E7 90E9 LD R14,Y+
00E8 90F9 LD R15,Y+
00E9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -