📄 lcm.s
字号:
.module lcm.c
.area text(rom, con, rel)
.dbfile G:\AVR系列\LCM0825\lcm.c
.dbfunc e delay_1us _delay_1us fV
; k -> R16,R17
.even
_delay_1us::
.dbline -1
.dbline 5
; //lcm.c
; //液晶显示程序
; #include<iom8v.h>
; void delay_1us(void)//1us延时程序
; {
.dbline 7
; unsigned int k;
; for(k=1;k<10;k++)
ldi R16,1
ldi R17,0
rjmp L5
L2:
.dbline 8
L3:
.dbline 7
subi R16,255 ; offset = 1
sbci R17,255
L5:
.dbline 7
cpi R16,10
ldi R30,0
cpc R17,R30
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r k 16 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; k -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 12
; ;
; }
;
; void delay_1ms(void)//1ms延时程序
; {
.dbline 14
; unsigned int k;
; for(k=1;k<856;k++)
ldi R16,1
ldi R17,0
rjmp L10
L7:
.dbline 15
L8:
.dbline 14
subi R16,255 ; offset = 1
sbci R17,255
L10:
.dbline 14
cpi R16,88
ldi R30,3
cpc R17,R30
brlo L7
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r k 16 i
.dbend
.dbfunc e delay _delay fV
; l -> R20,R21
; m -> R22,R23
.even
_delay::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 18
; ;
; }
; void delay(unsigned int m)//延时m ms程序
; {
.dbline 21
; unsigned int l;
;
; for(l=0;l<m;l++)
clr R20
clr R21
rjmp L15
L12:
.dbline 22
rcall _delay_1ms
L13:
.dbline 21
subi R20,255 ; offset = 1
sbci R21,255
L15:
.dbline 21
cp R20,R22
cpc R21,R23
brlo L12
.dbline -2
L11:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r l 20 i
.dbsym r m 22 i
.dbend
.dbfunc e data_0 _data_0 fV
; i -> R20,R21
; n -> R22,R23
.even
_data_0::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 26
; delay_1ms();
; }
;
; void data_0(unsigned int n)//传输N个0
; { int i;
.dbline 27
; for(i=0;i<n;i++)
clr R20
clr R21
rjmp L20
L17:
.dbline 28
.dbline 30
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 30
rcall _delay_1us
.dbline 31
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 31
rcall _delay_1us
.dbline 32
sbi 0x12,6
.dbline 32
rcall _delay_1us
.dbline 33
L18:
.dbline 27
subi R20,255 ; offset = 1
sbci R21,255
L20:
.dbline 27
cp R20,R22
cpc R21,R23
brlo L17
.dbline -2
L16:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r n 22 i
.dbend
.dbfunc e data_1 _data_1 fV
; i -> R20,R21
; n -> R22,R23
.even
_data_1::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 37
; {
;
; PORTD&=0x7F; delay_1us();//data=0
; PORTD&=0xBF;delay_1us();//wr=0
; PORTD|=0x40; delay_1us();//wr=1
; }
; }
;
; void data_1(unsigned int n)//传输N个1
; { int i;
.dbline 38
; for(i=0;i<n;i++)
clr R20
clr R21
rjmp L25
L22:
.dbline 39
.dbline 40
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 41
sbi 0x12,7
.dbline 41
rcall _delay_1us
.dbline 42
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 42
rcall _delay_1us
.dbline 43
sbi 0x12,6
.dbline 43
rcall _delay_1us
.dbline 44
L23:
.dbline 38
subi R20,255 ; offset = 1
sbci R21,255
L25:
.dbline 38
cp R20,R22
cpc R21,R23
brlo L22
.dbline -2
L21:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r n 22 i
.dbend
.dbfunc e write_lcd _write_lcd fV
; j -> R20
; dat -> R22
; data -> R10
; n -> R20
.even
_write_lcd::
rcall push_gset3
mov R10,R18
mov R20,R16
.dbline -1
.dbline 49
; {
; PORTD&=0x7f;
; PORTD|=0x80;delay_1us();//data=1
; PORTD&=0xBF;delay_1us();//wr=0
; PORTD|=0x40;delay_1us();//wr=1
; }
; }
;
;
; void write_lcd(char n,unsigned char data )
; {
.dbline 51
; char j;
; unsigned char dat=data;
mov R22,R10
.dbline 52
; DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
ldi R24,240
out 0x11,R24
.dbline 52
rcall _delay_1us
.dbline 53
; PORTD=0xff; delay_1us();
ldi R24,255
out 0x12,R24
.dbline 53
rcall _delay_1us
.dbline 54
; switch(n)
clr R21
cpi R20,10
ldi R30,0
cpc R21,R30
brne X1
rjmp L40
X1:
cpi R20,12
ldi R30,0
cpc R21,R30
breq L30
cpi R20,13
ldi R30,0
cpc R21,R30
breq L35
rjmp L27
X0:
.dbline 55
; {
L30:
.dbline 57
; case 12://写命令
; {
.dbline 59
;
; PORTD&=0xef;delay_1us();
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 59
rcall _delay_1us
.dbline 60
; data_1(1);
ldi R16,1
ldi R17,0
rcall _data_1
.dbline 61
; data_0(2);
ldi R16,2
ldi R17,0
rcall _data_0
.dbline 62
; for(j=0;j<8;j++)
clr R20
rjmp L34
L31:
.dbline 63
.dbline 64
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 64
rcall _delay_1us
.dbline 65
mov R24,R22
andi R24,128
in R2,0x12
or R2,R24
out 0x12,R2
.dbline 65
rcall _delay_1us
.dbline 66
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 66
rcall _delay_1us
.dbline 67
sbi 0x12,6
.dbline 67
rcall _delay_1us
.dbline 68
lsl R22
.dbline 68
rcall _delay_1us
.dbline 70
L32:
.dbline 62
inc R20
L34:
.dbline 62
cpi R20,8
brlo L31
.dbline 71
; {
; PORTD&=0x7f; delay_1us();
; PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
; PORTD&=0xbf;delay_1us();
; PORTD|=0x40;delay_1us();
; dat=(dat<<1);delay_1us();
;
; }
; data_0(1);
ldi R16,1
ldi R17,0
rcall _data_0
.dbline 72
; PORTD|=0x10;delay_1us();
sbi 0x12,4
.dbline 72
rcall _delay_1us
.dbline 73
; PORTD|=0xc0;delay_1us();
in R24,0x12
ori R24,192
out 0x12,R24
.dbline 73
rcall _delay_1us
.dbline 75
; //delay(100);
; }break;
.dbline 75
rjmp L28
L35:
.dbline 77
; case 13://写最低位数据
; {
.dbline 80
;
;
; PORTD&=0xef;delay_1us();
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 80
rcall _delay_1us
.dbline 81
; data_1(1);
ldi R16,1
ldi R17,0
rcall _data_1
.dbline 82
; data_0(1);
ldi R16,1
ldi R17,0
rcall _data_0
.dbline 83
; data_1(2);
ldi R16,2
ldi R17,0
rcall _data_1
.dbline 84
; data_0(1);
ldi R16,1
ldi R17,0
rcall _data_0
.dbline 85
; for(j=0;j<8;j++)
clr R20
rjmp L39
L36:
.dbline 86
.dbline 88
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 88
rcall _delay_1us
.dbline 89
mov R24,R22
andi R24,128
in R2,0x12
or R2,R24
out 0x12,R2
.dbline 89
rcall _delay_1us
.dbline 90
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 90
rcall _delay_1us
.dbline 91
sbi 0x12,6
.dbline 91
rcall _delay_1us
.dbline 92
lsl R22
.dbline 92
rcall _delay_1us
.dbline 93
L37:
.dbline 85
inc R20
L39:
.dbline 85
cpi R20,8
brlo L36
.dbline 94
; {
;
; PORTD&=0x7f; delay_1us();
; PORTD|=(dat&0x80);delay_1us();
; PORTD&=0xbf; delay_1us();
; PORTD|=0x40; delay_1us();
; dat=(dat<<1); delay_1us();
; }
; PORTD|=0x10;delay_1us();
sbi 0x12,4
.dbline 94
rcall _delay_1us
.dbline 96
;
; PORTD|=0xc0;delay_1us();
in R24,0x12
ori R24,192
out 0x12,R24
.dbline 96
rcall _delay_1us
.dbline 100
;
; //return(read_lcd()==)
;
; }break;
.dbline 100
rjmp L28
L40:
.dbline 102
; case 10://将高七位全部置零
; {
.dbline 104
;
; dat=(dat<<3);
lsl R22
lsl R22
lsl R22
.dbline 105
; PORTD&=0xef;delay_1us();
in R24,0x12
andi R24,239
out 0x12,R24
.dbline 105
rcall _delay_1us
.dbline 106
; data_1(1);
ldi R16,1
ldi R17,0
rcall _data_1
.dbline 107
; data_0(1);
ldi R16,1
ldi R17,0
rcall _data_0
.dbline 108
; data_1(2);
ldi R16,2
ldi R17,0
rcall _data_1
.dbline 109
; for(j=0;j<5;j++)
clr R20
rjmp L44
L41:
.dbline 110
.dbline 112
in R24,0x12
andi R24,127
out 0x12,R24
.dbline 112
rcall _delay_1us
.dbline 113
mov R24,R22
andi R24,128
in R2,0x12
or R2,R24
out 0x12,R2
.dbline 113
rcall _delay_1us
.dbline 114
in R24,0x12
andi R24,191
out 0x12,R24
.dbline 114
rcall _delay_1us
.dbline 115
sbi 0x12,6
.dbline 115
rcall _delay_1us
.dbline 116
lsl R22
.dbline 116
rcall _delay_1us
.dbline 117
L42:
.dbline 109
inc R20
L44:
.dbline 109
cpi R20,5
brlo L41
.dbline 118
; {
;
; PORTD&=0x7f; delay_1us();
; PORTD|=(dat&0x80);delay_1us();
; PORTD&=0xbf; delay_1us();
; PORTD|=0x40; delay_1us();
; dat=(dat<<1); delay_1us();
; }
; data_0(4);
ldi R16,4
ldi R17,0
rcall _data_0
.dbline 119
; PORTD|=0x10;delay_1us();
sbi 0x12,4
.dbline 119
rcall _delay_1us
.dbline 121
;
; PORTD|=0xc0;delay_1us();
in R24,0x12
ori R24,192
out 0x12,R24
.dbline 121
rcall _delay_1us
.dbline 125
;
; //return(read_lcd()==)
;
; }break;
.dbline 125
L27:
L28:
.dbline -2
L26:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r dat 22 c
.dbsym r data 10 c
.dbsym r n 20 c
.dbend
.area lit(rom, con, rel)
L46:
.byte 41,24
.byte 1,3
L47:
.byte 6,16
.byte 3,30
.byte 7,26
.byte 6,19
.byte 5,27
.byte 5,31
.byte 7,16
.byte 7,31
.byte 7,27
.byte 7,29
.area text(rom, con, rel)
.dbfile G:\AVR系列\LCM0825\lcm.c
.dbfunc e main _main fV
; init -> y+20
; add -> R22
; address -> y+0
; j -> R22,R23
; i -> R20
.even
_main::
sbiw R28,24
.dbline -1
.dbline 130
;
; }
; }
; void main(void)
; {
.dbline 131
; unsigned char init[4]={0x29,0x18,0x01,0x03}, address[20]={0x06,0x10,0x03,0x1e,0x07,0x1a,
ldi R24,<L46
ldi R25,>L46
movw R30,R28
adiw R30,20
ldi R16,4
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 131
ldi R24,<L47
ldi R25,>L47
movw R30,R28
ldi R16,20
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 138
; 0x06,0x13,0x05,0x1b,0x05,0x1f,
; 0x07,0x10,0x07,0x1f,0x07,0x1b,
; 0x07,0x1d};//初始化命令字表和0~9数字表
;
; char i,add;
; unsigned int j;
; DDRD|=0xf0;delay_1us();
in R24,0x11
ori R24,240
out 0x11,R24
.dbline 138
rcall _delay_1us
.dbline 139
; PORTD|=0xf0;delay_1us();
in R24,0x12
ori R24,240
out 0x12,R24
.dbline 139
rcall _delay_1us
.dbline 140
; for(i=0;i<10;i++)
clr R20
rjmp L51
L48:
.dbline 141
clr R22
clr R23
rjmp L55
L52:
.dbline 141
L53:
.dbline 141
subi R22,255 ; offset = 1
sbci R23,255
L55:
.dbline 141
cpi R22,112
ldi R30,23
cpc R23,R30
brlo L52
L49:
.dbline 140
inc R20
L51:
.dbline 140
cpi R20,10
brlo L48
.dbline 142
; for(j=0;j<6000;j++);
; for(i=0;i<4;i++)//初始化
clr R20
rjmp L59
L56:
.dbline 143
movw R24,R28
adiw R24,20
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
ldi R16,12
rcall _write_lcd
L57:
.dbline 142
inc R20
L59:
.dbline 142
cpi R20,4
brlo L56
.dbline 144
; write_lcd(12,init[i]);
; for(add=2;add<16;add++)//将高七位置零
ldi R22,2
rjmp L63
L60:
.dbline 145
mov R18,R22
ldi R16,10
rcall _write_lcd
L61:
.dbline 144
inc R22
L63:
.dbline 144
cpi R22,16
brlo L60
rjmp L65
L64:
.dbline 148
; write_lcd(10,add);
; //delay(300);
; while(1)
; {
.dbline 149
; for(i=0;i<20;i++) //写一个数据延时一段时间
clr R20
rjmp L70
L67:
.dbline 150
.dbline 151
mov R2,R20
clr R3
subi R20,255 ; addi 1
movw R24,R28
mov R30,R2
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
ldi R16,13
rcall _write_lcd
.dbline 152
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
ldi R16,13
rcall _write_lcd
.dbline 154
ldi R16,200
ldi R17,0
rcall _delay
.dbline 155
L68:
.dbline 149
inc R20
L70:
.dbline 149
cpi R20,20
brlo L67
.dbline 156
L65:
.dbline 147
rjmp L64
X2:
.dbline -2
L45:
adiw R28,24
.dbline 0 ; func end
ret
.dbsym l init 20 A[4:4]c
.dbsym r add 22 c
.dbsym l address 0 A[20:20]c
.dbsym r j 22 i
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -