⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdback.s

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 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 + -