📄 lcd.s
字号:
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示/pic.h
.dbsym e data_buffer _data_buffer A[1184:1184]c
_data::
.blkb 2
.area idata
.byte 128,64
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示/pic.h
.blkb 2
.area idata
.byte 32,16
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示/pic.h
.blkb 2
.area idata
.byte 8,4
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示/pic.h
.blkb 2
.area idata
.byte 2,1
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示/pic.h
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.dbsym e data _data A[8:8]c
_data2::
.blkb 2
.area idata
.byte 127,191
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.blkb 2
.area idata
.byte 223,239
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.blkb 2
.area idata
.byte 247,251
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.blkb 2
.area idata
.byte 253,254
.area data(ram, con, rel)
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.dbsym e data2 _data2 A[8:8]c
.area text(rom, con, rel)
.dbfile D:\icc_work\LCD波形显示\Lcd.c
.dbfunc e delay _delay fV
; j -> R20,R21
; i -> R22
; x -> R16,R17
.even
_delay::
xcall push_gset2
.dbline -1
.dbline 19
; //ICC-AVR application builder : 2007-5-23 20:55:56
; // Target : M128
; // Crystal: 16.000Mhz
; #include <iom128v.h>
; #include <macros.h>
; #include "all.h"
; #include "pic.h"
; #define uchar unsigned char
; #define uint unsigned int
;
; unsigned char data[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
; unsigned char data2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
; char *line1;
; char *line2;
; char *line3;
; char *line4;
; //延时程序
; void delay(uint x)
; {
.dbline 21
; uint j; uchar i;
; for(j=0;j<x;j++)
clr R20
clr R21
xjmp L5
L2:
.dbline 22
; {
.dbline 23
clr R22
xjmp L9
L6:
.dbline 23
L7:
.dbline 23
inc R22
L9:
.dbline 23
cpi R22,110
brlo L6
.dbline 24
L3:
.dbline 21
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 21
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r i 22 c
.dbsym r x 16 i
.dbend
.dbfunc e lcm_out _lcm_out fV
; d -> R20
; i -> R22
; a -> R16
.even
_lcm_out::
xcall push_gset2
.dbline -1
.dbline 34
; for(i=0;i<110;i++);
; }
; }
; /**********************************************/
; /*液晶发送子程序(串口)
; 输入数据:要发送的8位数据
; 输出:无
; 作者:李怀前
; 修改时间:2006-05-26
; /*********************************************/
; void lcm_out(char a)
; {
.dbline 36
; char i,d;
; for(i=0;i<8;i++)
clr R22
xjmp L14
L11:
.dbline 37
; {
.dbline 38
; PORTB&=~BIT(PB1);//E=0
cbi 0x18,1
.dbline 39
; d=a&0x80;
mov R20,R16
andi R20,128
.dbline 40
; if(d)
breq L15
.dbline 41
; PORTB|=BIT(PB0); //R/W=1
sbi 0x18,0
xjmp L16
L15:
.dbline 43
; else
; PORTB&=~BIT(PB0);//R/W=0
cbi 0x18,0
L16:
.dbline 44
lsl R16
.dbline 45
sbi 0x18,1
.dbline 46
L12:
.dbline 36
inc R22
L14:
.dbline 36
cpi R22,8
brlo L11
.dbline -2
L10:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r d 20 c
.dbsym r i 22 c
.dbsym r a 16 c
.dbend
.dbfunc e wr_com _wr_com fV
; s -> R20
; i -> R20
; a -> R22
.even
_wr_com::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 55
; a<<=1;
; PORTB|=BIT(PB1); //E=1
; }
; }
; /***********************************************/
; /*液晶写控制字程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void wr_com(uchar a)
; {
.dbline 57
; uchar s,i;
; s=a&0xf0;
mov R20,R22
andi R20,240
.dbline 58
; lcm_out(0xf8);
ldi R16,248
xcall _lcm_out
.dbline 59
; lcm_out(s);
mov R16,R20
xcall _lcm_out
.dbline 60
; s=a&0x0f;
mov R20,R22
andi R20,15
.dbline 61
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
.dbline 62
; lcm_out(s);
mov R16,R24
xcall _lcm_out
.dbline 63
; for(i=0;i<250;i++)//延时
clr R20
xjmp L21
L18:
.dbline 64
.dbline 65
nop
.dbline 66
L19:
.dbline 63
inc R20
L21:
.dbline 63
cpi R20,250
brlo L18
.dbline -2
L17:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r s 20 c
.dbsym r i 20 c
.dbsym r a 22 c
.dbend
.dbfunc e wr_date _wr_date fV
; s -> R20
; i -> R20
; a -> R22
.even
_wr_date::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 75
; {
; asm("nop");
; }
; }
; /***********************************************/
; /*液晶写数据字程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void wr_date(uchar a)
; {
.dbline 77
; uchar s,i;
; s=a&0xf0;
mov R20,R22
andi R20,240
.dbline 78
; lcm_out(0xfa);
ldi R16,250
xcall _lcm_out
.dbline 79
; lcm_out(s);
mov R16,R20
xcall _lcm_out
.dbline 80
; s=a&0x0f;
mov R20,R22
andi R20,15
.dbline 81
; s<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
.dbline 82
; lcm_out(s);
mov R16,R24
xcall _lcm_out
.dbline 83
; for(i=0;i<250;i++)//延时
clr R20
xjmp L26
L23:
.dbline 84
.dbline 85
nop
.dbline 86
L24:
.dbline 83
inc R20
L26:
.dbline 83
cpi R20,250
brlo L23
.dbline -2
L22:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r s 20 c
.dbsym r i 20 c
.dbsym r a 22 c
.dbend
.dbfunc e pic_display _pic_display fV
; d4 -> <dead>
; i -> R20,R21
; d1 -> R20
; LCD_X -> y+0
; d2 -> R14
; LCD_Y -> R10
; qq -> R12,R13
; d3 -> R22
.even
_pic_display::
xcall push_gset5
sbiw R28,1
.dbline -1
.dbline 95
; {
; asm("nop");
; }
; }
; /***********************************************/
; /*液晶图形显示子程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void pic_display(void)
; {
.dbline 97
; unsigned char *qq;
; unsigned char d1,d2,d3,d4,LCD_X=0x80,LCD_Y=0;
ldi R24,128
std y+0,R24
.dbline 97
clr R10
.dbline 98
; unsigned int i=0;
clr R20
clr R21
.dbline 99
; qq=data_buffer;
ldi R24,<_data_buffer
ldi R25,>_data_buffer
movw R12,R24
.dbline 100
; for( d1=0; d1<2; d1++ )
xjmp L31
L28:
.dbline 101
; {
.dbline 102
; LCD_Y=0x80;
ldi R24,128
mov R10,R24
.dbline 103
; for( d2=0; d2<32; d2++)
clr R14
xjmp L35
L32:
.dbline 104
; {
.dbline 105
; wr_com(0x34);
ldi R16,52
xcall _wr_com
.dbline 106
; wr_com(LCD_Y);
mov R16,R10
xcall _wr_com
.dbline 107
; wr_com(LCD_X);
ldd R16,y+0
xcall _wr_com
.dbline 108
; wr_com(0X30);
ldi R16,48
xcall _wr_com
.dbline 109
; for( d3=0; d3<16; d3++ )
clr R22
xjmp L39
L36:
.dbline 110
.dbline 111
movw R30,R12
ld R16,Z+
movw R12,R30
xcall _wr_date
.dbline 112
L37:
.dbline 109
inc R22
L39:
.dbline 109
cpi R22,16
brlo L36
.dbline 113
inc R10
.dbline 114
L33:
.dbline 103
inc R14
L35:
.dbline 103
mov R24,R14
cpi R24,32
brlo L32
.dbline 115
ldi R24,136
std y+0,R24
.dbline 116
L29:
.dbline 100
inc R20
L31:
.dbline 100
cpi R20,2
brlo L28
.dbline 117
; {
; wr_date(*qq++);
; }
; LCD_Y+=1;
; }
; LCD_X=0x88;
; }
; wr_com(0x36);
ldi R16,54
xcall _wr_com
.dbline 118
; delay(80);
ldi R16,80
ldi R17,0
xcall _delay
.dbline 119
; wr_com(0x30);
ldi R16,48
xcall _wr_com
.dbline 120
; delay(80);
ldi R16,80
ldi R17,0
xcall _delay
.dbline -2
L27:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l d4 1 c
.dbsym r i 20 i
.dbsym r d1 20 c
.dbsym l LCD_X 0 c
.dbsym r d2 14 c
.dbsym r LCD_Y 10 c
.dbsym r qq 12 pc
.dbsym r d3 22 c
.dbend
.dbfunc e draw_point _draw_point fV
; byte_adr -> R22,R23
; LCD_Y -> R14
; LCD_X -> R10
; X_Position -> R12,R13
; X_Temp -> R20,R21
; State -> R6
; Y -> R18
; X -> R16
.even
_draw_point::
xcall push_gset5
ldd R6,y+10
.dbline -1
.dbline 129
; }
; /***********************************************/
; /*液晶画线子程序
; 输入数据:要写入的8位数据
; 输出:无
; 修改时间:2007-5-26
; /**********************************************/
; void draw_point(unsigned char X,unsigned char Y,char State)
; {
.dbline 130
; unsigned char LCD_X=0,LCD_Y=0;
clr R10
.dbline 130
clr R14
.dbline 131
; unsigned int X_Temp = 0;
clr R20
clr R21
.dbline 132
; unsigned int X_Position = 0;
clr R12
clr R13
.dbline 134
; unsigned int byte_adr;
; X_Temp = X;
mov R20,R16
clr R21
xjmp L42
L41:
.dbline 136
.dbline 137
movw R24,R12
adiw R24,1
movw R12,R24
.dbline 138
subi R20,8
sbci R21,0
.dbline 139
L42:
.dbline 135
; while (X_Temp>7)
ldi R24,7
ldi R25,0
cp R24,R20
cpc R25,R21
brlo L41
.dbline 141
; {
; X_Position++;
; X_Temp = X_Temp-8;
; }
;
; if (X_Temp<=7)
cp R24,R20
cpc R25,R21
brsh X0
xjmp L44
X0:
.dbline 142
; {
.dbline 144
;
; LCD_X=X_Position;
mov R10,R12
.dbline 145
; LCD_Y=Y;
mov R14,R18
.dbline 146
; byte_adr=LCD_Y*16+LCD_X;
ldi R24,16
mul R24,R14
movw R22,R0
mov R2,R10
clr R3
add R22,R2
adc R23,R3
.dbline 148
;
; if(State==0)
tst R6
brne L46
.dbline 149
; {
.dbline 150
; data_buffer[byte_adr]&=data2[X_Temp];
ldi R24,<_data_buffer
ldi R25,>_data_buffer
movw R2,R22
add R2,R24
adc R3,R25
ldi R24,<_data2
ldi R25,>_data2
movw R30,R20
add R30,R24
adc R31,R25
ldd R4,z+0
movw R30,R2
ldd R5,z+0
and R5,R4
std z+0,R5
.dbline 151
; }
xjmp L47
L46:
.dbline 153
; else
; {
.dbline 154
; data_buffer[byte_adr]|=data[X_Temp];
ldi R24,<_data_buffer
ldi R25,>_data_buffer
movw R2,R22
add R2,R24
adc R3,R25
ldi R24,<_data
ldi R25,>_data
movw R30,R20
add R30,R24
adc R31,R25
ldd R4,z+0
movw R30,R2
ldd R5,z+0
or R5,R4
std z+0,R5
.dbline 155
; }
L47:
.dbline 157
L44:
.dbline -2
L40:
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r byte_adr 22 i
.dbsym r LCD_Y 14 c
.dbsym r LCD_X 10 c
.dbsym r X_Position 12 i
.dbsym r X_Temp 20 i
.dbsym r State 6 c
.dbsym r Y 18 c
.dbsym r X 16 c
.dbend
.dbfunc e draw_line _draw_line fV
; temp -> R20
; d_x -> R22,R23
; d_y -> R10,R11
; err -> R6,R7
; y -> R14,R15
; x -> R12,R13
; y2 -> y+17
; x2 -> y+15
; y1 -> y+13
; x1 -> y+11
.even
_draw_line::
xcall push_arg4
xcall push_gset5
sbiw R28,1
.dbline -1
.dbline 161
;
; }
; }
;
; void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
; {
.dbline 164
; unsigned int x,y;
; unsigned int d_x,d_y; //d_x=x2-x1;d_y=y2-y1;
; int err=0;
clr R6
clr R7
.dbline 165
; unsigned char temp=0;
clr R20
.dbline 166
; if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
ldd R0,y+17
ldd R1,y+18
ldd R16,y+13
ldd R17,y+14
cp R0,R16
cpc R1,R17
brsh L49
.dbline 166
.dbline 166
ldd R12,y+11
ldd R13,y+12
.dbline 166
movw R14,R16
.dbline 166
ldd R0,y+15
ldd R1,y+16
std y+12,R1
std y+11,R0
.dbline 166
ldd R0,y+17
ldd R1,y+18
std y+14,R1
std y+13,R0
.dbline 166
std y+16,R13
std y+15,R12
.dbline 166
std y+18,R15
std y+17,R14
.dbline 166
L49:
.dbline 167
; d_y=y2-y1;
ldd R10,y+17
ldd R11,y+18
ldd R0,y+13
ldd R1,y+14
sub R10,R0
sbc R11,R1
.dbline 168
; if (d_y==0)
brne L51
X1:
.dbline 169
; {
.dbline 170
; if(x1>x2)
ldd R0,y+15
ldd R1,y+16
ldd R16,y+11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -