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

📄 240128.s

📁 用ATMEGA88推动LCD240128液晶的测试程序。按config.h的定义连接AVR和LCD
💻 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 + -