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

📄 st7920.s

📁 ST7920液晶控制器的AVR程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	mov R30,R10
	clr R31
	add R30,R20
	adc R31,R21
	ldd R16,z+0
	xcall _WriteData
	.dbline 146
; 		i++;
	inc R10
	.dbline 147
; 		if( i%16 == LineDispCnt%16 ) 
	ldi R17,16
	mov R16,R12
	xcall mod8u
	mov R2,R16
	ldi R17,16
	mov R16,R10
	xcall mod8u
	cp R16,R2
	brne L33
X8:
	.dbline 148
; 		{
	.dbline 149
; 		   y++;
	inc R14
	.dbline 150
; 		   x = 0;
	clr R22
	.dbline 151
; 		   lcdSetXY(x,y);
	mov R18,R14
	mov R16,R22
	xcall _lcdSetXY
	.dbline 152
; 		}
L33:
	.dbline 153
; 	}
L31:
	.dbline 143
	mov R30,R10
	clr R31
	add R30,R20
	adc R31,R21
	ldd R2,z+0
	tst R2
	brne L30
X9:
	.dbline -2
L29:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r LineDispCnt 12 c
	.dbsym r i 10 c
	.dbsym r ptr 20 pc
	.dbsym r y 14 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e lcdDispChar _lcdDispChar fV
;              c -> y+2
;              y -> R12
;              x -> R10
	.even
