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

📄 240128.s

📁 用ATmega88驱动LCD240128
💻 S
📖 第 1 页 / 共 3 页
字号:
	.byte 1,0
	.byte 1,16
	.byte 31,248
	.byte 16,16
	.byte 16,16
	.byte 16,16
	.byte 31,240
	.byte 16,16
	.byte 1,16
	.byte 40,136
	.byte 36,'D
	.byte 'D,'D
	.byte 0,0
	.byte 183,214
	.byte 8,128
	.byte 12,128
	.byte 8,64
	.byte 16,32
	.byte 16,48
	.byte 32,24
	.byte 64,14
	.byte 159,228
	.byte 4,32
	.byte 4,32
	.byte 4,32
	.byte 4,32
	.byte 8,32
	.byte 16,160
	.byte 32,64
	.byte 64,0
	.byte 195,235
	.byte 12,32
	.byte 240,32
	.byte 16,32
	.byte 17,40
	.byte 253,164
	.byte 17,34
	.byte 50,34
	.byte 58,32
	.byte 'T,34
	.byte 'T,34
	.byte 144,4
	.byte 16,8
	.byte 16,16
	.byte 16,96
	.byte 17,128
	.byte 22,0
	.dbsym e GB_16x16 _GB_16x16 A[340:10]kX
_turnf::
	.byte 7,6
	.byte 5,4
	.byte 3,2
	.byte 1,0
	.dbfile D:\工作\240X12~1\(000)\240128.C
	.dbsym e turnf _turnf A[8:8]kc
	.area text(rom, con, rel)
	.dbfile D:\工作\240X12~1\(000)\240128.C
	.dbfunc e fnSTA01 _fnSTA01 fc
	.even
_fnSTA01::
	.dbline -1
	.dbline 15
