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

📄 tft.lst

📁 mb90092 osd demo test 字符叠加程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0147) ** 全局变量: Lcd_Show_Buf  : 显示缓冲区
(0148) ** 调用模块: 无
(0149) ** 说明:
(0150) ** 注意:    
(0151) ** 日 期:   2005年12月12日
(0152) ********************************************************************************************************/
(0153) void Tft_Buf_Update(uint8 *Buf,uint8 len)
(0154) {
(0155)   uint8 i,j;
(0156)   uint16 *p;
(0157)   Tft_Buf_Clear();
    0105 DF84      RCALL	_Tft_Buf_Clear
(0158)   p=(uint16 *)Lcd_Show_Buf;
    0106 E84C      LDI	R20,0x8C
    0107 E050      LDI	R21,0
(0159)   for(i=0;i<Lcd_Lines;i++)
    0108 2766      CLR	R22
    0109 C033      RJMP	0x013D
(0160)    {
(0161)    WDR(); //喂狗
    010A 95A8      WDR
(0162) 	if(len!=0){ 
    010B 20AA      TST	R10
    010C F409      BNE	0x010E
    010D C02B      RJMP	0x0139
(0163) 	 for (j=0;j<Lcd_Characters && len!=0;j++)
    010E 24EE      CLR	R14
    010F C018      RJMP	0x0128
(0164) 	   {
(0165) 	   WDR(); //喂狗
    0110 95A8      WDR
(0166) 	  *p++=CharToAddr(Buf);
    0111 0186      MOVW	R16,R12
    0112 D09F      RCALL	_CharToAddr
    0113 01FA      MOVW	R30,R20
    0114 9301      ST	R16,Z+
    0115 9311      ST	R17,Z+
    0116 01AF      MOVW	R20,R30
(0167) 	   if (*Buf > 127) 
    0117 E78F      LDI	R24,0x7F
    0118 01F6      MOVW	R30,R12
    0119 8020      LDD	R2,Z+0
    011A 1582      CP	R24,R2
    011B F438      BCC	0x0123
(0168) 	       {Buf+=2;
    011C 01CF      MOVW	R24,R30
    011D 9602      ADIW	R24,2
    011E 016C      MOVW	R12,R24
(0169) 		   len-=2;
    011F 2D8A      MOV	R24,R10
    0120 5082      SUBI	R24,2
    0121 2EA8      MOV	R10,R24
(0170) 		   }
    0122 C004      RJMP	0x0127
(0171) 	    else
(0172) 		   {Buf++;
    0123 01C6      MOVW	R24,R12
    0124 9601      ADIW	R24,1
    0125 016C      MOVW	R12,R24
(0173) 		   len--;
    0126 94AA      DEC	R10
    0127 94E3      INC	R14
    0128 2D8E      MOV	R24,R14
    0129 3187      CPI	R24,0x17
    012A F410      BCC	0x012D
    012B 20AA      TST	R10
    012C F719      BNE	0x0110
(0174) 	       }
(0175) 	   }
(0176) 	  for (;j<Lcd_Characters && len==0;j++) 
    012D C005      RJMP	0x0133
(0177) 	     {
(0178) 		 WDR(); //喂狗
    012E 95A8      WDR
(0179) 	    Tft_Buf_XY_Clear(i,j);
    012F 2D2E      MOV	R18,R14
    0130 2F06      MOV	R16,R22
    0131 DF84      RCALL	_Tft_Buf_XY_Clear
    0132 94E3      INC	R14
    0133 2D8E      MOV	R24,R14
    0134 3187      CPI	R24,0x17
    0135 F410      BCC	0x0138
    0136 20AA      TST	R10
    0137 F3B1      BEQ	0x012E
(0180) 		}
(0181) 	  }
    0138 C003      RJMP	0x013C
(0182) 	 else
(0183) 	 	 {
(0184) 		 Tft_Buf_Line_Clear(i);
    0139 2F06      MOV	R16,R22
    013A DF60      RCALL	_Tft_Buf_Line_Clear
(0185) 		 WDR(); //喂狗
    013B 95A8      WDR
    013C 9563      INC	R22
    013D 3066      CPI	R22,6
    013E F408      BCC	0x0140
    013F CFCA      RJMP	0x010A
(0186) 		 } 
(0187) 	}
(0188)    Tft_Enable_Show_Flag=TRUE;
    0140 E081      LDI	R24,1
    0141 9380008B  STS	Tft_Enable_Show_Flag,R24
    0143 940E0370  CALL	pop_gset5
    0145 9508      RET
_Tft_Show_Update:
  Buf                  --> R20
  i                    --> R22
  j                    --> R10
    0146 940E0377  CALL	push_gset3
    0148 9729      SBIW	R28,0x9
(0189) }
(0190) /*
(0191) void Tft_Buf_Update(uint8 *Buf,uint8 len)
(0192) {
(0193)   uint8 i,j;
(0194)   for(i=0;i<Lcd_Lines;i++)
(0195)    {
(0196) 	if(len!=0){ 
(0197) 	 for (j=0;j<Lcd_Characters && len!=0;j++)
(0198) 	   {
(0199) 	  Lcd_Show_Buf[i][j]=*Buf++;
(0200) 	  len--;
(0201) 	   }
(0202) 	  for (;j<Lcd_Characters && len==0;j++) 
(0203) 	  Lcd_Show_Buf[i][j]=0;
(0204) 	  }
(0205) 	 else
(0206) 	 	 {
(0207) 		 for(j=0;j<Lcd_Characters;j++)
(0208) 		      Lcd_Show_Buf[i][j]=0;
(0209) 		 } 
(0210) 	}
(0211)    Tft_Enable_Show_Flag=TRUE;
(0212) }
(0213) 
(0214) */
(0215) 
(0216) /*********************************************************************************************************
(0217) ** 函数名称:Tft_Show_Update
(0218) ** 功能描述: 将显示缓冲区中的数据送mb90092显示,
(0219) ** 输 入:   
(0220) **           
(0221) ** 全局变量: Lcd_Show_Buf  : 显示缓冲区
(0222) ** 调用模块: CharToAddr():显示数据内码转换
(0223) ** 说明:    一次刷新Lcd_Lines*Lcd_Characters/2个字符
(0224) ** 注意:    在系统中作为一个任务刷新,可以通过修改B_COLOR C_COLOR 设置字体背景色和前景色
(0225) ** 日 期:   2005年12月12日
(0226) ********************************************************************************************************/
(0227) void Tft_Show_Update(void){
(0228) uint8 i,j=0;
    0149 24AA      CLR	R10
(0229) uint16 *Buf=(uint16*)Lcd_Show_Buf;
    014A E84C      LDI	R20,0x8C
    014B E050      LDI	R21,0
(0230) //uint16 charaddr;
(0231) if(Tft_Enable_Show_Flag)
    014C 9020008B  LDS	R2,Tft_Enable_Show_Flag
    014E 2022      TST	R2
    014F F111      BEQ	0x0172
(0232)   {
(0233)   Tft_Enable_Show_Flag=FALSE;
    0150 2422      CLR	R2
    0151 9220008B  STS	Tft_Enable_Show_Flag,R2
(0234)   for(i=0;i<Lcd_Lines;i++)
    0153 2766      CLR	R22
    0154 C01B      RJMP	0x0170
(0235)    {
(0236)    WDR(); //喂狗
    0155 95A8      WDR
(0237) 	 for (j=0;j<Lcd_Characters;j++)
    0156 24AA      CLR	R10
    0157 C014      RJMP	0x016C
(0238) 	   {
(0239) 	   WDR(); //喂狗
    0158 95A8      WDR
(0240) //	   charaddr=CharToAddr(Buf);
(0241) //	   if (*Buf > 127) 
(0242) //	       Buf+=2;
(0243) //	    else
(0244) //		   Buf++;
(0245) 	   MB90092_DisChar (j,i*2,*Buf++,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
    0159 2422      CLR	R2
    015A 8628      STD	Y+8,R2
    015B E087      LDI	R24,7
    015C 838E      STD	Y+6,R24
    015D E081      LDI	R24,1
    015E 838C      STD	Y+4,R24
    015F E082      LDI	R24,2
    0160 838A      STD	Y+2,R24
    0161 01FA      MOVW	R30,R20
    0162 9021      LD	R2,Z+
    0163 9031      LD	R3,Z+
    0164 01AF      MOVW	R20,R30
    0165 8239      STD	Y+1,R3
    0166 8228      STD	Y+0,R2
    0167 9F86      MUL	R24,R22
    0168 2D20      MOV	R18,R0
    0169 2D0A      MOV	R16,R10
    016A D126      RCALL	_MB90092_DisChar
    016B 94A3      INC	R10
    016C 2D8A      MOV	R24,R10
    016D 3187      CPI	R24,0x17
    016E F348      BCS	0x0158
    016F 9563      INC	R22
    0170 3066      CPI	R22,6
    0171 F318      BCS	0x0155
(0246) 	   }
(0247) 	}
(0248)   }
    0172 9629      ADIW	R28,0x9
    0173 940E036A  CALL	pop_gset3
    0175 9508      RET
_M90092_DisRow:
  charaddr             --> R20
  i                    --> R22
  c_color              --> R10
  b_color              --> R12
  charsize             --> R14
  len                  --> Y+23
  Row                  --> Y+21
  CChar                --> Y+19
    0176 940E0362  CALL	push_arg4
    0178 940E0373  CALL	push_gset5
    017A 9729      SBIW	R28,0x9
    017B 8CE9      LDD	R14,Y+25
    017C 8CCB      LDD	R12,Y+27
    017D 8CAD      LDD	R10,Y+29
(0249) }
(0250) /*
(0251) void Tft_Show_Update(void){
(0252) uint8 i,j=0;
(0253) uint8 *Buf=(uint8 *)Lcd_Show_Buf;
(0254) uint16 charaddr;
(0255) if(Tft_Enable_Show_Flag)
(0256)   {
(0257)   Tft_Enable_Show_Flag=FALSE;
(0258)   for(i=0;i<Lcd_Lines;i++)
(0259)    {
(0260) 	 for (j=0;j<Lcd_Characters/2;j++)
(0261) 	   {
(0262) 	   charaddr=CharToAddr(Buf);
(0263) 	   if (*Buf > 127) 
(0264) 	       Buf+=2;
(0265) 	    else
(0266) 		   Buf++;
(0267) 	   MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
(0268) 	   }
(0269) 	}
(0270)   }
(0271) }
(0272) */
(0273) /*
(0274) void Tft_Show_Update(void){
(0275) uint8 i,j=0;
(0276) uint8 *Buf;
(0277) uint16 charaddr;
(0278)   for(i=0;i<0x06;i++)
(0279)    {
(0280) 	if(len!=0){ 
(0281) 	 for (j=0;j<23 && len!=0;j++)
(0282) 	   {
(0283) 	   charaddr=CharToAddr(Buf);
(0284) 	   if (*Buf > 127) 
(0285) 	       Buf+=2;
(0286) 	    else
(0287) 		   Buf++;
(0288) 	   MB90092_DisChar (j,i*2,charaddr,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
(0289) 	   len--;
(0290) 	   }
(0291) 	  for (;j<23 && len==0;j++) 
(0292) 	           MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);  
(0293) 	  }
(0294) 	 else
(0295) 	 	 {
(0296) 		 for(j=0;j<23;j++)
(0297) 		       MB90092_DisChar (j,i*2,0,2,B_COLOR_BLUE,C_COLOR_WHITE,0);
(0298) 		 } 
(0299) 	}
(0300) }
(0301) 
(0302) 
(0303) */
(0304) 
(0305) /*********************************************************************************************************
(0306) ** 函数名称:M90092_DisRow
(0307) ** 功能描述: 显示一行字符
(0308) ** 输 入:   CChar:要新显示的数据,计算机内码非90092内码
(0309) **           Row:指定显示行
(0310) **           len:显示数据长度,全角半角都算一个
(0311) **           charsize:显示字体大小 00:standard 01:double width   02:double width double hight   03:quadruple width double hight     
(0312) **           b_color:指定显示行背景色
(0313) **           c_color:指定显示行前景色
(0314) ** 全局变量: 
(0315) ** 调用模块: CharToAddr():显示数据内码转换
(0316) ** 说明:    
(0317) ** 注意:   
(0318) ** 日 期:   2005年11月21日
(0319) ********************************************************************************************************/
(0320) 
(0321) void M90092_DisRow(uint8 *CChar,uint8 Row,uint8 len,uint8 charsize, uint8 b_color,uint8 c_color)
(0322) {
(0323) uint8 i;
(0324) uint16 charaddr;
(0325) 	if (Row>0x0B) return;                   //invlid row number
    017E E08B      LDI	R24,0xB
    017F 880D      LDD	R0,Y+21
    0180 1580      CP	R24,R0
    0181 F408      BCC	0x0183
    0182 C02A      RJMP	0x01AD
(0326) 	charaddr=CharToAddr(CChar);
    0183 890B      LDD	R16,Y+19
    0184 891C      LDD	R17,Y+20
    0185 D02C      RCALL	_CharToAddr
    0186 01A8      MOVW	R20,R16
(0327) 	for (i=0;i<0x17 && i<len;i++){
    0187 2766      CLR	R22
    0188 C01F      RJMP	0x01A8
(0328) 	WDR(); //喂狗
    0189 95A8      WDR
(0329) 	  MB90092_ClearXY (i,Row);
    018A 892D      LDD	R18,Y+21
    018B 2F06      MOV	R16,R22
    018C D09E      RCALL	_MB90092_ClearXY
(0330) 	  MB90092_DisChar(i,Row,charaddr,charsize,b_color,c_color,0);
    018D 2422      CLR	R2
    018E 8628      STD	Y+8,R2
    018F 82AE      STD	Y+6,R10
    0190 82CC      STD	Y+4,R12
    0191 82EA      STD	Y+2,R14
    0192 8359      STD	Y+1,R21
    0193 8348      STD	Y+0,R20
    0194 892D      LDD	R18,Y+21
    0195 2F06      MOV	R16,R22
    0196 D0FA      RCALL	_MB90092_DisChar
(0331)       if(*CChar >128) CChar+=2;
    0197 E880      LDI	R24,0x80
    0198 89EB      LDD	R30,Y+19
    0199 89FC      LDD	R31,Y+20
    019A 8020      LDD	R2,Z+0
    019B 1582      CP	R24,R2
    019C F428      BCC	0x01A2
    019D 01CF      MOVW	R24,R30
    019E 9602      ADIW	R24,2
    019F 8B9C      STD	Y+20,R25
    01A0 8B8B      STD	Y+19,R24
    01A1 C005      RJMP	0x01A7
(0332) 	  else CChar++;
    01A2 898B      LDD	R24,Y+19
    01A3 899C      LDD	R25,Y+20
    01A4 9601      ADIW	R24,1
    01A5 8B9C      STD	Y+20,R25
    01A6 8B8B      STD	Y+19,R24
    01A7 9563      INC	R22
    01A8 3167      CPI	R22,0x17
    01A9 F418      BCC	0x01AD
    01AA 880F      LDD	R0,Y+23
    01AB 1560      CP	R22,R0
    01AC F2E0      BCS	0x0189
    01AD 9629      ADIW	R28,0x9
    01AE 940E0370  CALL	pop_gset5
    01B0 9624      ADIW	R28,4
    01B1 9508      RET
_CharToAddr:
  tmp                  --> R10
  tmp0                 --> R20
  tmp1                 --> R22
  CChar                --> R16
    01B2 940E0377  CALL	push_gset3
(0333)       }
(0334) }
(0335) /*********************************************************************************************************
(0336) ** 函数名称: CharToAddr
(0337) ** 功能描述: 汉字内码转换ROM地址函数
(0338) ** 输 入:   cchar:要转换的内码(全角半角自动转换)
(0339) ** 输 出:   对应的uint16型的ROM内码          
(0340) ** 全局变量:
(0341) ** 调用模块: 
(0342) ** 说明:    
(0343) ** 注意:    

⌨️ 快捷键说明

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