📄 lcdback.s
字号:
.module lcdBACK.C
.area text(rom, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
.dbfunc e lcd_read_cmd _lcd_read_cmd fc
; temp -> R20
; cs -> R16
.even
_lcd_read_cmd::
xcall push_gset1
.dbline -1
.dbline 7
; #include <iom64v.h>
; #include <macros.h>
; #define uchar unsigned char
; #include "./lcd.h"
; /******************************************************************************/
; uchar lcd_read_cmd(uchar cs)
; {
.dbline 9
; uchar temp;
; LCD_RD;
lds R24,98
andi R24,239
sts 98,R24
.dbline 9
.dbline 10
; LCD_CMD;
cbi 0x12,5
.dbline 11
mov R20,R16
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L5
cpi R20,2
ldi R30,0
cpc R21,R30
breq L6
cpi R20,3
ldi R30,0
cpc R21,R30
breq L7
xjmp L2
X0:
.dbline 11
; switch(cs){
L5:
.dbline 12
; case CS1:temp = *(volatile unsigned char *)LCD_STATUS_CS1;break;
lds R20,61184
.dbline 12
xjmp L3
L6:
.dbline 13
; case CS2:temp = *(volatile unsigned char *)LCD_STATUS_CS2;break;
lds R20,63232
.dbline 13
xjmp L3
L7:
.dbline 14
; case CS3:temp = *(volatile unsigned char *)LCD_STATUS_CS3;break;
lds R20,64256
.dbline 14
L2:
L3:
.dbline 16
; }
; return temp;
mov R16,R20
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r cs 16 c
.dbend
.dbfunc e lcd_busy _lcd_busy fV
; cs -> R20
.even
_lcd_busy::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 19
; }
; void lcd_busy(uchar cs)
; {
L9:
.dbline 20
L10:
.dbline 20
; while((lcd_read_cmd(cs) & STATUS_BUSY)!= 0);
mov R16,R20
xcall _lcd_read_cmd
sbrc R16,7
rjmp L9
.dbline -2
L8:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r cs 20 c
.dbend
.dbfunc e lcd_write_cmd _lcd_write_cmd fV
; cmd -> R20
; cs -> R22
.even
_lcd_write_cmd::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 23
; }
; void lcd_write_cmd(uchar cs, uchar cmd)
; {
.dbline 24
; lcd_busy(cs);
mov R16,R22
xcall _lcd_busy
.dbline 25
; Print_str("now wreted\r\n");
ldi R16,<L13
ldi R17,>L13
xcall _Print_str
.dbline 26
; LCD_WR;
lds R24,98
ori R24,16
sts 98,R24
.dbline 27
; LCD_CMD;
cbi 0x12,5
.dbline 28
clr R23
cpi R22,1
ldi R30,0
cpc R23,R30
breq L17
cpi R22,2
ldi R30,0
cpc R23,R30
breq L18
cpi R22,3
ldi R30,0
cpc R23,R30
breq L19
xjmp L14
X1:
.dbline 28
; switch(cs){
L17:
.dbline 29
; case CS1:*(volatile unsigned char *)LCD_CMD_CS1 = cmd;break;
sts 52992,R20
.dbline 29
xjmp L15
L18:
.dbline 30
; case CS2:*(volatile unsigned char *)LCD_CMD_CS2 = cmd;break;
sts 55040,R20
.dbline 30
xjmp L15
L19:
.dbline 31
; case CS3:*(volatile unsigned char *)LCD_CMD_CS3 = cmd;break;
sts 56064,R20
.dbline 31
L14:
L15:
.dbline -2
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r cmd 20 c
.dbsym r cs 22 c
.dbend
.dbfunc e lcd_write_data _lcd_write_data fV
; data -> R20
; cs -> R22
.even
_lcd_write_data::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 35
; }
; }
; void lcd_write_data(uchar cs,uchar data)
; {
.dbline 36
; lcd_busy(cs);
mov R16,R22
xcall _lcd_busy
.dbline 37
; LCD_WR;
lds R24,98
ori R24,16
sts 98,R24
.dbline 38
; LCD_DATA;
sbi 0x12,5
.dbline 39
clr R23
cpi R22,1
ldi R30,0
cpc R23,R30
breq L24
cpi R22,2
ldi R30,0
cpc R23,R30
breq L25
cpi R22,3
ldi R30,0
cpc R23,R30
breq L26
xjmp L21
X2:
.dbline 39
; switch(cs){
L24:
.dbline 40
; case CS1:*(volatile unsigned char *)LCD_DATA_CS1 = data;break;
sts 52992,R20
.dbline 40
xjmp L22
L25:
.dbline 41
; case CS2:*(volatile unsigned char *)LCD_DATA_CS2 = data;break;
sts 55040,R20
.dbline 41
xjmp L22
L26:
.dbline 42
; case CS3:*(volatile unsigned char *)LCD_DATA_CS3 = data;break;
sts 56064,R20
.dbline 42
L21:
L22:
.dbline -2
L20:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r cs 22 c
.dbend
.dbfunc e lcd_read_data _lcd_read_data fc
; cs -> R20
.even
_lcd_read_data::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 46
; }
; }
; uchar lcd_read_data(uchar cs)
; {
.dbline 47
; lcd_busy(cs);
mov R16,R20
xcall _lcd_busy
.dbline 48
; LCD_RD;
lds R24,98
andi R24,239
sts 98,R24
.dbline 48
.dbline 49
; LCD_DATA;
sbi 0x12,5
.dbline 50
; return(*(volatile unsigned char *)0xef00);
lds R16,61184
.dbline -2
L27:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r cs 20 c
.dbend
.dbfunc e lcd_init _lcd_init fV
; i -> R20
; temp -> R22
.even
_lcd_init::
xcall push_gset2
.dbline -1
.dbline 53
; }
; void lcd_init(void)
; {
.dbline 55
; uchar temp,i;
; DDRD |= LCD_RS | LCD_RST;
in R24,0x11
ori R24,96
out 0x11,R24
.dbline 56
; PORTD |= LCD_RS;
sbi 0x12,5
.dbline 57
; PORTD &= ~LCD_RST;
cbi 0x12,6
.dbline 59
;
; DDRF |= LCD_245;
lds R24,97
ori R24,16
sts 97,R24
.dbline 60
; PORTF |= LCD_245;
lds R24,98
ori R24,16
sts 98,R24
.dbline 61
; delay_ms(200);
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 62
; delay_ms(200);
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 63
; PORTD |= LCD_RST;
sbi 0x12,6
.dbline 64
; delay_ms(200);
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 65
; delay_ms(200);
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 66
; lcd_write_cmd(CS1, LCD_SHOW_ON);
ldi R18,63
ldi R16,1
xcall _lcd_write_cmd
.dbline 67
; lcd_write_cmd(CS2, LCD_SHOW_ON);
ldi R18,63
ldi R16,2
xcall _lcd_write_cmd
.dbline 68
; lcd_write_cmd(CS3, LCD_SHOW_ON);
ldi R18,63
ldi R16,3
xcall _lcd_write_cmd
xjmp L30
L29:
.dbline 69
; while(1){
.dbline 70
; temp = lcd_read_cmd(CS1);
ldi R16,1
xcall _lcd_read_cmd
mov R22,R16
.dbline 72
; // Print_str("Status1 = 0x");
; Print_val(temp);
clr R17
xcall _Print_val
.dbline 73
; Print_str("\r\n");
ldi R16,<L32
ldi R17,>L32
xcall _Print_str
.dbline 74
; if((temp & STATUS_RET) == 0) break; //等待初始化完成
sbrc R22,4
rjmp L33
.dbline 74
xjmp L36
L33:
.dbline 75
L30:
.dbline 69
xjmp L29
L35:
.dbline 76
; }
; while(1){ //打开显示
.dbline 77
; lcd_write_cmd(CS1,LCD_SHOW_ON);
ldi R18,63
ldi R16,1
xcall _lcd_write_cmd
.dbline 78
; temp = lcd_read_cmd(CS1);
ldi R16,1
xcall _lcd_read_cmd
mov R22,R16
.dbline 79
; Print_str("\r\nStatus2 = 0x");
ldi R16,<L38
ldi R17,>L38
xcall _Print_str
.dbline 80
; Print_val(temp);
mov R16,R22
clr R17
xcall _Print_val
.dbline 81
; if((temp & STATUS_SHOW) == 0) break; //等待初始化完成
sbrc R22,5
rjmp L39
.dbline 81
xjmp L37
L39:
.dbline 82
L36:
.dbline 76
xjmp L35
L37:
.dbline 83
; }
; Print_str("Init lcd ok\r\n");
ldi R16,<L41
ldi R17,>L41
xcall _Print_str
.dbline 84
; lcd_write_cmd(CS1, LCD_SHOW_ON);
ldi R18,63
ldi R16,1
xcall _lcd_write_cmd
.dbline 85
; lcd_write_cmd(CS1, 0xC0);
ldi R18,192
ldi R16,1
xcall _lcd_write_cmd
.dbline 87
clr R20
xjmp L45
L42:
.dbline 87
;
; for(i=0; i<8; i++){
.dbline 88
; lcd_write_cmd(CS1, 0xb8+i);
mov R18,R20
subi R18,72 ; addi 184
ldi R16,1
xcall _lcd_write_cmd
.dbline 89
; lcd_write_cmd(CS1, 0x40);
ldi R18,64
ldi R16,1
xcall _lcd_write_cmd
.dbline 90
; for(temp=0; temp<64 ;temp++)
clr R22
xjmp L49
L46:
.dbline 91
.dbline 91
ldi R18,240
ldi R16,1
xcall _lcd_write_data
.dbline 91
L47:
.dbline 90
inc R22
L49:
.dbline 90
cpi R22,64
brlo L46
.dbline 92
L43:
.dbline 87
inc R20
L45:
.dbline 87
cpi R20,8
brlo L42
.dbline 94
; { lcd_write_data(CS1,0Xf0);}
; }
;
; Print_str("TEST lcd READ ok\r\n");
ldi R16,<L50
ldi R17,>L50
xcall _Print_str
.dbline 95
; lcd_write_cmd(CS1, 0xb8);
ldi R18,184
ldi R16,1
xcall _lcd_write_cmd
.dbline 96
; lcd_write_cmd(CS1, 0x40);
ldi R18,64
ldi R16,1
xcall _lcd_write_cmd
.dbline 97
; for(temp=0; temp<64 ;temp++)
clr R22
xjmp L54
L51:
.dbline 98
.dbline 98
ldi R16,1
xcall _lcd_read_data
clr R17
xcall _USART_Transmit
.dbline 98
L52:
.dbline 97
inc R22
L54:
.dbline 97
cpi R22,64
brlo L51
.dbline 99
; { USART_Transmit(lcd_read_data(CS1));}
; USART_Transmit(lcd_read_cmd(CS1));
ldi R16,1
xcall _lcd_read_cmd
clr R17
xcall _USART_Transmit
.dbline -2
L28:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r temp 22 c
.dbend
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
L50:
.blkb 19
.area idata
.byte 'T,'E,'S,'T,32,'l,'c,'d,32,'R,'E,'A,'D,32,'o,'k
.byte 13,10,0
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
L41:
.blkb 14
.area idata
.byte 'I,'n,'i,'t,32,'l,'c,'d,32,'o,'k,13,10,0
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
L38:
.blkb 15
.area idata
.byte 13,10,'S,'t,'a,'t,'u,'s,50,32,61,32,48,'x,0
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
L32:
.blkb 3
.area idata
.byte 13,10,0
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
L13:
.blkb 13
.area idata
.byte 'n,'o,'w,32,'w,'r,'e,'t,'e,'d,13,10,0
.area data(ram, con, rel)
.dbfile E:\MP3程序\Lcd\lcdBACK.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -