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

📄 6963.s

📁 液晶驱动程序
💻 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 + -