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

📄 mb90092.s

📁 mb90092 osd demo test 字符叠加程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 235
;    {
	.dbline 236
;    WDR(); //喂狗
	wdr
	.dbline 237
; 	 for (j=0;j<Lcd_Characters;j++)
	clr R10
	xjmp L49
L46:
	.dbline 238
	.dbline 239
	wdr
	.dbline 245
	clr R2
	std y+8,R2
	ldi R24,7
	std y+6,R24
	ldi R24,1
	std y+4,R24
	ldi R24,2
	std y+2,R24
	movw R30,R20
	ld R2,Z+
	ld R3,Z+
	movw R20,R30
	std y+1,R3
	std y+0,R2
	mul R24,R22
	mov R18,R0
	mov R16,R10
	xcall _MB90092_DisChar
	.dbline 246
L47:
	.dbline 237
	inc R10
L49:
	.dbline 237
	mov R24,R10
	cpi R24,23
	brlo L46
	.dbline 247
L43:
	.dbline 234
	inc R22
L45:
	.dbline 234
	cpi R22,6
	brlo L42
	.dbline 248
L40:
	.dbline -2
L39:
	adiw R28,9
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Buf 20 pi
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbend
	.dbfunc e M90092_DisRow _M90092_DisRow fV
;       charaddr -> R20,R21
;              i -> R22
;        c_color -> R10
;        b_color -> R12
;       charsize -> R14
;            len -> y+23
;            Row -> y+21
;          CChar -> y+19
	.even
_M90092_DisRow::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,9
	ldd R14,y+25
	ldd R12,y+27
	ldd R10,y+29
	.dbline -1
	.dbline 322
; 	   {
; 	   WDR(); //喂狗
; //	   charaddr=CharToAddr(Buf);
; //	   if (*Buf > 127) 
; //	       Buf+=2;
; //	    else
; //		   Buf++;
; 	   MB90092_DisChar (j,i*2,*Buf++,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; 	   }
; 	}
;   }
; }
; /*
; void Tft_Show_Update(void){
; uint8 i,j=0;
; uint8 *Buf=(uint8 *)Lcd_Show_Buf;
; uint16 charaddr;
; if(Tft_Enable_Show_Flag)
;   {
;   Tft_Enable_Show_Flag=FALSE;
;   for(i=0;i<Lcd_Lines;i++)
;    {
; 	 for (j=0;j<Lcd_Characters/2;j++)
; 	   {
; 	   charaddr=CharToAddr(Buf);
; 	   if (*Buf > 127) 
; 	       Buf+=2;
; 	    else
; 		   Buf++;
; 	   MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; 	   }
; 	}
;   }
; }
; */
; /*
; void Tft_Show_Update(void){
; uint8 i,j=0;
; uint8 *Buf;
; uint16 charaddr;
;   for(i=0;i<0x06;i++)
;    {
; 	if(len!=0){ 
; 	 for (j=0;j<23 && len!=0;j++)
; 	   {
; 	   charaddr=CharToAddr(Buf);
; 	   if (*Buf > 127) 
; 	       Buf+=2;
; 	    else
; 		   Buf++;
; 	   MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; 	   len--;
; 	   }
; 	  for (;j<23 && len==0;j++) 
; 	           MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);  
; 	  }
; 	 else
; 	 	 {
; 		 for(j=0;j<23;j++)
; 		       MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
; 		 } 
; 	}
; }
; 
; 
; */
; 
; /*********************************************************************************************************
; ** 函数名称:M90092_DisRow
; ** 功能描述: 显示一行字符
; ** 输 入:   CChar:要新显示的数据,计算机内码非90092内码
; **           Row:指定显示行
; **           len:显示数据长度,全角半角都算一个
; **           charsize:显示字体大小 00:standard 01:double width   02:double width double hight   03:quadruple width double hight     
; **           b_color:指定显示行背景色
; **           c_color:指定显示行前景色
; ** 全局变量: 
; ** 调用模块: CharToAddr():显示数据内码转换
; ** 说明:    
; ** 注意:   
; ** 日 期:   2005年11月21日
; ********************************************************************************************************/
; 
; void M90092_DisRow(uint8 *CChar,uint8 Row,uint8 len,uint8 charsize, uint8 b_color,uint8 c_color)
; {
	.dbline 325
; uint8 i;
; uint16 charaddr;
; 	if (Row>0x0B) return;                   //invlid row number
	ldi R24,11
	ldd R0,y+21
	cp R24,R0
	brsh L51
	.dbline 325
	xjmp L50
L51:
	.dbline 326
; 	charaddr=CharToAddr(CChar);
	ldd R16,y+19
	ldd R17,y+20
	xcall _CharToAddr
	movw R20,R16
	.dbline 327
	clr R22
	xjmp L56
L53:
	.dbline 327
; 	for (i=0;i<0x17 && i<len;i++){
	.dbline 328
; 	WDR(); //喂狗
	wdr
	.dbline 329
; 	  MB90092_ClearXY (i,Row);
	ldd R18,y+21
	mov R16,R22
	xcall _MB90092_ClearXY
	.dbline 330
; 	  MB90092_DisChar(i,Row,charaddr,charsize,b_color,c_color,0);
	clr R2
	std y+8,R2
	std y+6,R10
	std y+4,R12
	std y+2,R14
	std y+1,R21
	std y+0,R20
	ldd R18,y+21
	mov R16,R22
	xcall _MB90092_DisChar
	.dbline 331
;       if(*CChar >128) CChar+=2;
	ldi R24,128
	ldd R30,y+19
	ldd R31,y+20
	ldd R2,z+0
	cp R24,R2
	brsh L57
	.dbline 331
	movw R24,R30
	adiw R24,2
	std y+20,R25
	std y+19,R24
	xjmp L58
L57:
	.dbline 332
; 	  else CChar++;
	ldd R24,y+19
	ldd R25,y+20
	adiw R24,1
	std y+20,R25
	std y+19,R24
L58:
	.dbline 333
L54:
	.dbline 327
	inc R22
L56:
	.dbline 327
	cpi R22,23
	brsh L59
	ldd R0,y+23
	cp R22,R0
	brlo L53
L59:
	.dbline -2
L50:
	adiw R28,9
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r charaddr 20 i
	.dbsym r i 22 c
	.dbsym r c_color 10 c
	.dbsym r b_color 12 c
	.dbsym r charsize 14 c
	.dbsym l len 23 c
	.dbsym l Row 21 c
	.dbsym l CChar 19 pc
	.dbend
	.dbfunc e CharToAddr _CharToAddr fi
;            tmp -> R10,R11
;           tmp0 -> R20
;           tmp1 -> R22
;          CChar -> R16,R17
	.even
_CharToAddr::
	xcall push_gset3
	.dbline -1
	.dbline 347
;       }
; }
; /*********************************************************************************************************
; ** 函数名称: CharToAddr
; ** 功能描述: 汉字内码转换ROM地址函数
; ** 输 入:   cchar:要转换的内码(全角半角自动转换)
; ** 输 出:   对应的uint16型的ROM内码          
; ** 全局变量:
; ** 调用模块: 
; ** 说明:    
; ** 注意:    
; ** 日 期:   2005年11月12日
; ********************************************************************************************************/
; 
; uint16 CharToAddr(uint8 *CChar){
	.dbline 350
; uint8 tmp1,tmp0;
; uint16 tmp;
; WDR(); //喂狗
	wdr
	.dbline 351
;  if (*CChar >= 0xb0) {
	movw R30,R16
	ldd R24,z+0
	cpi R24,176
	brlo L61
	.dbline 351
	.dbline 352
;      tmp1=*CChar-0xa1-6;
	ldd R22,z+0
	subi R22,161
	subi R22,6
	.dbline 353
; 	 CChar++;
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 354
;      tmp0=*CChar-0xa1;
	movw R30,R16
	ldd R20,z+0
	subi R20,161
	.dbline 355
;      }
	xjmp L62
L61:
	.dbline 357
;  else 
;       if(*CChar>=0xa1 && *CChar<0xaa)
	movw R30,R16
	ldd R2,z+0
	clr R3
	mov R24,R2
	cpi R24,161
	brlo L63
	cpi R24,170
	brsh L63
	.dbline 358
; 	    {
	.dbline 359
;      	tmp1=*CChar-0xa1;
	ldd R22,z+0
	subi R22,161
	.dbline 360
; 	 	CChar++;
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 361
;      	tmp0=*CChar-0xa1;
	movw R30,R16
	ldd R20,z+0
	subi R20,161
	.dbline 362
; 		}
	xjmp L64
L63:
	.dbline 364
; 	  else  
; 	      if(*CChar <127 && *CChar >0x20) {
	movw R30,R16
	ldd R2,z+0
	clr R3
	mov R24,R2
	cpi R24,127
	brsh L65
	ldi R24,32
	cp R24,R2
	brsh L65
	.dbline 364
	.dbline 365
;               tmp=(*CChar-0x20)+0xa3a0;
	ldd R24,z+0
	clr R25
	sbiw R24,32
	subi R24,96  ; offset = 41888
	sbci R25,92
	movw R10,R24
	.dbline 366
; 	 		  tmp1=(uint8)(tmp>>8)-0xa1;
	movw R22,R24
	mov R22,R23
	clr R23
	subi R22,161
	.dbline 367
; 	 		  tmp0=(uint8)tmp-0xa1;
	mov R20,R24
	subi R20,161
	.dbline 368
; 	 		  }
	xjmp L66
L65:
	.dbline 370
; 		  else
; 	   	  	  {
	.dbline 371
; 	   		  tmp0=0;
	clr R20
	.dbline 372
; 	   		  tmp1=0;
	clr R22
	.dbline 373
; 	   		  }
L66:
L64:
L62:
	.dbline 374
; return (tmp1*94+tmp0);
	ldi R24,94
	mul R24,R22
	movw R16,R0
	mov R2,R20
	clr R3
	add R16,R2
	adc R17,R3
	.dbline -2
L60:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r tmp 10 i
	.dbsym r tmp0 20 c
	.dbsym r tmp1 22 c
	.dbsym r CChar 16 pc
	.dbend
	.dbfunc e Delay_ms _Delay_ms fV
;              k -> R20,R21
;              i -> R22,R23
;              j -> R10,R11
;             ms -> R16,R17
	.even
_Delay_ms::
	xcall push_gset3
	.dbline -1
	.dbline 383
; }
; 
; /*********************************************************************************************************
; ** 函数名称: Delay_ms
; ** 功能描述: 延时ms毫秒 (不精确)
; ** 日 期:   2004年12月29日
; ********************************************************************************************************/
; void Delay_ms (uint16 ms)
; {
	.dbline 385
; 	uint16 i,j,k;
; 	for(k=0; k<ms; k++)
	clr R20
	clr R21
	xjmp L71
L68:
	.dbline 386
;       for(i=48; i>0; i--)
	ldi R22,48
	ldi R23,0
	xjmp L75
L72:
	.dbline 387
	ldi R24,10
	ldi R25,0
	movw R10,R24
	xjmp L79
L76:
	.dbline 387
	wdr
L77:
	.dbline 387
	movw R24,R10
	sbiw R24,1
	movw R10,R24
L79:
	.dbline 387
	tst R10
	brne L76
	tst R11
	brne L76
X2:
L73:
	.dbline 386
	subi R22,1
	sbci R23,0
L75:
	.dbline 386
	cpi R22,0
	cpc R22,R23
	brne L72
X3:
L69:
	.dbline 385
	subi R20,255  ; offset = 1
	sbci R21,255
L71:
	.dbline 385
	cp R20,R16
	cpc R21,R17
	brlo L68
	.dbline -2
L67:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 i
	.dbsym r i 22 i
	.dbsym r j 10 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e MB90092_WriteByte _MB90092_WriteByte fV
;              i -> R20
;          _data -> R16
	.even
_MB90092_WriteByte::
	xcall push_gset1
	.dbline -1
	.dbline 396
;         for(j=10; j>0; j--)WDR(); //喂狗;
; }
; 
; /*********************************************************************************************************
; ** 函数名称: MB90092_WriteByte
; ** 功能描述: 向MB90092 写一个字节数据
; ** 日 期:   2004年12月29日
; ********************************************************************************************************/
; void MB90092_WriteByte (uint8 _data)
; {
	.dbline 398
; 	uint8 i;
;     Lcd_CS_Dis;
	cbi 0x18,7
	.dbline 399
	ldi R20,8
	xjmp L84
L81:
	.dbline 399
; 	for (i=8;i>0;i--){
	.dbline 400
; 	WDR(); //喂狗
	wdr
	.dbline 401
; 	  Lcd_CLK_Dis;
	cbi 0x18,6
	.dbline 402
; 	  if (_data & 0x01) 
	sbrs R16,0
	rjmp L85
	.dbline 403
; 	     Lcd_SIN_En;
	sbi 0x18,5
	xjmp L86
L85:
	.dbline 405
; 	  else
; 	     Lcd_SIN_Dis;
	cbi 0x18,5
L86:
	.dbline 406
	sbi 0x18,6
	.dbline 407
	lsr R16
	.dbline 408
L82:
	.dbline 399
	dec R20
L84:
	.dbline 399
	clr R2
	cp R2,R20
	brlo L81
	.dbline 409
; 	  Lcd_CLK_En;
; 	  _data=_data>>1;	
;     }
; 	Lcd_CS_En;
	sbi 0x18,7
	.dbline -2
L80:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r _data 16 c
	.dbend
	.dbfunc e MB90092_ClearXY _MB90092_ClearXY fV
;          byte2 -> R20
;          byte1 -> R22
;              y -> R10
;              x -> R20
	.even
_MB90092_ClearXY::
	xcall push_gset3
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 418
; }
; 
; /*********************************************************************************************************
; ** 函数名称: MB90092_ClearXY
; ** 功能描述: 清掉屏幕上面坐标(x,y)处的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
; ** 日 期:   2004年12月29日
; ********************************************************************************************************/
; void  MB90092_ClearXY (uint8 x,uint8 y)
; {
	.dbline 421
	ldi R24,23
	cp R24,R20
	brlo L90
	ldi R24,11
	cp R24,R10
	brsh L88
L90:
	.dbline 421
; 	uint8 byte1,byte2;
; 	
; 	if (x>0x17||y>0x0B) return;           //invalid col number or row number
	xjmp L87
L88:
	.dbline 423
; 
; 	byte1=((y>>2)&0x3)+0x80;
	mov R22,R10
	lsr R22
	lsr R22
	andi R22,3
	subi R22,128    ; addi 128
	.dbline 424
; 	byte2=((y<<5)&0x60)+x;
	mov R24,R10
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	andi R24,96
	add R24,R20
	mov R20,R24
	.dbline 427
; 
; 
; 	MB90092_WriteByte(byte1);             //command 0,设置写入地址,行和列
	mov R16,R22
	xcall _MB90092_WriteByte
	.dbline 428
; 	MB90092_WriteByte(byte2);
	mov R16,R20
	xcall _MB90092_WriteByte
	.dbline 430
; 

⌨️ 快捷键说明

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