_lcdDispChar::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 157
; }
; 
; void lcdDispChar( uchar x, uchar y, uchar c )
; {
	.dbline 158
;    lcdSetXY(x,y);
	mov R18,R12
	mov R16,R10
	xcall _lcdSetXY
	.dbline 159
;    WriteData(c);
	ldd R16,y+2
	xcall _WriteData
	.dbline -2
L35:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym l c 2 c
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e lcdDispGraphic _lcdDispGraphic fV
;      widthOver -> R20
;              i -> R14
;              j -> R10
;            ptr -> R22,R23
;              y -> R12
;              x -> y+14
;          width -> y+12
;         length -> y+10
	.even
_lcdDispGraphic::
	xcall push_arg4
	xcall push_xgsetF0FC
	ldd R12,y+16
	ldd R22,y+18
	ldd R23,y+19
	.dbline -1
	.dbline 163
; }
; 
; void lcdDispGraphic(uchar length,uchar width, uchar x,uchar y,const unsigned char *ptr)
; {   //x:横0-15   y:纵 0-63  
	.dbline 165
;    uchar i,j;
;    uchar widthOver=0;
	clr R20
	.dbline 166
;    if((width + x) > 16) {widthOver = (width + x - 16);width = (16-x);}  //超出屏幕
	ldd R2,y+12
	ldd R0,y+14
	add R2,R0
	ldi R24,16
	cp R24,R2
	brsh L37
X10:
	.dbline 166
	.dbline 166
	ldd R20,y+12
	add R20,R0
	subi R20,16
	.dbline 166
	sub R24,R0
	std y+12,R24
	.dbline 166
L37:
	.dbline 167
;    for(i = 0;i< length;i++)
	clr R14
	xjmp L42
L39:
	.dbline 168
;    {
	.dbline 169
;    	 	SetGraphicAddr(x,y);   				  //定位12864坐标
	mov R18,R12
	ldd R16,y+14
	xcall _SetGraphicAddr
	.dbline 170
; 		for(j = 0; j< width;j++)
	clr R10
	xjmp L46
L43:
	.dbline 171
;    	 	{
	.dbline 172
;    	 		WriteData(*ptr++);
	movw R2,R22
	subi R22,255  ; offset = 1
	sbci R23,255
	movw R30,R2
	lpm R16,Z
	xcall _WriteData
	.dbline 173
;    	 	}
L44:
	.dbline 170
	inc R10
L46:
	.dbline 170
	ldd R0,y+12
	cp R10,R0
	brlo L43
X11:
	.dbline 174
; 		if(widthOver)ptr +=widthOver;  
	tst R20
	breq L47
X12:
	.dbline 174
	mov R2,R20
	clr R3
	add R22,R2
	adc R23,R3
L47:
	.dbline 175
;    	 	y++;
	inc R12
	.dbline 176
;    }
L40:
	.dbline 167
	inc R14
L42:
	.dbline 167
	ldd R0,y+10
	cp R14,R0
	brlo L39
X13:
	.dbline -2
L36:
	.dbline 0 ; func end
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r widthOver 20 c
	.dbsym r i 14 c
	.dbsym r j 10 c
	.dbsym r ptr 22 pkc
	.dbsym r y 12 c
	.dbsym l x 14 c
	.dbsym l width 12 c
	.dbsym l length 10 c
	.dbend
	.dbfunc e ClearArea _ClearArea fV
;              i -> R10
;              j -> R22
;           back -> y+14
;              y -> R12
;              x -> y+10
;          width -> R14
;         length -> R20
	.even
_ClearArea::
	xcall push_xgsetF0FC
	mov R14,R18
	mov R20,R16
	ldd R12,y+12
	.dbline -1
	.dbline 181
; }
; 
; 
; void ClearArea(uchar length,uchar width, uchar x,uchar y,uchar back)
; {
	.dbline 182
;     uchar i=0,j=0;
	clr R10
	.dbline 182
	clr R22
	.dbline 183
;    	 for(i = 0;i< length;i++)
	xjmp L53
L50:
	.dbline 184
;    {
	.dbline 185
;    	 	SetGraphicAddr(x,y);   				  //定位12864坐标
	mov R18,R12
	ldd R16,y+10
	xcall _SetGraphicAddr
	.dbline 186
; 		for(j = 0; j< width;j++)
	clr R22
	xjmp L57
L54:
	.dbline 187
;    	 	{
	.dbline 188
;    	 		WriteData(back);
	ldd R16,y+14
	xcall _WriteData
	.dbline 189
;    	 	}
L55:
	.dbline 186
	inc R22
L57:
	.dbline 186
	cp R22,R14
	brlo L54
X14:
	.dbline 190
;    	 	y++;
	inc R12
	.dbline 191
;    }
L51:
	.dbline 183
	inc R10
L53:
	.dbline 183
	cp R10,R20
	brlo L50
X15:
	.dbline -2
L49:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r i 10 c
	.dbsym r j 22 c
	.dbsym l back 14 c
	.dbsym r y 12 c
	.dbsym l x 10 c
	.dbsym r width 14 c
	.dbsym r length 20 c
	.dbend
	.dbfunc e DrawLevelLing _DrawLevelLing fV
;             y1 -> <dead>
;             x1 -> y+7
;             y0 -> R12
;             x0 -> R10
	.even
_DrawLevelLing::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	sbiw R28,5
	.dbline -1
	.dbline 196
; }
; 
; 
; void DrawLevelLing( uchar x0,uchar y0, uchar x1,uchar y1)
; {
	.dbline 197
;  	 ClearArea(1,x1 - x0,x0,y0,0xff);
	ldi R24,255
	std y+4,R24
	std y+2,R12
	std y+0,R10
	ldd R18,y+7
	sub R18,R10
	ldi R16,1
	xcall _ClearArea
	.dbline -2
L58:
	.dbline 0 ; func end
	adiw R28,5
	ld R12,y+
	ld R10,y+
	ret
	.dbsym l y1 9 c
	.dbsym l x1 7 c
	.dbsym r y0 12 c
	.dbsym r x0 10 c
	.dbend
	.dbfunc e PicClear1 _PicClear1 fV
;         COUNT3 -> R20
;          LCD_X -> R22
;          LCD_Y -> R10
;         COUNT2 -> R12
;         COUNT1 -> R14
	.even
_PicClear1::
	xcall push_xgsetF0FC
	.dbline -1
	.dbline 205
; }
; 
; /**********************液晶文字显示相关程序END*************/
;                     
; 
; /**********************显示图形子程序START******************/
; void PicClear1(void)
; {
	.dbline 207
;    uchar COUNT3,COUNT2,COUNT1,LCD_X,LCD_Y;
;    COUNT3=0X02;
	ldi R20,2
	.dbline 208
;    LCD_X=0X80;
	ldi R22,128
	.dbline 209
;    for (;COUNT3!=0;COUNT3--)
	xjmp L63
L60:
	.dbline 210
;    {
	.dbline 211
;        LCD_Y=0X80;
	ldi R24,128
	mov R10,R24
	.dbline 212
;        COUNT2=0X20;//32
	ldi R24,32
	mov R12,R24
	.dbline 213
;        for (;COUNT2!=0;COUNT2--)
	xjmp L67
L64:
	.dbline 214
;        {
	.dbline 215
;          COUNT1=0X10;//16
	ldi R24,16
	mov R14,R24
	.dbline 216
;          SetGraphicAddr(LCD_X,LCD_Y);
	mov R18,R10
	mov R16,R22
	xcall _SetGraphicAddr
	.dbline 217
;          for (;COUNT1!=0;COUNT1--)
	xjmp L71
L68:
	.dbline 218
;           {
	.dbline 219
;             WriteData(0);
	clr R16
	xcall _WriteData
	.dbline 220
;           }
L69:
	.dbline 217
	dec R14
L71:
	.dbline 217
	tst R14
	brne L68
X16:
	.dbline 221
;          LCD_Y+=1;
	inc R10
	.dbline 222
;        }
L65:
	.dbline 213
	dec R12
L67:
	.dbline 213
	tst R12
	brne L64
X17:
	.dbline 223
;        LCD_X=0X88;
	ldi R22,136
	.dbline 224
;    }
L61:
	.dbline 209
	dec R20
L63:
	.dbline 209
	tst R20
	brne L60
X18:
	.dbline -2
L59:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r COUNT3 20 c
	.dbsym r LCD_X 22 c
	.dbsym r LCD_Y 10 c
	.dbsym r COUNT2 12 c
	.dbsym r COUNT1 14 c
	.dbend
	.dbfunc e Draw_Pic _Draw_Pic fV
;         temp_y -> R20
;         temp_x -> R22
;              i -> R10
;              j -> R14
;           Draw -> y+10
;              y -> R10
;              x -> R12
	.even
_Draw_Pic::
	xcall push_xgsetF0FC
	mov R10,R18
	mov R12,R16
	.dbline -1
	.dbline 241
; //   send_com(0x36);
; //   send_com(0x30);   //可省
; }
; 
; /********************************************************************
; 函 数 名:Draw_Pic  128*64
; 入口参数:x,y,*Draw
; 出口参数:无
; 建立日期:2007年8月26日
; 修改日期:
; 函数作用:
; 说    明:
; ********************************************************************/
; /*************************************************/
; 
; void Draw_Pic(uchar x, uchar y, const uchar *Draw)
; {
	.dbline 243
; 	uchar i, j, temp_x, temp_y;		//
; 	temp_x = x;						//
	mov R22,R12
	.dbline 244
; 	temp_y = y;						//
	mov R20,R10
	.dbline 245
; 	temp_x |= 0x80;					//
	ori R22,128
	.dbline 246
; 	temp_y |= 0x80;					//
	ori R20,128
	.dbline 247
; 	WriteCommand(0x01);//清屏
	ldi R16,1
	xcall _WriteCommand
	.dbline 248
; 	Delayus(200);   //清屏需要时间  1ms左右
	ldi R16,200
	ldi R17,0
	ldi R18,0
	ldi R19,0
	xcall _Delayus
	.dbline 249
; 	WriteCommand(0x36);
	ldi R16,54
	xcall _WriteCommand
	.dbline 250
; 	for(i=0;i<32;i++ )				//上半屏32行
	clr R10
	xjmp L76
L73:
	.dbline 251
; 	{
	.dbline 252
; 		WriteCommand(temp_y++); //设置绘图区的Y地址坐标0
	mov R2,R20
	subi R20,255    ; addi 1
	mov R16,R2
	xcall _WriteCommand
	.dbline 253
; 		WriteCommand(temp_x);  //设置绘图区的X地址坐标0
	mov R16,R22
	xcall _WriteCommand
	.dbline 254
; 		for(j=0;j<16;j++)			//
	clr R14
	xjmp L80
L77:
	.dbline 255
; 		{
	.dbline 256
; 			 WriteData(*Draw++);
	ldd R2,y+10
	ldd R3,y+11
	movw R24,R2
	adiw R24,1
	std y+11,R25
	std y+10,R24
	movw R30,R2
	lpm R16,Z
	xcall _WriteData
	.dbline 257
; 		}
L78:
	.dbline 254
	inc R14
L80:
	.dbline 254
	mov R24,R14
	cpi R24,16
	brlo L77
X19:
	.dbline 258
; 	}
L74:
	.dbline 250
	inc R10
L76:
	.dbline 250
	mov R24,R10
	cpi R24,32
	brlo L73
X20:
	.dbline 260
; 	
; 	temp_x = 0x88;					//
	ldi R22,136
	.dbline 261
; 	temp_y = 0x80;					//
	ldi R20,128
	.dbline 262
; 	j = 0; 	 						//
	clr R14
	.dbline 263
; 	for(;i<64;i++ )
	xjmp L84
L81:
	.dbline 264
; 	{
	.dbline 266
; 		
; 		WriteCommand(temp_y++); //设置绘图区的Y地址坐标0
	mov R12,R20
	subi R20,255    ; addi 1
	mov R16,R12
	xcall _WriteCommand
	.dbline 267
; 		WriteCommand(temp_x);  //设置绘图区的X地址坐标0
	mov R16,R22
	xcall _WriteCommand
	.dbline 268
; 		for(j=0;j<16;j++)
	clr R14
	xjmp L88
L85:
	.dbline 269
; 		{
	.dbline 270
; 			WriteData(*Draw++);
	ldd R12,y+10
	ldd R13,y+11
	movw R24,R12
	adiw R24,1
	std y+11,R25
	std y+10,R24
	movw R30,R12
	lpm R16,Z
	xcall _WriteData
	.dbline 271
; 		}
L86:
	.dbline 268
	inc R14
L88:
	.dbline 268
	mov R24,R14
	cpi R24,16
	brlo L85
X21:
	.dbline 272
; 	}
L82:
	.dbline 263
	inc R10
L84:
	.dbline 263
	mov R24,R10
	cpi R24,64
	brlo L81
X22:
	.dbline 273
; 	WriteCommand(0x30);//基本指令集,,绘图显示OFF 	 
	ldi R16,48
	xcall _WriteCommand
	.dbline -2
L72:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r temp_y 20 c
	.dbsym r temp_x 22 c
	.dbsym r i 10 c
	.dbsym r j 14 c
	.dbsym l Draw 10 pkc
	.dbsym r y 10 c
	.dbsym r x 12 c
	.dbend
; }
; /**********************显示图形子程序END******************/
; 

⌨️ 快捷键说明

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