📄 tft.lst
字号:
(0344) ** 日 期: 2005年11月12日
(0345) ********************************************************************************************************/
(0346)
(0347) uint16 CharToAddr(uint8 *CChar){
(0348) uint8 tmp1,tmp0;
(0349) uint16 tmp;
(0350) WDR(); //喂狗
01B4 95A8 WDR
(0351) if (*CChar >= 0xb0) {
01B5 01F8 MOVW R30,R16
01B6 8180 LDD R24,Z+0
01B7 3B80 CPI R24,0xB0
01B8 F048 BCS 0x01C2
(0352) tmp1=*CChar-0xa1-6;
01B9 8160 LDD R22,Z+0
01BA 5A61 SUBI R22,0xA1
01BB 5066 SUBI R22,6
(0353) CChar++;
01BC 5F0F SUBI R16,0xFF
01BD 4F1F SBCI R17,0xFF
(0354) tmp0=*CChar-0xa1;
01BE 01F8 MOVW R30,R16
01BF 8140 LDD R20,Z+0
01C0 5A41 SUBI R20,0xA1
(0355) }
01C1 C028 RJMP 0x01EA
(0356) else
(0357) if(*CChar>=0xa1 && *CChar<0xaa)
01C2 01F8 MOVW R30,R16
01C3 8020 LDD R2,Z+0
01C4 2433 CLR R3
01C5 2D82 MOV R24,R2
01C6 3A81 CPI R24,0xA1
01C7 F050 BCS 0x01D2
01C8 3A8A CPI R24,0xAA
01C9 F440 BCC 0x01D2
(0358) {
(0359) tmp1=*CChar-0xa1;
01CA 8160 LDD R22,Z+0
01CB 5A61 SUBI R22,0xA1
(0360) CChar++;
01CC 5F0F SUBI R16,0xFF
01CD 4F1F SBCI R17,0xFF
(0361) tmp0=*CChar-0xa1;
01CE 01F8 MOVW R30,R16
01CF 8140 LDD R20,Z+0
01D0 5A41 SUBI R20,0xA1
(0362) }
01D1 C018 RJMP 0x01EA
(0363) else
(0364) if(*CChar <127 && *CChar >0x20) {
01D2 01F8 MOVW R30,R16
01D3 8020 LDD R2,Z+0
01D4 2433 CLR R3
01D5 2D82 MOV R24,R2
01D6 378F CPI R24,0x7F
01D7 F480 BCC 0x01E8
01D8 E280 LDI R24,0x20
01D9 1582 CP R24,R2
01DA F468 BCC 0x01E8
(0365) tmp=(*CChar-0x20)+0xa3a0;
01DB 8180 LDD R24,Z+0
01DC 2799 CLR R25
01DD 9780 SBIW R24,0x20
01DE 5680 SUBI R24,0x60
01DF 459C SBCI R25,0x5C
01E0 015C MOVW R10,R24
(0366) tmp1=(uint8)(tmp>>8)-0xa1;
01E1 01BC MOVW R22,R24
01E2 2F67 MOV R22,R23
01E3 2777 CLR R23
01E4 5A61 SUBI R22,0xA1
(0367) tmp0=(uint8)tmp-0xa1;
01E5 2F48 MOV R20,R24
01E6 5A41 SUBI R20,0xA1
(0368) }
01E7 C002 RJMP 0x01EA
(0369) else
(0370) {
(0371) tmp0=0;
01E8 2744 CLR R20
(0372) tmp1=0;
01E9 2766 CLR R22
(0373) }
(0374) return (tmp1*94+tmp0);
01EA E58E LDI R24,0x5E
01EB 9F86 MUL R24,R22
01EC 0180 MOVW R16,R0
01ED 2E24 MOV R2,R20
01EE 2433 CLR R3
01EF 0D02 ADD R16,R2
01F0 1D13 ADC R17,R3
01F1 940E036A CALL pop_gset3
01F3 9508 RET
_Delay_ms:
k --> R20
i --> R22
j --> R10
ms --> R16
01F4 940E0377 CALL push_gset3
(0375) }
(0376)
(0377) /*********************************************************************************************************
(0378) ** 函数名称: Delay_ms
(0379) ** 功能描述: 延时ms毫秒 (不精确)
(0380) ** 日 期: 2004年12月29日
(0381) ********************************************************************************************************/
(0382) void Delay_ms (uint16 ms)
(0383) {
(0384) uint16 i,j,k;
(0385) for(k=0; k<ms; k++)
01F6 2744 CLR R20
01F7 2755 CLR R21
01F8 C016 RJMP 0x020F
(0386) for(i=48; i>0; i--)
01F9 E360 LDI R22,0x30
01FA E070 LDI R23,0
01FB C00E RJMP 0x020A
(0387) for(j=10; j>0; j--)WDR(); //喂狗;
01FC E08A LDI R24,0xA
01FD E090 LDI R25,0
01FE 015C MOVW R10,R24
01FF C004 RJMP 0x0204
0200 95A8 WDR
0201 01C5 MOVW R24,R10
0202 9701 SBIW R24,1
0203 015C MOVW R10,R24
0204 20AA TST R10
0205 F7D1 BNE 0x0200
0206 20BB TST R11
0207 F7C1 BNE 0x0200
0208 5061 SUBI R22,1
0209 4070 SBCI R23,0
020A 3060 CPI R22,0
020B 0767 CPC R22,R23
020C F779 BNE 0x01FC
020D 5F4F SUBI R20,0xFF
020E 4F5F SBCI R21,0xFF
020F 1740 CP R20,R16
0210 0751 CPC R21,R17
0211 F338 BCS 0x01F9
0212 940E036A CALL pop_gset3
0214 9508 RET
_MB90092_WriteByte:
i --> R20
_data --> R16
0215 940E037B CALL push_gset1
(0388) }
(0389)
(0390) /*********************************************************************************************************
(0391) ** 函数名称: MB90092_WriteByte
(0392) ** 功能描述: 向MB90092 写一个字节数据
(0393) ** 日 期: 2004年12月29日
(0394) ********************************************************************************************************/
(0395) void MB90092_WriteByte (uint8 _data)
(0396) {
(0397) uint8 i;
(0398) Lcd_CS_Dis;
0217 98C7 CBI 0x18,7
(0399) for (i=8;i>0;i--){
0218 E048 LDI R20,0x8
0219 C00A RJMP 0x0224
(0400) WDR(); //喂狗
021A 95A8 WDR
(0401) Lcd_CLK_Dis;
021B 98C6 CBI 0x18,6
(0402) if (_data & 0x01)
021C FF00 SBRS R16,0
021D C002 RJMP 0x0220
(0403) Lcd_SIN_En;
021E 9AC5 SBI 0x18,5
021F C001 RJMP 0x0221
(0404) else
(0405) Lcd_SIN_Dis;
0220 98C5 CBI 0x18,5
(0406) Lcd_CLK_En;
0221 9AC6 SBI 0x18,6
(0407) _data=_data>>1;
0222 9506 LSR R16
0223 954A DEC R20
0224 2422 CLR R2
0225 1624 CP R2,R20
0226 F398 BCS 0x021A
(0408) }
(0409) Lcd_CS_En;
0227 9AC7 SBI 0x18,7
0228 940E037E CALL pop_gset1
022A 9508 RET
_MB90092_ClearXY:
byte2 --> R20
byte1 --> R22
y --> R10
x --> R20
022B 940E0377 CALL push_gset3
022D 2EA2 MOV R10,R18
022E 2F40 MOV R20,R16
(0410) }
(0411)
(0412) /*********************************************************************************************************
(0413) ** 函数名称: MB90092_ClearXY
(0414) ** 功能描述: 清掉屏幕上面坐标(x,y)处的字符,y=0x00~0x0B and x=0x00~0x17 for main screen
(0415) ** 日 期: 2004年12月29日
(0416) ********************************************************************************************************/
(0417) void MB90092_ClearXY (uint8 x,uint8 y)
(0418) {
(0419) uint8 byte1,byte2;
(0420)
(0421) if (x>0x17||y>0x0B) return; //invalid col number or row number
022F E187 LDI R24,0x17
0230 1784 CP R24,R20
0231 F018 BCS 0x0235
0232 E08B LDI R24,0xB
0233 158A CP R24,R10
0234 F408 BCC 0x0236
0235 C01A RJMP 0x0250
(0422)
(0423) byte1=((y>>2)&0x3)+0x80;
0236 2D6A MOV R22,R10
0237 9566 LSR R22
0238 9566 LSR R22
0239 7063 ANDI R22,3
023A 5860 SUBI R22,0x80
(0424) byte2=((y<<5)&0x60)+x;
023B 2D8A MOV R24,R10
023C 0F88 LSL R24
023D 0F88 LSL R24
023E 0F88 LSL R24
023F 0F88 LSL R24
0240 0F88 LSL R24
0241 7680 ANDI R24,0x60
0242 0F84 ADD R24,R20
0243 2F48 MOV R20,R24
(0425)
(0426)
(0427) MB90092_WriteByte(byte1); //command 0,设置写入地址,行和列
0244 2F06 MOV R16,R22
0245 DFCF RCALL _MB90092_WriteByte
(0428) MB90092_WriteByte(byte2);
0246 2F04 MOV R16,R20
0247 DFCD RCALL _MB90092_WriteByte
(0429)
(0430) MB90092_WriteByte(0x88); //command1-1,定义字符颜色,背景颜色
0248 E808 LDI R16,0x88
0249 DFCB RCALL _MB90092_WriteByte
(0431) MB90092_WriteByte(0x00);
024A 2700 CLR R16
024B DFC9 RCALL _MB90092_WriteByte
(0432)
(0433) MB90092_WriteByte(0x90+0/128); //command2-1,写入一个空格字符,地址62为空格符点阵
024C E900 LDI R16,0x90
024D DFC7 RCALL _MB90092_WriteByte
(0434) MB90092_WriteByte(0%128);
024E 2700 CLR R16
024F DFC5 RCALL _MB90092_WriteByte
0250 940E036A CALL pop_gset3
0252 9508 RET
_MB90092_ClearRow:
x --> R20
y --> R22
0253 940E0379 CALL push_gset2
0255 2F60 MOV R22,R16
(0435) }
(0436)
(0437) /*********************************************************************************************************
(0438) ** 函数名称: MB90092_ClearRow
(0439) ** 功能描述: 清掉屏幕上面的第y行字符,y=0x00~0x0B for main screen
(0440) ** 日 期: 2004年12月29日
(0441) ********************************************************************************************************/
(0442) void MB90092_ClearRow (uint8 y)
(0443) {
(0444) uint8 x;
(0445)
(0446) if (y>0x0B) return; //invlid row number
0256 E08B LDI R24,0xB
0257 1786 CP R24,R22
0258 F408 BCC 0x025A
0259 C009 RJMP 0x0263
(0447)
(0448) for (x=0;x<0x18;x++)
025A 2744 CLR R20
025B C005 RJMP 0x0261
(0449) {
(0450) WDR(); //喂狗
025C 95A8 WDR
(0451) MB90092_ClearXY (x,y);
025D 2F26 MOV R18,R22
025E 2F04 MOV R16,R20
025F DFCB RCALL _MB90092_ClearXY
0260 9543 INC R20
0261 3148 CPI R20,0x18
0262 F3C8 BCS 0x025C
0263 940E0367 CALL pop_gset2
0265 9508 RET
_MB90092_ClearScreen:
i --> R20
0266 940E037B CALL push_gset1
(0452) }
(0453) }
(0454)
(0455) /*********************************************************************************************************
(0456) ** 函数名称: MB90092_ClearScreen
(0457) ** 功能描述: 清屏
(0458) ** 日 期: 2004年12月29日
(0459) ********************************************************************************************************/
(0460) void MB90092_ClearScreen (void)
(0461) {
(0462) uint8 i;
(0463) for (i=0;i<0x0C;i++)
0268 2744 CLR R20
0269 C004 RJMP 0x026E
(0464) {WDR(); //喂狗
026A 95A8 WDR
(0465) MB90092_ClearRow (i);
026B 2F04 MOV R16,R20
026C DFE6 RCALL _MB90092_ClearRow
026D 9543 INC R20
026E 304C CPI R20,0xC
026F F3D0 BCS 0x026A
0270 940E037E CALL pop_gset1
0272 9508 RET
_MB90092_DisColor:
temp2 --> R20
temp1 --> R22
y --> R20
0273 940E0379 CALL push_gset2
0275 2F40 MOV R20,R16
(0466) }
(0467) }
(0468)
(0469) /*********************************************************************************************************
(0470) ** 函数名称: MB90092_DisColor
(0471) ** 功能描述: MB90092颜色初始化
(0472) ** 日 期: 2004年12月29日
(0473) ********************************************************************************************************/
(0474) void MB90092_DisColor (uint8 y)
(0475) {
(0476) uint8 temp1,temp2;
(0477)
(0478) temp1=((y>>2)&0x3)+0x84;
0276 2F64 MOV R22,R20
0277 9566 LSR R22
0278 9566 LSR R22
0279 7063 ANDI R22,3
027A 576C SUBI R22,0x7C
(0479) temp2=((y<<5)&0x60)+1;
027B 0F44 LSL R20
027C 0F44 LSL R20
027D 0F44 LSL R20
027E 0F44 LSL R20
027F 0F44 LSL R20
0280 7640 ANDI R20,0x60
0281 5F4F SUBI R20,0xFF
(0480)
(0481) MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
0282 2F06 MOV R16,R22
0283 DF91 RCALL _MB90092_WriteByte
(0482) MB90092_WriteByte(temp2);
0284 2F04 MOV R16,R20
0285 DF8F RCALL _MB90092_WriteByte
(0483)
(0484) MB90092_WriteByte(0x88); //ff控制是否特显
0286 E808 LDI R16,0x88
0287 DF8D RCALL _MB90092_WriteByte
(0485) MB90092_WriteByte(0x00); //command1-1,设置字符颜色,背景颜色
0288 2700 CLR R16
0289 DF8B RCALL _MB90092_WriteByte
(0486)
(0487) MB90092_WriteByte(0x90); //command2-1,设置字符点阵在外rom的地址
028A E900 LDI R16,0x90
028B DF89 RCALL _MB90092_WriteByte
(0488) MB90092_WriteByte(0x00);
028C 2700 CLR R16
028D DF87 RCALL _MB90092_WriteByte
028E 940E0367 CALL pop_gset2
0290 9508 RET
_MB90092_DisChar:
mc --> R22
mb --> R12
ma --> R14
color --> R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -