📄 lcm.lst
字号:
__start:
__text_start:
001F E5CF LDI R28,0x5F
0020 E0D4 LDI R29,4
0021 BFCD OUT 0x3D,R28
0022 BFDE OUT 0x3E,R29
0023 51C0 SUBI R28,0x10
0024 40D0 SBCI R29,0
0025 EA0A LDI R16,0xAA
0026 8308 STD Y+0,R16
0027 2400 CLR R0
0028 E6E0 LDI R30,0x60
0029 E0F0 LDI R31,0
002A E010 LDI R17,0
002B 36E0 CPI R30,0x60
002C 07F1 CPC R31,R17
002D F011 BEQ 0x0030
002E 9201 ST R0,Z+
002F CFFB RJMP 0x002B
0030 8300 STD Z+0,R16
0031 E3EE LDI R30,0x3E
0032 E0F0 LDI R31,0
0033 E6A0 LDI R26,0x60
0034 E0B0 LDI R27,0
0035 E010 LDI R17,0
0036 33EE CPI R30,0x3E
0037 07F1 CPC R31,R17
0038 F021 BEQ 0x003D
0039 95C8 LPM
003A 9631 ADIW R30,1
003B 920D ST R0,X+
003C CFF9 RJMP 0x0036
003D D0F3 RCALL _main
_exit:
003E CFFF RJMP _exit
FILE: G:\AVR系列\LCM0825\lcm.c
(0001) //lcm.c
(0002) //液晶显示程序
(0003) #include<iom8v.h>
(0004) void delay_1us(void)//1us延时程序
(0005) {
(0006) unsigned int k;
(0007) for(k=1;k<10;k++)
_delay_1us:
k --> R16
003F E001 LDI R16,1
0040 E010 LDI R17,0
0041 C002 RJMP 0x0044
0042 5F0F SUBI R16,0xFF
0043 4F1F SBCI R17,0xFF
0044 300A CPI R16,0xA
0045 E0E0 LDI R30,0
0046 071E CPC R17,R30
0047 F3D0 BCS 0x0042
0048 9508 RET
(0008) ;
(0009) }
(0010)
(0011) void delay_1ms(void)//1ms延时程序
(0012) {
(0013) unsigned int k;
(0014) for(k=1;k<856;k++)
_delay_1ms:
k --> R16
0049 E001 LDI R16,1
004A E010 LDI R17,0
004B C002 RJMP 0x004E
004C 5F0F SUBI R16,0xFF
004D 4F1F SBCI R17,0xFF
004E 3508 CPI R16,0x58
004F E0E3 LDI R30,3
0050 071E CPC R17,R30
0051 F3D0 BCS 0x004C
0052 9508 RET
_delay:
l --> R20
m --> R22
0053 D148 RCALL push_gset2
0054 01B8 MOVW R22,R16
(0015) ;
(0016) }
(0017) void delay(unsigned int m)//延时m ms程序
(0018) {
(0019) unsigned int l;
(0020)
(0021) for(l=0;l<m;l++)
0055 2744 CLR R20
0056 2755 CLR R21
0057 C003 RJMP 0x005B
(0022) delay_1ms();
0058 DFF0 RCALL _delay_1ms
0059 5F4F SUBI R20,0xFF
005A 4F5F SBCI R21,0xFF
005B 1746 CP R20,R22
005C 0757 CPC R21,R23
005D F3D0 BCS 0x0058
005E D133 RCALL pop_gset2
005F 9508 RET
_data_0:
i --> R20
n --> R22
0060 D13B RCALL push_gset2
0061 01B8 MOVW R22,R16
(0023) }
(0024)
(0025) void data_0(unsigned int n)//传输N个0
(0026) { int i;
(0027) for(i=0;i<n;i++)
0062 2744 CLR R20
0063 2755 CLR R21
0064 C00C RJMP 0x0071
(0028) {
(0029)
(0030) PORTD&=0x7F; delay_1us();//data=0
0065 B382 IN R24,0x12
0066 778F ANDI R24,0x7F
0067 BB82 OUT 0x12,R24
0068 DFD6 RCALL _delay_1us
(0031) PORTD&=0xBF;delay_1us();//wr=0
0069 B382 IN R24,0x12
006A 7B8F ANDI R24,0xBF
006B BB82 OUT 0x12,R24
006C DFD2 RCALL _delay_1us
(0032) PORTD|=0x40; delay_1us();//wr=1
006D 9A96 SBI 0x12,6
006E DFD0 RCALL _delay_1us
006F 5F4F SUBI R20,0xFF
0070 4F5F SBCI R21,0xFF
0071 1746 CP R20,R22
0072 0757 CPC R21,R23
0073 F388 BCS 0x0065
0074 D11D RCALL pop_gset2
0075 9508 RET
_data_1:
i --> R20
n --> R22
0076 D125 RCALL push_gset2
0077 01B8 MOVW R22,R16
(0033) }
(0034) }
(0035)
(0036) void data_1(unsigned int n)//传输N个1
(0037) { int i;
(0038) for(i=0;i<n;i++)
0078 2744 CLR R20
0079 2755 CLR R21
007A C00D RJMP 0x0088
(0039) {
(0040) PORTD&=0x7f;
007B B382 IN R24,0x12
007C 778F ANDI R24,0x7F
007D BB82 OUT 0x12,R24
(0041) PORTD|=0x80;delay_1us();//data=1
007E 9A97 SBI 0x12,7
007F DFBF RCALL _delay_1us
(0042) PORTD&=0xBF;delay_1us();//wr=0
0080 B382 IN R24,0x12
0081 7B8F ANDI R24,0xBF
0082 BB82 OUT 0x12,R24
0083 DFBB RCALL _delay_1us
(0043) PORTD|=0x40;delay_1us();//wr=1
0084 9A96 SBI 0x12,6
0085 DFB9 RCALL _delay_1us
0086 5F4F SUBI R20,0xFF
0087 4F5F SBCI R21,0xFF
0088 1746 CP R20,R22
0089 0757 CPC R21,R23
008A F380 BCS 0x007B
008B D106 RCALL pop_gset2
008C 9508 RET
_write_lcd:
j --> R20
dat --> R22
data --> R10
n --> R20
008D D10C RCALL push_gset3
008E 2EA2 MOV R10,R18
008F 2F40 MOV R20,R16
(0044) }
(0045) }
(0046)
(0047)
(0048) void write_lcd(char n,unsigned char data )
(0049) {
(0050) char j;
(0051) unsigned char dat=data;
0090 2D6A MOV R22,R10
(0052) DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
0091 EF80 LDI R24,0xF0
0092 BB81 OUT 0x11,R24
0093 DFAB RCALL _delay_1us
(0053) PORTD=0xff; delay_1us();
0094 EF8F LDI R24,0xFF
0095 BB82 OUT 0x12,R24
0096 DFA8 RCALL _delay_1us
(0054) switch(n)
0097 2755 CLR R21
0098 304A CPI R20,0xA
0099 E0E0 LDI R30,0
009A 075E CPC R21,R30
009B F409 BNE 0x009D
009C C062 RJMP 0x00FF
009D 304C CPI R20,0xC
009E E0E0 LDI R30,0
009F 075E CPC R21,R30
00A0 F029 BEQ 0x00A6
00A1 304D CPI R20,0xD
00A2 E0E0 LDI R30,0
00A3 075E CPC R21,R30
00A4 F161 BEQ 0x00D1
00A5 C089 RJMP 0x012F
(0055) {
(0056) case 12://写命令
(0057) {
(0058)
(0059) PORTD&=0xef;delay_1us();
00A6 B382 IN R24,0x12
00A7 7E8F ANDI R24,0xEF
00A8 BB82 OUT 0x12,R24
00A9 DF95 RCALL _delay_1us
(0060) data_1(1);
00AA E001 LDI R16,1
00AB E010 LDI R17,0
00AC DFC9 RCALL _data_1
(0061) data_0(2);
00AD E002 LDI R16,2
00AE E010 LDI R17,0
00AF DFB0 RCALL _data_0
(0062) for(j=0;j<8;j++)
00B0 2744 CLR R20
00B1 C013 RJMP 0x00C5
(0063) {
(0064) PORTD&=0x7f; delay_1us();
00B2 B382 IN R24,0x12
00B3 778F ANDI R24,0x7F
00B4 BB82 OUT 0x12,R24
00B5 DF89 RCALL _delay_1us
(0065) PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
00B6 2F86 MOV R24,R22
00B7 7880 ANDI R24,0x80
00B8 B222 IN R2,0x12
00B9 2A28 OR R2,R24
00BA BA22 OUT 0x12,R2
00BB DF83 RCALL _delay_1us
(0066) PORTD&=0xbf;delay_1us();
00BC B382 IN R24,0x12
00BD 7B8F ANDI R24,0xBF
00BE BB82 OUT 0x12,R24
00BF DF7F RCALL _delay_1us
(0067) PORTD|=0x40;delay_1us();
00C0 9A96 SBI 0x12,6
00C1 DF7D RCALL _delay_1us
(0068) dat=(dat<<1);delay_1us();
00C2 0F66 LSL R22
00C3 DF7B RCALL _delay_1us
00C4 9543 INC R20
00C5 3048 CPI R20,0x8
00C6 F358 BCS 0x00B2
(0069)
(0070) }
(0071) data_0(1);
00C7 E001 LDI R16,1
00C8 E010 LDI R17,0
00C9 DF96 RCALL _data_0
(0072) PORTD|=0x10;delay_1us();
00CA 9A94 SBI 0x12,4
00CB DF73 RCALL _delay_1us
(0073) PORTD|=0xc0;delay_1us();
00CC B382 IN R24,0x12
00CD 6C80 ORI R24,0xC0
00CE BB82 OUT 0x12,R24
00CF DF6F RCALL _delay_1us
(0074) //delay(100);
(0075) }break;
00D0 C05E RJMP 0x012F
(0076) case 13://写最低位数据
(0077) {
(0078)
(0079)
(0080) PORTD&=0xef;delay_1us();
00D1 B382 IN R24,0x12
00D2 7E8F ANDI R24,0xEF
00D3 BB82 OUT 0x12,R24
00D4 DF6A RCALL _delay_1us
(0081) data_1(1);
00D5 E001 LDI R16,1
00D6 E010 LDI R17,0
00D7 DF9E RCALL _data_1
(0082) data_0(1);
00D8 E001 LDI R16,1
00D9 E010 LDI R17,0
00DA DF85 RCALL _data_0
(0083) data_1(2);
00DB E002 LDI R16,2
00DC E010 LDI R17,0
00DD DF98 RCALL _data_1
(0084) data_0(1);
00DE E001 LDI R16,1
00DF E010 LDI R17,0
00E0 DF7F RCALL _data_0
(0085) for(j=0;j<8;j++)
00E1 2744 CLR R20
00E2 C013 RJMP 0x00F6
(0086) {
(0087)
(0088) PORTD&=0x7f; delay_1us();
00E3 B382 IN R24,0x12
00E4 778F ANDI R24,0x7F
00E5 BB82 OUT 0x12,R24
00E6 DF58 RCALL _delay_1us
(0089) PORTD|=(dat&0x80);delay_1us();
00E7 2F86 MOV R24,R22
00E8 7880 ANDI R24,0x80
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -