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

📄 lcd.s

📁 已经上传的YF-320240-3.5寸彩屏(可由单片机控制)的测试程序。主CPU为MEGA128
💻 S
📖 第 1 页 / 共 5 页
字号:
	.module lcd.c
	.area text(rom, con, rel)
	.dbfile F:\Relations\sf6_system\measure\LCDtest\lcd.c
	.dbfunc e Clear_Display _Clear_Display fV
;          color -> R20
	.even
_Clear_Display::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 6
; #include <iom128v.h>
; #include "lcd.h"
; #include <macros.h>
; 
; void Clear_Display(unsigned char color)
; {   
	.dbline 7
;     CMD = LCD_MODE_2;
	ldi R24,4
	sts 32770,R24
	.dbline 8
; 	DAT = color;
	sts 32771,R20
	.dbline 9
; 	CMD = LCD_CLEAR_EN;
	ldi R24,8
	sts 32770,R24
	.dbline 10
; 	Delayx10ms(1);
	ldi R16,1
	ldi R17,0
	xcall _Delayx10ms
	.dbline 11
; 	CMD = LCD_CLEAR_DIS;
	clr R2
	sts 32770,R2
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r color 20 c
	.dbend
	.dbfunc e Dis_Rect _Dis_Rect fV
;              i -> R20
;              j -> R14,R15
;          color -> R22
;          width -> R10
;          lenth -> R12,R13
;              y -> R18
;              x -> R16,R17
	.even
_Dis_Rect::
	xcall push_gset5
	ldd R12,y+10
	ldd R13,y+11
	ldd R10,y+12
	ldd R22,y+14
	.dbline -1
	.dbline 24
; }
; 
; 
; /* 编写:2005.11.29
;     编写者:赫树开
;   功能:画一个矩形
;   参数。 X为矩形左上角的X坐标,
;       Y为左上角Y坐标值,
;       lenth为矩形长度,
;       width 为矩形宽度
;       color为矩形的颜色,*/
; void Dis_Rect(unsigned int x,unsigned char y,unsigned int lenth,unsigned char width,unsigned char color)
; {
	.dbline 27
;     unsigned char i;
; 	unsigned int j;
; 	CMD = LCD_MODE_0+LCD_DOT1;
	clr R2
	sts 32770,R2
	.dbline 28
;     for(i=y;i<y+width;i++)
	mov R20,R18
	xjmp L6
L3:
	.dbline 29
;     {
	.dbline 30
;         X_ADDR = x;
	sts 32768,R16
	.dbline 31
; 		X_ADDR = x/256;
	movw R2,R16
	mov R2,R3
	clr R3
	sts 32768,R2
	.dbline 32
;         Y_ADDR = i;
	sts 32769,R20
	.dbline 33
;         for(j=0;j<lenth;j++)
	clr R14
	clr R15
	xjmp L10
L7:
	.dbline 34
	.dbline 35
	sts 32771,R22
	.dbline 36
L8:
	.dbline 33
	movw R24,R14
	adiw R24,1
	movw R14,R24
L10:
	.dbline 33
	cp R14,R12
	cpc R15,R13
	brlo L7
	.dbline 37
L4:
	.dbline 28
	inc R20
L6:
	.dbline 28
	mov R2,R18
	add R2,R10
	cp R20,R2
	brlo L3
	.dbline -2
L2:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 14 i
	.dbsym r color 22 c
	.dbsym r width 10 c
	.dbsym r lenth 12 i
	.dbsym r y 18 c
	.dbsym r x 16 i
	.dbend
	.dbfunc e bytekzh _bytekzh fV
;              i -> R20
;              j -> R22
;           back -> R10
;          front -> R18
;         datain -> R16
	.even
_bytekzh::
	xcall push_gset4
	ldd R10,y+8
	.dbline -1
	.dbline 41
;         {
;             DAT = color;
;         }
;     }
; }
; //单色字节扩展函数
; void bytekzh( unsigned char datain,unsigned char front, unsigned char back )
; {
	.dbline 43
; unsigned char i,j;
; for( i=0,j=0x80; i<8; i++,j=(j>>1))
	clr R20
	ldi R22,128
	xjmp L15
L12:
	.dbline 44
; {
	.dbline 45
;     DAT=datain&j ? front: back;
	mov R2,R16
	and R2,R22
	breq L16
	mov R12,R18
	clr R13
	xjmp L17
L16:
	mov R12,R10
	clr R13
L17:
	sts 32771,R12
	.dbline 46
L13:
	.dbline 43
	inc R20
	lsr R22
L15:
	.dbline 43
	cpi R20,8
	brlo L12
	.dbline -2
L11:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbsym r back 10 c
	.dbsym r front 18 c
	.dbsym r datain 16 c
	.dbend
	.dbfunc e Dis_Ascii _Dis_Ascii fV
;              k -> R20
;              j -> R22
;           back -> y+10
;          front -> y+8
;            dat -> R10
;              y -> R18
;              x -> R16,R17
	.even
_Dis_Ascii::
	xcall push_gset3
	ldd R10,y+6
	.dbline -1
	.dbline 50
; }
; }
; 
; void Dis_Ascii(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
; {
	.dbline 52
;          unsigned char j,k;
;          k = 0;
	clr R20
	.dbline 53
;          dat -= 0x20;
	mov R24,R10
	subi R24,32
	mov R10,R24
	.dbline 54
; 		 CMD = LCD_MODE_1;
	ldi R24,2
	sts 32770,R24
	.dbline 55
; 		 DAT = front;
	ldd R0,y+8
	sts 32771,R0
	.dbline 56
; 		 CMD = LCD_MODE_2;
	ldi R24,4
	sts 32770,R24
	.dbline 57
; 		 DAT = back;
	ldd R2,y+10
	ldd R3,y+11
	sts 32771,R2
	.dbline 58
; 		 CMD = LCD_MODE_0+LCD_DOT8;
	ldi R24,1
	sts 32770,R24
	.dbline 59
;          for(j=y;j<y+16;j++)
	mov R22,R18
	xjmp L22
L19:
	.dbline 60
	.dbline 61
	sts 32769,R22
	.dbline 62
	sts 32768,R16
	.dbline 63
	movw R2,R16
	mov R2,R3
	clr R3
	sts 32768,R2
	.dbline 64
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,16
	mul R24,R10
	movw R4,R0
	ldi R24,<_ASC_MSK
	ldi R25,>_ASC_MSK
	add R4,R24
	adc R5,R25
	mov R30,R2
	clr R31
	add R30,R4
	adc R31,R5
	elpm R30,Z
	sts 32771,R30
	.dbline 65
L20:
	.dbline 59
	inc R22
L22:
	.dbline 59
	mov R24,R18
	subi R24,240    ; addi 16
	cp R22,R24
	brlo L19
	.dbline -2
L18:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r j 22 c
	.dbsym l back 10 i
	.dbsym l front 8 c
	.dbsym r dat 10 c
	.dbsym r y 18 c
	.dbsym r x 16 i
	.dbend
	.dbfunc e Dis_Ascii_Big _Dis_Ascii_Big fV
;              k -> R20
;              j -> R22
;           back -> y+10
;          front -> y+8
;            dat -> R10
;              y -> R18
;              x -> R16,R17
	.even
_Dis_Ascii_Big::
	xcall push_gset3
	ldd R10,y+6
	.dbline -1
	.dbline 71
;          {
;              Y_ADDR = j;
;              X_ADDR = x;
; 			 X_ADDR = x/256;
; 			 DAT = ASC_MSK[dat][k++];
;          }
; }
; /*
; 16*24 字符单个字符显示
; */
; void Dis_Ascii_Big(unsigned int x,unsigned char y,unsigned char dat,unsigned char front,unsigned back)
; {
	.dbline 73
;          unsigned char j,k;
; 		 k=0;
	clr R20
	.dbline 74
; 		 dat-=0x20;
	mov R24,R10
	subi R24,32
	mov R10,R24
	.dbline 75
; 		 CMD = LCD_MODE_1;
	ldi R24,2
	sts 32770,R24
	.dbline 76
; 		 DAT = front;
	ldd R0,y+8
	sts 32771,R0
	.dbline 77
; 		 CMD = LCD_MODE_2;
	ldi R24,4
	sts 32770,R24
	.dbline 78
; 		 DAT = back;
	ldd R2,y+10
	ldd R3,y+11
	sts 32771,R2
	.dbline 79
; 		 CMD = LCD_MODE_0+LCD_DOT8;
	ldi R24,1
	sts 32770,R24
	.dbline 80
; 		 for(j=y;j<y+24;j++)
	mov R22,R18
	xjmp L27
L24:
	.dbline 81
	.dbline 82
	sts 32769,R22
	.dbline 83
	sts 32768,R16
	.dbline 84
	movw R2,R16
	mov R2,R3
	clr R3
	sts 32768,R2
	.dbline 85
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,48
	mul R24,R10
	movw R4,R0
	ldi R24,<_Cdot1624
	ldi R25,>_Cdot1624
	add R4,R24
	adc R5,R25
	mov R30,R2
	clr R31
	add R30,R4
	adc R31,R5
	elpm R30,Z
	sts 32771,R30
	.dbline 86
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R24,48
	mul R24,R10
	movw R4,R0
	ldi R24,<_Cdot1624
	ldi R25,>_Cdot1624
	add R4,R24
	adc R5,R25
	mov R30,R2
	clr R31
	add R30,R4
	adc R31,R5
	elpm R30,Z
	sts 32771,R30
	.dbline 87
L25:
	.dbline 80
	inc R22
L27:
	.dbline 80
	mov R24,R18
	subi R24,232    ; addi 24
	cp R22,R24
	brlo L24
	.dbline -2
L23:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r j 22 c
	.dbsym l back 10 i
	.dbsym l front 8 c
	.dbsym r dat 10 c
	.dbsym r y 18 c
	.dbsym r x 16 i
	.dbend
	.dbfunc e Dis_Chinese _Dis_Chinese fV
;              k -> R20
;              j -> R22
;           back -> y+14
;          front -> y+12
;            dat -> R12,R13
;              y -> R14
;              x -> R10,R11
	.even
_Dis_Chinese::
	xcall push_gset5
	mov R14,R18
	movw R10,R16
	ldd R12,y+10
	ldd R13,y+11
	.dbline -1
	.dbline 90
; 		 {
; 		     Y_ADDR = j;
; 			 X_ADDR = x;
; 			 X_ADDR = x/256;
; 			 DAT = Cdot1624[dat][k++];
; 			 DAT = Cdot1624[dat][k++];
; 		 }
; }
; void Dis_Chinese(unsigned int x,unsigned char y,unsigned int dat,unsigned char front,unsigned back)
; {
	.dbline 92
;          unsigned char j,k;
;          k = 0;
	clr R20
	.dbline 93
; 		 CMD = LCD_MODE_1;
	ldi R24,2
	sts 32770,R24
	.dbline 94
; 		 DAT = front;
	ldd R0,y+12
	sts 32771,R0
	.dbline 95
; 		 CMD = LCD_MODE_2;
	ldi R24,4
	sts 32770,R24
	.dbline 96
; 		 DAT = back;
	ldd R2,y+14
	ldd R3,y+15
	sts 32771,R2
	.dbline 97
; 		 CMD = LCD_MODE_0+LCD_DOT8;
	ldi R24,1
	sts 32770,R24
	.dbline 98
;          for(j=y;j<y+16;j++)
	mov R22,R14
	xjmp L32
L29:
	.dbline 99
	.dbline 100
	sts 32769,R22
	.dbline 101
	sts 32768,R10
	.dbline 102
	movw R2,R10
	mov R2,R3
	clr R3
	sts 32768,R2
	.dbline 103
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R16,34
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R4,R16
	ldi R24,<_Cdotlib+2
	ldi R25,>_Cdotlib+2
	add R4,R24
	adc R5,R25
	mov R30,R2
	clr R31
	add R30,R4
	adc R31,R5
	elpm R30,Z
	sts 32771,R30
	.dbline 104
	mov R2,R20
	clr R3
	subi R20,255    ; addi 1
	ldi R16,34
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R4,R16
	ldi R24,<_Cdotlib+2
	ldi R25,>_Cdotlib+2
	add R4,R24
	adc R5,R25
	mov R30,R2
	clr R31
	add R30,R4
	adc R31,R5
	elpm R30,Z
	sts 32771,R30
	.dbline 105
L30:
	.dbline 98
	inc R22
L32:
	.dbline 98
	mov R24,R14
	subi R24,240    ; addi 16
	cp R22,R24
	brsh X0
	xjmp L29
X0:
	.dbline -2
L28:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r j 22 c
	.dbsym l back 14 i
	.dbsym l front 12 c
	.dbsym r dat 12 i
	.dbsym r y 14 c
	.dbsym r x 10 i
	.dbend
	.dbfunc e Display _Display fV
;           uLen -> R20
;              i -> R22
;            dat -> R10,R11
;           back -> R12
;          front -> R14
;           font -> y+18
;            ptr -> y+16
;              y -> R4
;              x -> R6,R7
	.even
_Display::
	xcall push_gset5
	mov R4,R18
	movw R6,R16
	sbiw R28,6
	ldd R14,y+20
	ldd R12,y+22
	.dbline -1
	.dbline 126
;          {
;              Y_ADDR = j;
;              X_ADDR = x;
; 			 X_ADDR = x/256;
; 			 DAT = Cdotlib[dat].Msk[k++];
; 			 DAT = Cdotlib[dat].Msk[k++];
;          }
; }
; /*
;      显示dat[32]数组中的汉字
; 	 输入:显示汉字位置,汉字点阵指针、着色
; 	 输入:无
; 	 编者:赫树开
; 	 日期:二○○六年三月十一日
; */
; 
; 
; /*=============================================================================
;   ASCII(8*16) 及 汉字(16*16) 混合字符串显示函数
;   输入参数约定:
;   x,y显示字符串的左上角xy坐标.x..8点一字节位置; y..一条扫描线定位
;   *ptr...字符串指针,本函数所指的是flash字串
;  cursor 为光标标志,1 为光标 0 为不是光标
;  返回参数:输出字串长度,留意汉字一个算两个
;  其它假定:调用时汉字必须在字库数组中已经存在,否则将输出不正确的结果
; ==============================================================================*/
; void Display(unsigned int x,unsigned char y,unsigned char *ptr,unsigned char font,unsigned char front,unsigned char back)
; {
	.dbline 127
;         unsigned char uLen,i=0;
	clr R22
	.dbline 129
;         unsigned int  dat;
;         uLen=0;
	clr R20
	xjmp L37
L36:
	.dbline 130
	.dbline 130
	inc R20
	.dbline 130
L37:
	.dbline 130
; 	    while ( (unsigned char)ptr[uLen] >= 0x10 ){uLen++;};	//探测字串长度
	mov R30,R20
	clr R31
	ldd R0,y+16
	ldd R1,y+17
	add R30,R0
	adc R31,R1
	ldd R24,z+0
	cpi R24,16
	brsh L36
	.dbline 130
	xjmp L40
L39:
	.dbline 133
; 		//uLen = strlen(ptr);
;         while(i<uLen)
;         {
	.dbline 135
; 
;              if((unsigned char)ptr[i]<128)   //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
	mov R30,R22
	clr R31
	ldd R0,y+16
	ldd R1,y+17
	add R30,R0
	adc R31,R1
	ldd R24,z+0
	cpi R24,128
	brlo X1
	xjmp L42
X1:
	.dbline 136
;              {  //此字符为ascii
	.dbline 137
; 			      if(font == BIG)
	ldd R24,y+18
	cpi R24,1
	brne L44
	.dbline 138
; 		          {
	.dbline 139
; 		              Dis_Ascii_Big(x,y,ptr[i],front,back);
	mov R2,R12
	clr R3
	std y+5,R3
	std y+4,R2
	std y+2,R14
	mov R30,R22
	clr R31
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	std y+0,R2
	mov R18,R4
	movw R16,R6
	push R16
	push R17
	push R18
	xcall _Dis_Ascii_Big
	pop R4
	pop R7
	pop R6
	.dbline 140
; 					  x+=16;
	movw R24,R6
	adiw R24,16
	movw R6,R24
	.dbline 141
; 					  i++;
	inc R22
	.dbline 142
; 					  if(x>319)
	ldi R24,319
	ldi R25,1
	cp R24,R6
	cpc R25,R7
	brlo X2
	xjmp L43
X2:
	.dbline 143
; 					  {
	.dbline 144
; 					      y+=24;
	mov R24,R4
	subi R24,232    ; addi 24
	mov R4,R24
	.dbline 145
; 						  x=0;
	clr R6
	clr R7
	.dbline 146
; 					  }			
	.dbline 147
; 		          }
	xjmp L43
L44:
	.dbline 149
; 				  else
; 				  {
	.dbline 150
;                       Dis_Ascii(x,y,ptr[i],front,back);
	mov R2,R12
	clr R3
	std y+5,R3
	std y+4,R2
	std y+2,R14
	mov R30,R22
	clr R31
	ldd R0,y+16
	ldd R1,y+17
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	std y+0,R2
	mov R18,R4
	movw R16,R6
	push R16
	push R17
	push R18
	xcall _Dis_Ascii
	pop R4
	pop R7
	pop R6
	.dbline 151
;                       x += 8;
	movw R24,R6
	adiw R24,8
	movw R6,R24
	.dbline 152
;                       i++;
	inc R22
	.dbline 153
;                       if(x>319)
	ldi R24,319
	ldi R25,1
	cp R24,R6
	cpc R25,R7
	brlo X3
	xjmp L43
X3:
	.dbline 154
;                       {
	.dbline 155
;                           y += 16;
	mov R24,R4
	subi R24,240    ; addi 16
	mov R4,R24
	.dbline 156
;                           x = 0;
	clr R6
	clr R7
	.dbline 157
;                       }
	.dbline 158
; 				  }
	.dbline 159
;              }
	xjmp L43
L42:
	.dbline 161
;              else  //此字符为汉字
;              {
	.dbline 162
;                   for(dat=0;dat<MAX_HZ;dat++)
	clr R10
	clr R11
	xjmp L53
L50:
	.dbline 163
;                   {
	.dbline 164
;                       if(Cdotlib[dat].Index[0] == (unsigned char)ptr[i])
	ldi R16,34
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_Cdotlib
	ldi R25,>_Cdotlib
	add R30,R24
	adc R31,R25
	elpm R30,Z
	mov R26,R22
	clr R27
	ldd R0,y+16
	ldd R1,y+17
	add R26,R0
	adc R27,R1
	ld R2,x
	cp R30,R2
	brne L54
	.dbline 165
;                       {
	.dbline 166
;                          if(Cdotlib[dat].Index[1] == (unsigned char)ptr[i+1])
	ldi R16,34
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_Cdotlib+1
	ldi R25,>_Cdotlib+1
	add R30,R24
	adc R31,R25
	elpm R30,Z
	mov R26,R22
	clr R27
	ldd R0,y+16
	ldd R1,y+17
	add R26,R0
	adc R27,R1
	adiw R26,1
	ld R2,x
	cp R30,R2
	brne L56
	.dbline 167
;                          {
	.dbline 168
;                              i+=2;
	subi R22,254    ; addi 2
	.dbline 169
;                              break;
	xjmp L52
L56:
	.dbline 171
;                          }
;                       }
L54:
	.dbline 172
L51:
	.dbline 162
	movw R24,R10
	adiw R24,1
	movw R10,R24
L53:
	.dbline 162
	movw R24,R10
	cpi R24,170
	ldi R30,0
	cpc R25,R30
	brsh X4
	xjmp L50
X4:
L52:
	.dbline 173
;                   }
;                   if(dat >= MAX_HZ)//若字库不存在该字则显示空白
	movw R24,R10
	cpi R24,170
	ldi R30,0
	cpc R25,R30
	brlo L59
	.dbline 174
;                   {
	.dbline 175
;                       i += 2;
	subi R22,254    ; addi 2
	.dbline 176
;                       dat = 0;
	clr R10
	clr R11
	.dbline 177
;                   }
L59:
	.dbline 178
;                   Dis_Chinese(x,y,dat,front,back);
	mov R2,R12
	clr R3
	std y+5,R3
	std y+4,R2
	std y+2,R14
	std y+1,R11
	std y+0,R10
	mov R18,R4
	movw R16,R6
	push R16
	push R17
	push R18
	xcall _Dis_Chinese
	pop R4
	pop R7
	pop R6

⌨️ 快捷键说明

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