📄 tft.lst
字号:
(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 + -