📄 6963.s
字号:
.module _6963.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\yr\桌面\6963\6963.c
.dbfunc e lcd_delay _lcd_delay fV
; i -> R20,R21
; time -> R16,R17
.even
_lcd_delay::
xcall push_gset1
.dbline -1
.dbline 20
; /*******************************************************************************
; ** T6963C液晶驱动 RT240128
; ** MAGE16L 8M
; ********************************************************************************
; **创 建 人:杨如峰
; **文 件 名:240128.c
; **创建日期:2005-11-17
; **版 本 号:yrf0422
; *******************************************************************************/
; #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(uint time)
; {
xjmp L3
L2:
.dbline 23
clr R20
clr R21
xjmp L8
L5:
.dbline 23
L6:
.dbline 23
subi R20,255 ; offset = 1
sbci R21,255
L8:
.dbline 23
cpi R20,232
ldi R30,3
cpc R21,R30
brlo L5
L3:
.dbline 22
; uint i;
; while(time--)
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L2
tst R3
brne L2
X0:
.dbline -2
L1:
xcall 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 28
; for(i=0;i<1000;i++);
;
; }
; /***********************************************************************************/
; void lcd_wd(uchar lcd_data)/*写数据*/
; {
.dbline 29
; LCD_DDR = 0X00;
clr R2
out 0x1a,R2
.dbline 30
; LCD_CODE_P &= ~(BIT(LCD_RD) | BIT(LCD_CE));
in R24,0x18
andi R24,249
out 0x18,R24
L10:
.dbline 32
L11:
.dbline 32
; /*LCD_CODE_P = 0XF9;*/
; while((LCD_DATA & 0X03) != 0X03);
in R24,0x19
andi R24,3
cpi R24,3
brne L10
.dbline 33
; LCD_RD_H;
sbi 0x18,1
.dbline 34
; LCD_CD_L;
cbi 0x18,3
.dbline 35
; LCD_RW_L;
cbi 0x18,0
.dbline 37
; /*LCD_CODE_P = 0XF2;*/
; LCD_DDR = 0XFF;
ldi R24,255
out 0x1a,R24
.dbline 38
; LCD_PORT = lcd_data;
out 0x1b,R16
.dbline 39
; LCD_CODE_P |= (BIT(LCD_RW) | BIT(LCD_RD) | BIT(LCD_CD) | BIT(LCD_CE));
in R24,0x18
ori R24,15
out 0x18,R24
.dbline -2
L9:
.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 0x1a,R2
.dbline 45
; LCD_CODE_P &= ~(BIT(LCD_RD) | BIT(LCD_CE));
in R24,0x18
andi R24,249
out 0x18,R24
L14:
.dbline 47
L15:
.dbline 47
; /*LCD_CODE_P = 0XF9;*/
; while((LCD_DATA & 0X03) != 0X03);
in R24,0x19
andi R24,3
cpi R24,3
brne L14
.dbline 48
; LCD_RD_H;
sbi 0x18,1
.dbline 49
; LCD_CD_H; //修改过了,把CD拉高为写命令
sbi 0x18,3
.dbline 50
; LCD_RW_L;
cbi 0x18,0
.dbline 52
; /*LCD_CODE_P = 0XFA;*/
; LCD_DDR = 0XFF;
ldi R24,255
out 0x1a,R24
.dbline 53
; LCD_PORT = lcd_code;
out 0x1b,R16
.dbline 54
; LCD_CODE_P |= (BIT(LCD_RW) | BIT(LCD_RD) | BIT(LCD_CD) | BIT(LCD_CE));
in R24,0x18
ori R24,15
out 0x18,R24
.dbline -2
L13:
.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::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 58
; }
; /***********************************************************************************/
; void lcd_wc3(uchar lcd_code,uchar lcd_data1,uchar lcd_data2)
; {
.dbline 59
; lcd_wd(lcd_data1);
mov R16,R22
xcall _lcd_wd
.dbline 60
; lcd_wd(lcd_data2);
ldd R16,y+4
xcall _lcd_wd
.dbline 61
; lcd_wc(lcd_code);
mov R16,R20
xcall _lcd_wc
.dbline -2
L17:
xcall 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 65
; }
; /***********************************************************************************/
; void lcd_init(void)
; {
.dbline 66
; LCD_RES_H;
sbi 0x18,4
.dbline 67
; LCD_RES_L;
cbi 0x18,4
.dbline 68
; lcd_delay(15);
ldi R16,15
ldi R17,0
xcall _lcd_delay
.dbline 69
; LCD_RES_H;
sbi 0x18,4
.dbline 71
;
; lcd_wc3(0x40,0,0); //设置文本显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,64
xcall _lcd_wc3
.dbline 72
; lcd_wc3(0x41,30,0); //设置文本显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,65
xcall _lcd_wc3
.dbline 73
; lcd_wc3(0x42,0,0); //设置图形显示区首地址
clr R2
std y+0,R2
clr R18
ldi R16,66
xcall _lcd_wc3
.dbline 74
; lcd_wc3(0x43,30,0); //设置图形显示区宽度
clr R2
std y+0,R2
ldi R18,30
ldi R16,67
xcall _lcd_wc3
.dbline 75
; lcd_wc(0x80); //设置显示模式为逻辑“或”模式
ldi R16,128
xcall _lcd_wc
.dbline 76
; lcd_wc(0x98); //开显示,图形显示
ldi R16,152
xcall _lcd_wc
.dbline -2
L18:
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::
xcall push_gset3
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 80
; }
; /***********************************************************************************/
; void lcd_clear(uchar lcd_data)
; {
.dbline 82
; uchar i,j;
; lcd_wc(0x98); /* 打开图形显示,关闭文本显示 */
ldi R16,152
xcall _lcd_wc
.dbline 83
; lcd_wc3(0x24,0,0); /* 设置地址指针 */
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _lcd_wc3
.dbline 84
; lcd_wc(0xb0); /* 设置自动写数据 */
ldi R16,176
xcall _lcd_wc
.dbline 85
; for(i=0;i<128;i++)
clr R20
xjmp L23
L20:
.dbline 86
; {
.dbline 87
; for(j=0;j<30;j++)
clr R10
xjmp L27
L24:
.dbline 88
.dbline 89
mov R16,R22
xcall _lcd_wd
.dbline 90
L25:
.dbline 87
inc R10
L27:
.dbline 87
mov R24,R10
cpi R24,30
brlo L24
.dbline 91
L21:
.dbline 85
inc R20
L23:
.dbline 85
cpi R20,128
brlo L20
.dbline 92
; {
; lcd_wd(lcd_data);/* Write display data */
; }
; }
; lcd_wc(0xb2); /* Awroff (auto reset) */
ldi R16,178
xcall _lcd_wc
.dbline 93
; lcd_wc3(0x24,0,0); /* 修改:重新设置地址指针 */
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _lcd_wc3
.dbline -2
L19:
adiw R28,1
xcall 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::
xcall push_gset2
mov R22,R18
mov R20,R16
sbiw R28,1
.dbline -1
.dbline 97
; }
; /***********************************************************************************/
; void lcd_print(uchar x,uchar y,uchar lcd_data)
; {
.dbline 98
; lcd_wc(0x98);
ldi R16,152
xcall _lcd_wc
.dbline 99
; lcd_wc3(0x24,x,y);
std y+0,R22
mov R18,R20
ldi R16,36
xcall _lcd_wc3
.dbline 100
; lcd_wc(0xb0);
ldi R16,176
xcall _lcd_wc
.dbline 101
; lcd_wd(lcd_data);
ldd R16,y+5
xcall _lcd_wd
.dbline 102
; lcd_wc(0xb2);
ldi R16,178
xcall _lcd_wc
.dbline -2
L28:
adiw R28,1
xcall 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::
xcall push_gset3
movw R22,R16
sbiw R28,1
.dbline -1
.dbline 106
; }
; /******************************************************************************/
; void lcd_print240128(cchar *str)
; {
.dbline 108
; uchar i,j;
; lcd_wc(0x98);
ldi R16,152
xcall _lcd_wc
.dbline 109
; lcd_wc3(0x24,0,0); /* 设置地址指针 */
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _lcd_wc3
.dbline 110
; lcd_wc(0xb0);
ldi R16,176
xcall _lcd_wc
.dbline 111
; for(i=0;i<128;i++)
clr R20
xjmp L33
L30:
.dbline 112
; {
.dbline 113
; for(j=0;j<30;j++)
clr R10
xjmp L37
L34:
.dbline 114
.dbline 115
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
lpm R16,Z
xcall _lcd_wd
.dbline 116
L35:
.dbline 113
inc R10
L37:
.dbline 113
mov R24,R10
cpi R24,30
brlo L34
.dbline 117
L31:
.dbline 111
inc R20
L33:
.dbline 111
cpi R20,128
brlo L30
.dbline 118
; {
; lcd_wd(*str++);
; }
; }
; lcd_wc(0xb2);
ldi R16,178
xcall _lcd_wc
.dbline 119
; lcd_wc3(0x24,0,0); /* 修改:重新设置地址指针 */
clr R2
std y+0,R2
clr R18
ldi R16,36
xcall _lcd_wc3
.dbline -2
L29:
adiw R28,1
xcall 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 + -