; /*******************************************************************************
;                            T6963C液晶驱动 RT240128
;                               MAGE88 16M
; *******************************************************************************/
; #include <iom88v.h>
; #include <macros.h>
; #include "240128.h"
; #include "storeroom.h"
; const unsigned char  turnf[8] = {7,6,5,4,3,2,1,0};
; unsigned char gCurRow,gCurCol;
; /*******************************************************************************
;  状态位STA1,STA0判断读写指令和读写数据,在读写数据或者写入命令前必须保证均为1。 
; *******************************************************************************/
; unsigned char fnSTA01(void)
; {
	.dbline 16
;     if( (LCD_RD_STATUS() & 0x03) == 0x03 )    return(0);
	rcall _LCD_RD_STATUS
	mov R24,R16
	andi R24,3
	cpi R24,3
	brne L3
	.dbline 16
	clr R16
	rjmp L2
L3:
	.dbline 17
; 	else                                      return(1);
	ldi R16,1
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e fnSTA2 _fnSTA2 fc
	.even
_fnSTA2::
	.dbline -1
	.dbline 23
; }
; /*******************************************************************************
;  状态位STA2,如果STA2=1 为自动读状态
; *******************************************************************************/
; unsigned char fnSTA2(void)
; {
	.dbline 24
;     if( (LCD_RD_STATUS() & 0x04) == 0x04 )    return(0);
	rcall _LCD_RD_STATUS
	mov R24,R16
	andi R24,4
	cpi R24,4
	brne L6
	.dbline 24
	clr R16
	rjmp L5
L6:
	.dbline 25
;     else                                      return(1);
	ldi R16,1
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e fnSTA3 _fnSTA3 fc
	.even
_fnSTA3::
	.dbline -1
	.dbline 31
; }
; /*******************************************************************************
;  状态位STA3 如果STA3 = 1 数据自动写状态
; *******************************************************************************/
; unsigned char fnSTA3(void)
; {
	.dbline 32
;     if( (LCD_RD_STATUS() & 0x08) == 0x08 )    return(0);
	rcall _LCD_RD_STATUS
	mov R24,R16
	andi R24,8
	cpi R24,8
	brne L9
	.dbline 32
	clr R16
	rjmp L8
L9:
	.dbline 33
;     else                                      return(1);
	ldi R16,1
	.dbline -2
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e fnSTA6 _fnSTA6 fc
	.even
_fnSTA6::
	.dbline -1
	.dbline 39
; }
; /*******************************************************************************
;  状态位STA6 如果STA6 =1 屏读/屏拷贝状态
; *******************************************************************************/
; unsigned char fnSTA6(void)
; {
	.dbline 40
;     if( (LCD_RD_STATUS() & 0x40) == 0x40 )    return(0);
	rcall _LCD_RD_STATUS
	mov R24,R16
	andi R24,64
	cpi R24,64
	brne L12
	.dbline 40
	clr R16
	rjmp L11
L12:
	.dbline 41
;     else                                      return(1);
	ldi R16,1
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_RD_STATUS _LCD_RD_STATUS fc
;           temp -> R16
	.even
_LCD_RD_STATUS::
	.dbline -1
	.dbline 47
; }
; /*******************************************************************************
;  读LCD状态
; *******************************************************************************/
; unsigned char LCD_RD_STATUS(void)
; {
	.dbline 49
;     unsigned char temp;
;     LCD_DDR = 0x00;
	clr R2
	out 0xa,R2
	.dbline 50
;     LCD_CD_H;
	sbi 0x5,0
	.dbline 51
;     LCD_RD_L;
	cbi 0x5,2
	.dbline 52
; 	NOP();NOP();NOP();
	nop
	.dbline 52
	nop
	.dbline 52
	nop
	.dbline 53
;     temp = LCD_DATA;
	in R16,0x9
	.dbline 54
;     LCD_RD_H;
	sbi 0x5,2
	.dbline 55
;     LCD_DDR = 0xFF;
	ldi R24,255
	out 0xa,R24
	.dbline 56
;     return(temp);
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r temp 16 c
	.dbend
	.dbfunc e LCD_RD_DATA _LCD_RD_DATA fc
;           temp -> R16
	.even
_LCD_RD_DATA::
	.dbline -1
	.dbline 62
; }
; /*******************************************************************************
;  读LCD数据
; *******************************************************************************/
; unsigned char LCD_RD_DATA(void)
; {
	.dbline 64
;     unsigned char temp;
;     LCD_DDR = 0x00;
	clr R2
	out 0xa,R2
	.dbline 65
;     LCD_CD_L; 
	cbi 0x5,0
	.dbline 66
;     LCD_RD_L;
	cbi 0x5,2
	.dbline 67
; 	NOP();NOP();NOP();
	nop
	.dbline 67
	nop
	.dbline 67
	nop
	.dbline 68
;     temp = LCD_DATA;
	in R16,0x9
	.dbline 69
;     LCD_RD_H;
	sbi 0x5,2
	.dbline 70
;     LCD_DDR = 0xFF;
	ldi R24,255
	out 0xa,R24
	.dbline 71
;     return(temp);
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbsym r temp 16 c
	.dbend
	.dbfunc e LCD_WR_DATA _LCD_WR_DATA fV
;           data -> R20
	.even
_LCD_WR_DATA::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 77
; }
; /*******************************************************************************
;  写数据 
; *******************************************************************************/
; void LCD_WR_DATA(unsigned char data)
; {
L17:
	.dbline 78
L18:
	.dbline 78
;     while( fnSTA01() );	
	rcall _fnSTA01
	tst R16
	brne L17
	.dbline 79
; 	LCD_CD_L;
	cbi 0x5,0
	.dbline 80
;     LCD_WR_L;
	cbi 0x5,1
	.dbline 82
;   //LCD_DDR = 0XFF;----------------单片机端口必须处于输出状态
;     LCD_PORT = data;
	out 0xb,R20
	.dbline 83
;     LCD_WR_H;
	sbi 0x5,1
	.dbline -2
L16:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_WR_CODE _LCD_WR_CODE fV
;           code -> R20
	.even
_LCD_WR_CODE::
	rcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 89
; }
; /*******************************************************************************
;  写无参数命令 
; *******************************************************************************/
; void LCD_WR_CODE(unsigned char code)
; {
L21:
	.dbline 90
L22:
	.dbline 90
;     while( fnSTA01() );	
	rcall _fnSTA01
	tst R16
	brne L21
	.dbline 91
;     LCD_CD_H;
	sbi 0x5,0
	.dbline 92
;     LCD_WR_L;
	cbi 0x5,1
	.dbline 94
;   //LCD_DDR = 0XFF;----------------单片机端口必须处于输出状态
;     LCD_PORT = code;
	out 0xb,R20
	.dbline 95
;     LCD_WR_H;
	sbi 0x5,1
	.dbline -2
L20:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r code 20 c
	.dbend
	.dbfunc e LCD_WR_CODE1 _LCD_WR_CODE1 fV
;          data1 -> R22
;           code -> R20
	.even
_LCD_WR_CODE1::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 101
; }
; /*******************************************************************************
;  写单参数的指令 
; *******************************************************************************/
; void LCD_WR_CODE1(unsigned char code, unsigned char data1)
; {    
	.dbline 102
;     LCD_WR_DATA(data1);
	mov R16,R22
	rcall _LCD_WR_DATA
	.dbline 103
;     LCD_WR_CODE(code);    
	mov R16,R20
	rcall _LCD_WR_CODE
	.dbline -2
L24:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r data1 22 c
	.dbsym r code 20 c
	.dbend
	.dbfunc e LCD_WR_CODE2 _LCD_WR_CODE2 fV
;          data2 -> y+4
;          data1 -> R22
;           code -> R20
	.even
_LCD_WR_CODE2::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 109
; }
; /*******************************************************************************
;  写双参数的指令 
; *******************************************************************************/
; void LCD_WR_CODE2(unsigned char code, unsigned char data1, unsigned char data2)
; {    
	.dbline 110
;     LCD_WR_DATA(data1);
	mov R16,R22
	rcall _LCD_WR_DATA
	.dbline 111
;     LCD_WR_DATA(data2);
	ldd R16,y+4
	rcall _LCD_WR_DATA
	.dbline 112
;     LCD_WR_CODE(code);    
	mov R16,R20
	rcall _LCD_WR_CODE
	.dbline -2
L25:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data2 4 c
	.dbsym r data1 22 c
	.dbsym r code 20 c
	.dbend
	.dbfunc e LCD_INIT _LCD_INIT fV
	.even
_LCD_INIT::
	sbiw R28,1
	.dbline -1
	.dbline 118
; }
; /*******************************************************************************
;  初始化LCD 
; *******************************************************************************/
; void LCD_INIT(void)
; {
	.dbline 119
;     LCD_WR_CODE(LCD_MOD_OR);
	ldi R16,128
	rcall _LCD_WR_CODE
	.dbline 120
;     LCD_WR_CODE(0x98);                  //打开图形显示
	ldi R16,152
	rcall _LCD_WR_CODE
	.dbline 121
;     LCD_WR_CODE2(LCD_TXT_STP,0,0);
	clr R2
	std y+0,R2
	clr R18
	ldi R16,64
	rcall _LCD_WR_CODE2
	.dbline 122
;     LCD_WR_CODE2(LCD_TXT_WID,30,0);
	clr R2
	std y+0,R2
	ldi R18,30
	ldi R16,65
	rcall _LCD_WR_CODE2
	.dbline 123
;     LCD_WR_CODE2(LCD_GRH_STP,0,0);
	clr R2
	std y+0,R2
	clr R18
	ldi R16,66
	rcall _LCD_WR_CODE2
	.dbline 124
;     LCD_WR_CODE2(LCD_GRH_WID,30,0);
	clr R2
	std y+0,R2
	ldi R18,30
	ldi R16,67
	rcall _LCD_WR_CODE2
	.dbline -2
L26:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_CLEAR _LCD_CLEAR fV
;              i -> R20
;              j -> R10
;           data -> R22
	.even
_LCD_CLEAR::
	rcall push_gset3
	mov R22,R16
	sbiw R28,1
	.dbline -1
	.dbline 130
; }
; /*******************************************************************************
;  清整屏 
; *******************************************************************************/
; void LCD_CLEAR(unsigned char data)
; {
	.dbline 132
;     unsigned char i,j;
;     LCD_WR_CODE(0x98);                  //打开图形显示
	ldi R16,152
	rcall _LCD_WR_CODE
	.dbline 133
;     LCD_WR_CODE2(LCD_ADD_POS,0,0);
	clr R2
	std y+0,R2
	clr R18
	ldi R16,36
	rcall _LCD_WR_CODE2
	.dbline 134
;     LCD_WR_CODE(LCD_AUT_WR);
	ldi R16,176
	rcall _LCD_WR_CODE
	.dbline 135
;     for(i=0;i<128;i++)
	clr R20
	rjmp L31
L28:
	.dbline 136
;     {
	.dbline 137
;         for(j=0;j<30;j++)
	clr R10
	rjmp L35
L32:
	.dbline 138
	.dbline 139
	mov R16,R22
	rcall _LCD_WR_DATA
	.dbline 140
L33:
	.dbline 137
	inc R10
L35:
	.dbline 137
	mov R24,R10
	cpi R24,30
	brlo L32
	.dbline 141
L29:
	.dbline 135
	inc R20
L31:
	.dbline 135
	cpi R20,128
	brlo L28
	.dbline 142
;         {
;             LCD_WR_DATA(data);
;         }
;     }                               
;     LCD_WR_CODE(LCD_AUT_OVR);
	ldi R16,178
	rcall _LCD_WR_CODE
	.dbline -2
L27:
	adiw R28,1
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 10 c
	.dbsym r data 22 c
	.dbend
	.dbfunc e PRINT_240128 _PRINT_240128 fV
;              i -> R20
;              j -> R10
;            str -> R22,R23
	.even
_PRINT_240128::
	rcall push_gset3
	movw R22,R16
	sbiw R28,1
	.dbline -1
	.dbline 148
; }
; /*******************************************************************************
;  显示一个240*128的图片 图片的大小为3840 。
; *******************************************************************************/
; void PRINT_240128(const unsigned char *str)
; {
	.dbline 150
;     unsigned char i,j;
;     LCD_WR_CODE(0x98);
	ldi R16,152
	rcall _LCD_WR_CODE
	.dbline 151
;     LCD_WR_CODE2(LCD_ADD_POS,0,0);
	clr R2
	std y+0,R2
	clr R18
	ldi R16,36
	rcall _LCD_WR_CODE2
	.dbline 152
;     LCD_WR_CODE(LCD_AUT_WR);
	ldi R16,176
	rcall _LCD_WR_CODE
	.dbline 153
;     for(i=0;i<128;i++)
	clr R20
	rjmp L40
L37:
	.dbline 154
;     {
	.dbline 155
;         for(j=0;j<30;j++)
	clr R10
	rjmp L44
L41:
	.dbline 156
	.dbline 157
	movw R2,R22
	subi R22,255  ; offset = 1
	sbci R23,255
	movw R30,R2
	lpm R16,Z
	rcall _LCD_WR_DATA
	.dbline 158
L42:
	.dbline 155
	inc R10
L44:
	.dbline 155
	mov R24,R10
	cpi R24,30
	brlo L41
	.dbline 159
L38:
	.dbline 153
	inc R20
L40:
	.dbline 153
	cpi R20,128
	brlo L37
	.dbline 160
;         {
;             LCD_WR_DATA(*str++);
;         }
;     }
;     LCD_WR_CODE(LCD_AUT_OVR);
	ldi R16,178
	rcall _LCD_WR_CODE
	.dbline -2
L36:
	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
	.dbfunc e LCD_SET_ADD _LCD_SET_ADD fV
;           ucol -> R20
;           urow -> R22
	.even
_LCD_SET_ADD::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	sbiw R28,1
	.dbline -1
	.dbline 166
; }
; /*******************************************************************************
;  设置当前地址,用于起点定位。
; *******************************************************************************/
; void LCD_SET_ADD(unsigned char urow, unsigned char ucol)
; {
	.dbline 167
;     LCD_WR_CODE2(LCD_ADD_POS,(urow*30+ucol) & 0xFF,(urow*30+ucol) / 256);
	ldi R24,30
	mul R24,R22
	movw R2,R0
	mov R4,R20
	clr R5
	add R2,R4
	adc R3,R5
	ldi R18,256
	ldi R19,1
	movw R16,R2
	rcall div16s
	std y+0,R16
	mov R18,R2
	andi R19,0
	ldi R16,36
	rcall _LCD_WR_CODE2
	.dbline 168
;     gCurRow = urow;
	sts _gCurRow,R22
	.dbline 169
;     gCurCol = ucol;
	sts _gCurCol,R20
	.dbline -2
L45:
	adiw R28,1
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r ucol 20 c
	.dbsym r urow 22 c
	.dbend
	.dbfunc e PRINT_words _PRINT_words fV
;         length -> y+0
;           uRow -> R22
;           uCol -> R10
;              i -> R12
;              k -> R14,R15
;              j -> R20
;            ptr -> y+15
;              y -> y+13
;              x -> y+11
	.even
_PRINT_words::
	rcall push_arg4
	rcall push_gset5
	sbiw R28,1
	.dbline -1
	.dbline 175
; }
; /*******************************************************************************
;  ASCII(8*16) 及 汉字(16*16) 显示函数,ASCII与汉字区别在于128做分界。
; *******************************************************************************/
; void PRINT_words (unsigned char x,unsigned char y, char *ptr)
; {
	.dbline 176
;     unsigned char length=0,i=0,j=0,uRow=0,uCol=0;
	clr R0
	std y+0,R0
	.dbline 176
	clr R12
	.dbline 176
	clr R20
	.dbline 176
	clr R22
	.dbline 176
	clr R10
	.dbline 177
;     unsigned int  k=0;
	clr R14
	clr R15
	.dbline 178
; 	uRow = y;
	ldd R22,y+13
	.dbline 179
;     uCol = x;	            	
	ldd R10,y+11
	.dbline 180
; 	LCD_SET_ADD(uRow*16,uCol);      //起点定位
	mov R18,R10
	ldi R24,16
	mul R24,R22
	mov R16,R0
	rcall _LCD_SET_ADD
	rjmp L48
L47:
	.dbline 184
	.dbline 185
	ldd R0,y+0
	inc R0
	std y+0,R0
	.dbline 186
L48:
	.dbline 183
; 
; 	
;     while (ptr[length]!=0)            //探测字串长度
	ldd R30,y+0
	clr R31
	ldd R0,y+15
	ldd R1,y+16
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	tst R2
	brne L47
	rjmp L51
L50:
	.dbline 188
;     {
; 	  length++;
;     }		
;     while(i<length)//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
;     {
	.dbline 189
; 	    uRow = gCurRow;    
	lds R22,_gCurRow
	.dbline 190
;     	uCol = gCurCol;			
	lds R10,_gCurCol
	.dbline 191
;     	if(ptr[i] <= 128)//ASCII
	mov R30,R12
	clr R31
	ldd R0,y+15
	ldd R1,y+16
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldi R24,128
	cp R24,R2
	brlo L53
	.dbline 192
;       	{
	.dbline 193
;             for(j=0;j<16;j++)
	clr R20
	rjmp L58
L55:
	.dbline 194
	.dbline 195
	ldi R16,176
	rcall _LCD_WR_CODE
	.dbline 196
	mov R30,R12
	clr R31
	ldd R0,y+15
	ldd R1,y+16
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldi R24,16
	mul R24,R2
	movw R30,R0
	subi R30,0
	sbci R31,2
	mov R2,R20
	clr R3
	add R30,R2
	adc R31,R3
	ldi R24,<_ASC_MSK
	ldi R25,>_ASC_MSK
	add R30,R24
	adc R31,R25
	lpm R16,Z
	rcall _LCD_WR_DATA
	.dbline 197
	ldi R16,178
	rcall _LCD_WR_CODE
	.dbline 198
	mov R18,R10
	mov R16,R22
	add R16,R20
	subi R16,255    ; addi 1
	rcall _LCD_SET_ADD
	.dbline 199
L56:
	.dbline 193
	inc R20
L58:
	.dbline 193
	cpi R20,16
	brlo L55
	.dbline 200
;             {
;                 LCD_WR_CODE(LCD_AUT_WR);
;                 LCD_WR_DATA(ASC_MSK[(ptr[i]-0x20)*16+j]);
;                 LCD_WR_CODE(LCD_AUT_OVR);
;                 LCD_SET_ADD(uRow+j+1,uCol);
;             }
;             uCol += 1;
	inc R10
	.dbline 201
;         }
	rjmp L54
L53:
	.dbline 203
;     	else//中文
;       	{
	.dbline 204
;             for(j=0;j<sizeof(GB_16x16)/sizeof(GB_16x16[0]);j++)  	// 查找定位
	clr R20
	rjmp L62
L59:
	.dbline 205
;             {
	.dbline 206
;                 if(ptr[i] == GB_16x16[j].Index[0] && ptr[i+1] == GB_16x16[j].Index[1])
	mov R2,R12
	clr R3
	ldd R0,y+15

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -