📄 tft.lst
字号:
temp2 --> R10
temp1 --> R12
ff --> Y+18
cc --> Y+16
bc --> Y+14
mul --> Y+12
addr --> R20
y --> R22
x --> R10
0291 940E0373 CALL push_gset5
0293 2F62 MOV R22,R18
0294 2EA0 MOV R10,R16
0295 854A LDD R20,Y+10
0296 855B LDD R21,Y+11
(0489) }
(0490)
(0491) /*********************************************************************************************************
(0492) ** 函数名称: MB90092_DisChar
(0493) ** 功能描述: 在屏幕坐标(x,y)处显示一个字符,该字符的点阵存储地址为addr,为一24x32的矩形区域
(0494) ** 参 数: x,y为屏幕坐标,addr为字符点阵在外rom的存储地址,mul为字符尺寸,bc为字符背景颜色,
(0495) cc为字符颜色,ff控制是否特显.
(0496) ** 日 期: 2004年12月29日
(0497) ********************************************************************************************************/
(0498) void MB90092_DisChar (uint8 x,uint8 y,uint16 addr,uint8 mul,uint8 bc,uint8 cc,uint8 ff)
(0499) {
(0500) uint8 temp1,temp2,color,ma,mb,mc;
(0501) if (x>0x17||y>0x0B) return; //invalid col number or row number
0297 E187 LDI R24,0x17
0298 158A CP R24,R10
0299 F018 BCS 0x029D
029A E08B LDI R24,0xB
029B 1786 CP R24,R22
029C F408 BCC 0x029E
029D C068 RJMP 0x0306
(0502)
(0503) MB90092_ClearXY (x,y);
029E 2F26 MOV R18,R22
029F 2D0A MOV R16,R10
02A0 DF8A RCALL _MB90092_ClearXY
(0504)
(0505) temp1=((y>>2)&0x3)+0x80;
02A1 2F86 MOV R24,R22
02A2 9586 LSR R24
02A3 9586 LSR R24
02A4 7083 ANDI R24,3
02A5 5880 SUBI R24,0x80
02A6 2EC8 MOV R12,R24
(0506) temp2=((y<<5)&0x60)+x;
02A7 2F86 MOV R24,R22
02A8 0F88 LSL R24
02A9 0F88 LSL R24
02AA 0F88 LSL R24
02AB 0F88 LSL R24
02AC 0F88 LSL R24
02AD 7680 ANDI R24,0x60
02AE 0D8A ADD R24,R10
02AF 2EA8 MOV R10,R24
(0507)
(0508) MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
02B0 2D0C MOV R16,R12
02B1 DF63 RCALL _MB90092_WriteByte
(0509) MB90092_WriteByte(temp2);
02B2 2D0A MOV R16,R10
02B3 DF61 RCALL _MB90092_WriteByte
(0510)
(0511) MB90092_WriteByte(0xB0|mul); //command 6,mul->字符尺寸控制(datasheel82),设置一整行
02B4 850C LDD R16,Y+12
02B5 6B00 ORI R16,0xB0
02B6 DF5E RCALL _MB90092_WriteByte
(0512) MB90092_WriteByte(0x20|y);
02B7 2F06 MOV R16,R22
02B8 6200 ORI R16,0x20
02B9 DF5B RCALL _MB90092_WriteByte
(0513)
(0514) if (synchronization==SYN_EXTERNAL){
02BA 9180008A LDS R24,synchronization
02BC 3084 CPI R24,4
02BD F421 BNE 0x02C2
(0515) cc=7;
02BE E087 LDI R24,7
02BF 8B88 STD Y+16,R24
(0516) bc=0;
02C0 2400 CLR R0
02C1 860E STD Y+14,R0
(0517) }
(0518) color=((cc<<4)&0x70)|bc;
02C2 8988 LDD R24,Y+16
02C3 708F ANDI R24,0xF
02C4 9582 SWAP R24
02C5 7780 ANDI R24,0x70
02C6 2EA8 MOV R10,R24
02C7 840E LDD R0,Y+14
02C8 28A0 OR R10,R0
(0519) mc=((addr/4096)<<3)&0x08;
02C9 E02C LDI R18,0xC
02CA E030 LDI R19,0
02CB 018A MOVW R16,R20
02CC 940E0392 CALL lsr16
02CE 2F60 MOV R22,R16
02CF 0F66 LSL R22
02D0 1F77 ROL R23
02D1 0F66 LSL R22
02D2 1F77 ROL R23
02D3 0F66 LSL R22
02D4 1F77 ROL R23
02D5 7068 ANDI R22,0x8
02D6 7070 ANDI R23,0
(0520) mb=(((addr%4096)/2048)<<1)&0x02;
02D7 E02B LDI R18,0xB
02D8 E030 LDI R19,0
02D9 018A MOVW R16,R20
02DA 701F ANDI R17,0xF
02DB 940E0392 CALL lsr16
02DD 01C8 MOVW R24,R16
02DE 0F88 LSL R24
02DF 1F99 ROL R25
02E0 7082 ANDI R24,2
02E1 7090 ANDI R25,0
02E2 2EC8 MOV R12,R24
(0521) ma=(((addr%2048)/1024)<<2)&0x04;
02E3 E02A LDI R18,0xA
02E4 E030 LDI R19,0
02E5 018A MOVW R16,R20
02E6 7017 ANDI R17,7
02E7 940E0392 CALL lsr16
02E9 01C8 MOVW R24,R16
02EA 0F88 LSL R24
02EB 1F99 ROL R25
02EC 0F88 LSL R24
02ED 1F99 ROL R25
02EE 7084 ANDI R24,4
02EF 7090 ANDI R25,0
02F0 2EE8 MOV R14,R24
(0522)
(0523) MB90092_WriteByte(0x88|ff|ma|mb); //ff控制是否特显 MA MB在此显示控制
02F1 890A LDD R16,Y+18
02F2 6808 ORI R16,0x88
02F3 2B08 OR R16,R24
02F4 290C OR R16,R12
02F5 DF1F RCALL _MB90092_WriteByte
(0524) MB90092_WriteByte(color|mc); //command1-1,设置字符颜色,背景颜色
02F6 2D0A MOV R16,R10
02F7 2B06 OR R16,R22
02F8 DF1C RCALL _MB90092_WriteByte
(0525) MB90092_WriteByte(0x90+(addr%1024)/128); //command2-1,设置字符点阵在外rom的地址
02F9 E027 LDI R18,7
02FA E030 LDI R19,0
02FB 018A MOVW R16,R20
02FC 7013 ANDI R17,3
02FD 940E0392 CALL lsr16
02FF 5700 SUBI R16,0x70
0300 4F1F SBCI R17,0xFF
0301 DF13 RCALL _MB90092_WriteByte
(0526) MB90092_WriteByte(addr%128);
0302 2F04 MOV R16,R20
0303 770F ANDI R16,0x7F
0304 7010 ANDI R17,0
0305 DF0F RCALL _MB90092_WriteByte
0306 940E0370 CALL pop_gset5
0308 9508 RET
_MainScreen_Init:
i --> R20
bc --> R20
0309 940E037B CALL push_gset1
030B 2F40 MOV R20,R16
(0527) }
(0528) /*********************************************************************************************************
(0529) ** 函数名称: MainScreen_Init
(0530) ** 功能描述: MB90092主屏初始化
(0531) ** 日 期: 2004年12月29日
(0532) ********************************************************************************************************/
(0533) void MainScreen_Init (uint8 bc)
(0534) {
(0535) uint8 i;
(0536) Lcd_Control_DDR|=BIT(Lcd_Cs);
030C 9ABF SBI 0x17,7
(0537) Lcd_Control_DDR|=BIT(Lcd_Sin);
030D 9ABD SBI 0x17,5
(0538) Lcd_Control_DDR|=BIT(Lcd_Clk);
030E 9ABE SBI 0x17,6
(0539) Lcd_Control_Port|=BIT(Lcd_Cs);
030F 9AC7 SBI 0x18,7
(0540) Lcd_Control_Port|=BIT(Lcd_Sin);
0310 9AC5 SBI 0x18,5
(0541) Lcd_Control_Port|=BIT(Lcd_Clk);
0311 9AC6 SBI 0x18,6
(0542) Lcd_CLK_En; //先将CLK脚置高
0312 9AC6 SBI 0x18,6
(0543) Delay_ms(10);
0313 E00A LDI R16,0xA
0314 E010 LDI R17,0
0315 DEDE RCALL _Delay_ms
(0544) Lcd_CS_Dis;
0316 98C7 CBI 0x18,7
(0545) Delay_ms(10); //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
0317 E00A LDI R16,0xA
0318 E010 LDI R17,0
0319 DEDA RCALL _Delay_ms
(0546) Lcd_CS_En;
031A 9AC7 SBI 0x18,7
(0547) Delay_ms(10);
031B E00A LDI R16,0xA
031C E010 LDI R17,0
031D DED6 RCALL _Delay_ms
(0548) Lcd_CS_Dis;
031E 98C7 CBI 0x18,7
(0549) Delay_ms(10);
031F E00A LDI R16,0xA
0320 E010 LDI R17,0
0321 DED2 RCALL _Delay_ms
(0550) Lcd_CS_En;
0322 9AC7 SBI 0x18,7
(0551) Delay_ms(10);
0323 E00A LDI R16,0xA
0324 E010 LDI R17,0
0325 DECE RCALL _Delay_ms
(0552) Lcd_CS_Dis;
0326 98C7 CBI 0x18,7
(0553) Delay_ms(10);
0327 E00A LDI R16,0xA
0328 E010 LDI R17,0
0329 DECA RCALL _Delay_ms
(0554) Lcd_CS_En;
032A 9AC7 SBI 0x18,7
(0555) Delay_ms(10);
032B E00A LDI R16,0xA
032C E010 LDI R17,0
032D DEC6 RCALL _Delay_ms
(0556) Lcd_CS_Dis;
032E 98C7 CBI 0x18,7
(0557) Delay_ms(10);
032F E00A LDI R16,0xA
0330 E010 LDI R17,0
0331 DEC2 RCALL _Delay_ms
(0558) Lcd_CS_En;
0332 9AC7 SBI 0x18,7
(0559) Delay_ms(10);
0333 E00A LDI R16,0xA
0334 E010 LDI R17,0
0335 DEBE RCALL _Delay_ms
(0560)
(0561) MB90092_WriteByte(0xA0); //command 4,首先选择内同步
0336 EA00 LDI R16,0xA0
0337 DEDD RCALL _MB90092_WriteByte
(0562) MB90092_WriteByte(0x00);
0338 2700 CLR R16
0339 DEDB RCALL _MB90092_WriteByte
(0563)
(0564) MB90092_WriteByte(0xAD); //command 5
033A EA0D LDI R16,0xAD
033B DED9 RCALL _MB90092_WriteByte
(0565) MB90092_WriteByte(0x10); //KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0
033C E100 LDI R16,0x10
033D DED7 RCALL _MB90092_WriteByte
(0566)
(0567) MB90092_WriteByte(0xBC); //command 7
033E EB0C LDI R16,0xBC
033F DED5 RCALL _MB90092_WriteByte
(0568) MB90092_WriteByte(0x2f); //垂直开始位置设定
0340 E20F LDI R16,0x2F
0341 DED3 RCALL _MB90092_WriteByte
(0569)
(0570) MB90092_WriteByte(0xC0); //command 8
0342 EC00 LDI R16,0xC0
0343 DED1 RCALL _MB90092_WriteByte
(0571) MB90092_WriteByte(0x10); //水平开始位置设定
0344 E100 LDI R16,0x10
0345 DECF RCALL _MB90092_WriteByte
(0572)
(0573) MB90092_WriteByte(0xC8); //command 9,GRM位设置普通模式或者扩展图形模式
0346 EC08 LDI R16,0xC8
0347 DECD RCALL _MB90092_WriteByte
(0574) MB90092_WriteByte(0x20);
0348 E200 LDI R16,0x20
0349 DECB RCALL _MB90092_WriteByte
(0575)
(0576) MB90092_WriteByte(0xD1); //command 10,设置普通模式/扩展图形模式,闪烁,字符背景,字符单色/彩色,背景单色/彩色
034A ED01 LDI R16,0xD1
034B DEC9 RCALL _MB90092_WriteByte
(0577) MB90092_WriteByte(0x38|bc);
034C 2F04 MOV R16,R20
034D 6308 ORI R16,0x38
034E DEC6 RCALL _MB90092_WriteByte
(0578)
(0579) MB90092_WriteByte(0xA2|synchronization);//command 4,内/外同步选择
034F 9100008A LDS R16,synchronization
0351 6A02 ORI R16,0xA2
0352 DEC2 RCALL _MB90092_WriteByte
(0580) MB90092_WriteByte(0x2B);
0353 E20B LDI R16,0x2B
0354 DEC0 RCALL _MB90092_WriteByte
(0581)
(0582) for (i=0;i<=0x0B;i++)
0355 2744 CLR R20
0356 C004 RJMP 0x035B
(0583) {
(0584) WDR(); //喂狗
0357 95A8 WDR
(0585) MB90092_DisColor (i);
0358 2F04 MOV R16,R20
0359 DF19 RCALL _MB90092_DisColor
035A 9543 INC R20
035B E08B LDI R24,0xB
035C 1784 CP R24,R20
035D F7C8 BCC 0x0357
(0586) }
(0587) MB90092_ClearScreen ();
FILE: <library>
035E DF07 RCALL _MB90092_ClearScreen
035F 940E037E CALL pop_gset1
0361 9508 RET
push_arg4:
0362 933A ST R19,-Y
0363 932A ST R18,-Y
push_arg2:
0364 931A ST R17,-Y
0365 930A ST R16,-Y
0366 9508 RET
pop_gset2:
0367 E0E2 LDI R30,2
0368 940C037F JMP pop
pop_gset3:
036A E0E4 LDI R30,4
036B 940C037F JMP pop
pop_gset4:
036D E0E8 LDI R30,0x8
036E 940C037F JMP pop
pop_gset5:
0370 27EE CLR R30
0371 940C037F JMP pop
push_gset5:
0373 92FA ST R15,-Y
0374 92EA ST R14,-Y
push_gset4:
0375 92DA ST R13,-Y
0376 92CA ST R12,-Y
push_gset3:
0377 92BA ST R11,-Y
0378 92AA ST R10,-Y
push_gset2:
0379 937A ST R23,-Y
037A 936A ST R22,-Y
push_gset1:
037B 935A ST R21,-Y
037C 934A ST R20,-Y
037D 9508 RET
pop_gset1:
037E E0E1 LDI R30,1
pop:
037F 9149 LD R20,Y+
0380 9159 LD R21,Y+
0381 FDE0 SBRC R30,0
0382 9508 RET
0383 9169 LD R22,Y+
0384 9179 LD R23,Y+
0385 FDE1 SBRC R30,1
0386 9508 RET
0387 90A9 LD R10,Y+
0388 90B9 LD R11,Y+
0389 FDE2 SBRC R30,2
038A 9508 RET
038B 90C9 LD R12,Y+
038C 90D9 LD R13,Y+
038D FDE3 SBRC R30,3
038E 9508 RET
038F 90E9 LD R14,Y+
0390 90F9 LD R15,Y+
0391 9508 RET
lsr16:
0392 2322 TST R18
0393 F021 BEQ 0x0398
0394 9516 LSR R17
0395 9507 ROR R16
0396 952A DEC R18
0397 CFFA RJMP lsr16
0398 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -