📄 240128.s
字号:
.module _240128.C
.area text(rom, con, rel)
.dbfile E:\工作\240X12~1\(000)\240128.C
.dbfunc e lcd_delay _lcd_delay fV
; i -> R20,R21
; time -> R16,R17
.even
_lcd_delay::
rcall push_gset1
.dbline -1
.dbline 15
; /*******************************************************************************
; T6963C液晶驱动 RT240128
; MAGE88 16M
; *******************************************************************************/
; #include "CONFIG.H"
;
; #define LCD_LEFT 0
; #define LCD_TOP 0
; #define LCD_RIGHT 239
; #define LCD_BOTTOM 127
;
; #define LCD_DELAY 0
; /******************************************************************************/
; void lcd_delay(unsigned int time)
; {
rjmp L3
L2:
.dbline 18
; unsigned int i;
; while(time--)
; {
.dbline 19
; i=1000;
ldi R20,1000
ldi R21,3
L5:
.dbline 20
L6:
.dbline 20
movw R24,R20
sbiw R24,1
movw R20,R24
cpi R20,0
cpc R20,R21
brne L5
X0:
.dbline 21
L3:
.dbline 17
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L2
tst R3
brne L2
X1:
.dbline -2
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.dbfunc e lcd_wd _lcd_wd fV
; lcd_data -> R16
.even
_lcd_wd::
.dbline -1
.dbline 25
; while(--i);
; }
; }
; /***********************************************************************************/
; void lcd_wd(uchar lcd_data)/*写数据*/
; {
.dbline 26
; LCD_DDR = 0x00;
clr R2
out 0xa,R2
.dbline 27
; LCD_CODE_P &= ~(BIT(LCD_RD) | BIT(LCD_CE));
in R24,0x5
andi R24,243
out 0x5,R24
.dbline 28
; LCD_CODE_P |= (BIT(LCD_RW) | BIT(LCD_CD));
in R24,0x5
ori R24,3
out 0x5,R24
L9:
.dbline 29
L10:
.dbline 29
; while( (LCD_DATA & 0x03) != 0x03 );
in R24,0x9
andi R24,3
cpi R24,3
brne L9
.dbline 32
;
;
; LCD_RD_H;NOP();NOP();NOP();NOP();NOP();NOP();
sbi 0x5,2
.dbline 32
nop
.dbline 32
nop
.dbline 32
nop
.dbline 32
nop
.dbline 32
nop
.dbline 32
nop
.dbline 33
; LCD_CD_L;NOP();NOP();NOP();NOP();NOP();NOP();
cbi 0x5,0
.dbline 33
nop
.dbline 33
nop
.dbline 33
nop
.dbline 33
nop
.dbline 33
nop
.dbline 33
nop
.dbline 34
; LCD_RW_L;NOP();NOP();NOP();NOP();NOP();NOP();
cbi 0x5,1
.dbline 34
nop
.dbline 34
nop
.dbline 34
nop
.dbline 34
nop
.dbline 34
nop
.dbline 34
nop
.dbline 37
;
;
; LCD_DDR = 0XFF;
ldi R24,255
out 0xa,R24
.dbline 38
; LCD_PORT = lcd_data;NOP();NOP();NOP();NOP();NOP();NOP();NOP();
out 0xb,R16
.dbline 38
nop
.dbline 38
nop
.dbline 38
nop
.dbline 38
nop
.dbline 38
nop
.dbline 38
nop
.dbline 38
nop
.dbline 39
; LCD_CODE_P |= (BIT(LCD_RW) | BIT(LCD_RD) | BIT(LCD_CD) | BIT(LCD_CE));
in R24,0x5
ori R24,15
out 0x5,R24
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbsym r lcd_data 16 c
.dbend
.dbfunc e lcd_wc _lcd_wc fV
; lcd_code -> R16
.even
_lcd_wc::
.dbline -1
.dbline 43
; }
; /***********************************************************************************/
; void lcd_wc(uchar lcd_code)/*写命令*/
; {
.dbline 44
; LCD_DDR = 0X00;
clr R2
out 0xa,R2
.dbline 45
; LCD_CODE_P &= ~(BIT(LCD_RD) | BIT(LCD_CE));
in R24,0x5
andi R24,243
out 0x5,R24
.dbline 46
; LCD_CODE_P |= (BIT(LCD_RD) | BIT(LCD_CE));
in R24,0x5
ori R24,12
out 0x5,R24
L13:
.dbline 47
L14:
.dbline 47
; while( (LCD_DATA & 0X03) != 0X03 );
in R24,0x9
andi R24,3
cpi R24,3
brne L13
.dbline 50
;
;
; LCD_RD_H;NOP();NOP();NOP();NOP();NOP();NOP();
sbi 0x5,2
.dbline 50
nop
.dbline 50
nop
.dbline 50
nop
.dbline 50
nop
.dbline 50
nop
.dbline 50
nop
.dbline 51
; LCD_CD_H;NOP();NOP();NOP();NOP();NOP();NOP();
sbi 0x5,0
.dbline 51
nop
.dbline 51
nop
.dbline 51
nop
.dbline 51
nop
.dbline 51
nop
.dbline 51
nop
.dbline 52
; LCD_RW_L;NOP();NOP();NOP();NOP();NOP();NOP();
cbi 0x5,1
.dbline 52
nop
.dbline 52
nop
.dbline 52
nop
.dbline 52
nop
.dbline 52
nop
.dbline 52
nop
.dbline 55
;
;
; LCD_DDR = 0XFF;
ldi R24,255
out 0xa,R24
.dbline 56
; LCD_PORT = lcd_code;NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
out 0xb,R16
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 56
nop
.dbline 57
; LCD_CODE_P |= (BIT(LCD_RW) | BIT(LCD_RD) | BIT(LCD_CD) | BIT(LCD_CE));
in R24,0x5
ori R24,15
out 0x5,R24
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r lcd_code 16 c
.dbend
.dbfunc e lcd_wc3 _lcd_wc3 fV
; lcd_data2 -> y+4
; lcd_data1 -> R22
; lcd_code -> R20
.even
_lcd_wc3::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 61
; }
; /***********************************************************************************/
; void lcd_wc3(unsigned char lcd_code,unsigned char lcd_data1,unsigned char lcd_data2)
; {
.dbline 62
; lcd_wd(lcd_data1);
mov R16,R22
rcall _lcd_wd
.dbline 63
; lcd_wd(lcd_data2);
ldd R16,y+4
rcall _lcd_wd
.dbline 64
; lcd_wc(lcd_code);
mov R16,R20
rcall _lcd_wc
.dbline -2
L16:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l lcd_data2 4 c
.dbsym r lcd_data1 22 c
.dbsym r lcd_code 20 c
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
sbiw R28,1
.dbline -1
.dbline 68
; }
; /******************************************************************************/
; void lcd_init(void)
; {
.dbline 69
; LCD_RES_H;
sbi 0x5,4
.dbline 70
; LCD_RES_L;
cbi 0x5,4
.dbline 71
; lcd_delay(15);
ldi R16,15
ldi R17,0
rcall _lcd_delay
.dbline 72
; LCD_RES_H;
sbi 0x5,4
.dbline 73
; lcd_wc(0x80); //设置显示模式为逻辑“或”模式
ldi R16,128
rcall _lcd_wc
.dbline 74
; lcd_wc(0x98); //开显示
ldi R16,152
rcall _lcd_wc
.dbline 75
; lcd_wc3(0x40,0,0); //设置文本显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,64
rcall _lcd_wc3
.dbline 76
; lcd_wc3(0x41,30,0); //设置文本显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,65
rcall _lcd_wc3
.dbline 77
; lcd_wc3(0x42,0,0); //设置图形显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,66
rcall _lcd_wc3
.dbline 78
; lcd_wc3(0x43,30,0); //设置图形显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,67
rcall _lcd_wc3
.dbline -2
L17:
adiw R28,1
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_clear _lcd_clear fV
; i -> R20
; j -> R10
; lcd_data -> R22
.even
_lcd_clear::
rcall push_gset3
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 82
; }
; /******************************************************************************/
; void lcd_clear(unsigned char lcd_data)
; {
.dbline 84
; unsigned char i,j;
; lcd_wc(0x98); //打开图形显示,关闭文本显示
ldi R16,152
rcall _lcd_wc
.dbline 85
; lcd_wc3(0x24,0,0); //设置地址指针
clr R2
std y+0,R2
clr R18
ldi R16,36
rcall _lcd_wc3
.dbline 86
; lcd_wc(0xb0); //设置自动写数据
ldi R16,176
rcall _lcd_wc
.dbline 87
; for(i=0;i<128;i++)
clr R20
rjmp L22
L19:
.dbline 88
; {
.dbline 89
; for(j=0;j<30;j++)
clr R10
rjmp L26
L23:
.dbline 90
.dbline 91
mov R16,R22
rcall _lcd_wd
.dbline 92
L24:
.dbline 89
inc R10
L26:
.dbline 89
mov R24,R10
cpi R24,30
brlo L23
.dbline 93
L20:
.dbline 87
inc R20
L22:
.dbline 87
cpi R20,128
brlo L19
.dbline 94
; {
; lcd_wd(lcd_data); //Write display data
; }
; }
; lcd_wc(0xb2); //Awroff (auto reset)
ldi R16,178
rcall _lcd_wc
.dbline -2
L18:
adiw R28,1
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r lcd_data 22 c
.dbend
.dbfunc e lcd_print _lcd_print fV
; lcd_data -> y+5
; y -> R22
; x -> R20
.even
_lcd_print::
rcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,1
.dbline -1
.dbline 98
; }
; /******************************************************************************/
; void lcd_print(unsigned char x,unsigned char y,unsigned char lcd_data)
; {
.dbline 99
; lcd_wc(0x98);
ldi R16,152
rcall _lcd_wc
.dbline 100
; lcd_wc3(0x24,x,y);
std y+0,R22
mov R18,R20
ldi R16,36
rcall _lcd_wc3
.dbline 101
; lcd_wc(0xb0);
ldi R16,176
rcall _lcd_wc
.dbline 102
; lcd_wd(lcd_data);
ldd R16,y+5
rcall _lcd_wd
.dbline 103
; lcd_wc(0xb2);
ldi R16,178
rcall _lcd_wc
.dbline -2
L27:
adiw R28,1
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l lcd_data 5 c
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e lcd_print240128 _lcd_print240128 fV
; i -> R20
; j -> R10
; str -> R22,R23
.even
_lcd_print240128::
rcall push_gset3
movw R22,R16
sbiw R28,1
.dbline -1
.dbline 107
; }
; /******************************************************************************/
; void lcd_print240128(cchar *str)
; {
.dbline 109
; uchar i,j;
; lcd_wc(0x98);
ldi R16,152
rcall _lcd_wc
.dbline 110
; lcd_wc3(0x24,0,0);
clr R2
std y+0,R2
clr R18
ldi R16,36
rcall _lcd_wc3
.dbline 111
; lcd_wc(0xb0);
ldi R16,176
rcall _lcd_wc
.dbline 112
; for(i=0;i<128;i++)
clr R20
rjmp L32
L29:
.dbline 113
; {
.dbline 114
; for(j=0;j<30;j++)
clr R10
rjmp L36
L33:
.dbline 115
.dbline 116
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
lpm R16,Z
rcall _lcd_wd
.dbline 117
L34:
.dbline 114
inc R10
L36:
.dbline 114
mov R24,R10
cpi R24,30
brlo L33
.dbline 118
L30:
.dbline 112
inc R20
L32:
.dbline 112
cpi R20,128
brlo L29
.dbline 119
; {
; lcd_wd(*str++);
; }
; }
; lcd_wc(0xb2);
ldi R16,178
rcall _lcd_wc
.dbline -2
L28:
adiw R28,1
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 10 c
.dbsym r str 22 pkc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -