📄 显示模块2.lst
字号:
02EE 2433 CLR R3
02EF 92300089 STS DataIndex+1,R3
02F1 92200088 STS DataIndex,R2
(0257) }
(0258) if((HeadEN ==0) &&(FileEnd ==0))
02F3 90200087 LDS R2,HeadEN
02F5 2022 TST R2
02F6 F5B1 BNE 0x032D
02F7 90200085 LDS R2,FileEnd
02F9 2022 TST R2
02FA F591 BNE 0x032D
(0259) {
(0260) RAM_Write(DataIndex,data); //数组送数
02FB 2F24 MOV R18,R20
02FC 91000088 LDS R16,DataIndex
02FE 91100089 LDS R17,DataIndex+1
0300 DFD1 RCALL _RAM_Write
(0261) DataIndex++;
0301 91800088 LDS R24,DataIndex
0303 91900089 LDS R25,DataIndex+1
0305 9601 ADIW R24,1
0306 93900089 STS DataIndex+1,R25
0308 93800088 STS DataIndex,R24
(0262) if(DataIndex <2) //送文件长度数据到变量
030A 3082 CPI R24,2
030B E0E0 LDI R30,0
030C 079E CPC R25,R30
030D F464 BGE 0x031A
(0263) {
(0264) FileLength |=data <<DataIndex;
030E 019C MOVW R18,R24
030F 2F04 MOV R16,R20
0310 2711 CLR R17
0311 D1D5 RCALL lsl16
0312 940E0544 CALL 0x544
0314 2A20 OR R2,R16
0315 2A31 OR R3,R17
0316 9230008B STS FileLength+1,R3
0318 9220008A STS FileLength,R2
(0265) } //数据指针
(0266) if((DataIndex >=FileLength)&& (DataIndex >16))
031A 940E0544 CALL 0x544
031C 90400088 LDS R4,DataIndex
031E 90500089 LDS R5,DataIndex+1
0320 1442 CP R4,R2
0321 0453 CPC R5,R3
0322 F054 BLT 0x032D
0323 E180 LDI R24,0x10
0324 E090 LDI R25,0
0325 1584 CP R24,R4
0326 0595 CPC R25,R5
0327 F42C BGE 0x032D
(0267) {
(0268) HeadEN =1;
0328 E081 LDI R24,1
0329 93800087 STS HeadEN,R24
(0269) FileEnd =1;
032B 93800085 STS FileEnd,R24
(0270) }
(0271) }
(0272) if(HeadEN ==1) //循环检测文件起始标志
032D 91800087 LDS R24,HeadEN
032F 3081 CPI R24,1
0330 F501 BNE 0x0351
(0273) {
(0274) Head[HeadLoad] =data;
0331 EF88 LDI R24,0xF8
0332 E092 LDI R25,2
0333 91E00086 LDS R30,HeadLoad
0335 27FF CLR R31
0336 0FE8 ADD R30,R24
0337 1FF9 ADC R31,R25
0338 8340 STD Z+0,R20
(0275) HeadLoad++;
0339 91800086 LDS R24,HeadLoad
033B 5F8F SUBI R24,0xFF
033C 93800086 STS HeadLoad,R24
(0276) if(HeadLoad ==3)
033E 3083 CPI R24,3
033F F489 BNE 0x0351
(0277) {
(0278) if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
0340 918002F8 LDS R24,Head
0342 348C CPI R24,0x4C
0343 F469 BNE 0x0351
0344 918002F9 LDS R24,Head+1
0346 3485 CPI R24,0x45
0347 F449 BNE 0x0351
0348 918002FA LDS R24,Head+2
034A 3484 CPI R24,0x44
034B F429 BNE 0x0351
(0279) {
(0280) HeadEN =0;
034C 2422 CLR R2
034D 92200087 STS HeadEN,R2
(0281) FileEnd =0;
034F 92200085 STS FileEnd,R2
(0282) }
(0283) }
(0284) }
0351 D153 RCALL pop_gset1
0352 9508 RET
_Disp_Model:
file_length --> R20
PFileMax --> R20
0353 D14C RCALL push_gset2
(0285) }
(0286) /**************************************************
(0287)
(0288) 显示效果处理
(0289)
(0290) ****************************************************/
(0291) void Disp_Model(void)
(0292) {
(0293) unsigned int file_length =0;
0354 2744 CLR R20
0355 2755 CLR R21
(0294) int PFileMax;
(0295) DispModel =RAM_Read(2) & (RAM_Read(3)<<8); //model控制字节
0356 E002 LDI R16,2
0357 E010 LDI R17,0
0358 DF7F RCALL _RAM_Read
0359 2E20 MOV R2,R16
035A E003 LDI R16,3
035B E010 LDI R17,0
035C 922F PUSH R2
035D DF7A RCALL _RAM_Read
035E 902F POP R2
035F 940E0522 CALL 0x522
0361 9220008C STS DispModel,R2
(0296) PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3; //计算缓冲区域的最大列数
0363 2700 CLR R16
0364 2711 CLR R17
0365 DF72 RCALL _RAM_Read
0366 2E20 MOV R2,R16
0367 E001 LDI R16,1
0368 E010 LDI R17,0
0369 922F PUSH R2
036A DF6D RCALL _RAM_Read
036B 902F POP R2
036C 2E40 MOV R4,R16
036D 2455 CLR R5
036E 2C54 MOV R5,R4
036F 2444 CLR R4
0370 2D42 MOV R20,R2
0371 2755 CLR R21
0372 2144 AND R20,R4
0373 2155 AND R21,R5
0374 9555 ASR R21
0375 9547 ROR R20
0376 9555 ASR R21
0377 9547 ROR R20
0378 9555 ASR R21
0379 9547 ROR R20
(0297) //if(time >(data_buff0[1][0]&(data_buff0[1][1]<<8)))
(0298) if(ModelDelayTime ==0)
037A 9020008D LDS R2,ModelDelayTime
037C 9030008E LDS R3,ModelDelayTime+1
037E 2022 TST R2
037F F009 BEQ 0x0381
0380 C06C RJMP 0x03ED
0381 2033 TST R3
0382 F009 BEQ 0x0384
0383 C069 RJMP 0x03ED
(0299) {
(0300) switch(DispModel)
0384 9160008C LDS R22,DispModel
0386 2777 CLR R23
0387 3060 CPI R22,0
0388 0767 CPC R22,R23
0389 F0B9 BEQ 0x03A1
038A 3061 CPI R22,1
038B E0E0 LDI R30,0
038C 077E CPC R23,R30
038D F0E9 BEQ 0x03AB
038E 3062 CPI R22,2
038F E0E0 LDI R30,0
0390 077E CPC R23,R30
0391 F0E1 BEQ 0x03AE
0392 3063 CPI R22,3
0393 E0E0 LDI R30,0
0394 077E CPC R23,R30
0395 F409 BNE 0x0397
0396 C047 RJMP 0x03DE
0397 3064 CPI R22,4
0398 E0E0 LDI R30,0
0399 077E CPC R23,R30
039A F0E9 BEQ 0x03B8
039B 3065 CPI R22,5
039C E0E0 LDI R30,0
039D 077E CPC R23,R30
039E F409 BNE 0x03A0
039F C03E RJMP 0x03DE
03A0 C03D RJMP 0x03DE
(0301) {
(0302) case 0:
(0303) { //基本显示
(0304) PDataYMin =4;
03A1 E084 LDI R24,4
03A2 E090 LDI R25,0
03A3 940E052F CALL 0x52F
(0305) PDataYMax =154;
03A5 E98A LDI R24,0x9A
03A6 93900082 STS PDataYMax+1,R25
03A8 93800081 STS PDataYMax,R24
(0306) break;
03AA C033 RJMP 0x03DE
(0307) }
(0308) case 1:
(0309) { //滚屏
(0310) PDataY++;
03AB 940E0508 CALL 0x508
(0311) break;
03AD C030 RJMP 0x03DE
(0312) }
(0313) case 2:
(0314) { //反向滚屏
(0315) PDataY--;
03AE 9180007F LDS R24,PDataY
03B0 91900080 LDS R25,PDataY+1
03B2 9701 SBIW R24,1
03B3 93900080 STS PDataY+1,R25
03B5 9380007F STS PDataY,R24
(0316) break;
03B7 C026 RJMP 0x03DE
(0317) }
(0318) case 3:
(0319) {
(0320) break;
(0321) }
(0322) case 4:
(0323) { //覆盖模式
(0324) if(ModelContJuge =1)
03B8 E081 LDI R24,1
03B9 9380008F STS ModelContJuge,R24
03BB 2388 TST R24
03BC F049 BEQ 0x03C6
03BD 940E0549 CALL 0x549
(0325) {
(0326) PDataYMax++;
03BF 9601 ADIW R24,1
03C0 940E0519 CALL 0x519
(0327) PDataYMin++;
03C2 9601 ADIW R24,1
03C3 940E052F CALL 0x52F
(0328) }
03C5 C008 RJMP 0x03CE
(0329) else
(0330) {
(0331) PDataYMax--;
03C6 940E0549 CALL 0x549
03C8 9701 SBIW R24,1
03C9 940E0519 CALL 0x519
(0332) PDataYMin--;
03CB 9701 SBIW R24,1
03CC 940E052F CALL 0x52F
(0333) }
(0334) if(PDataYMax >PFileMax)
03CE 940E052A CALL 0x52A
03D0 1542 CP R20,R2
03D1 0553 CPC R21,R3
03D2 F41C BGE 0x03D6
(0335) {
(0336) ModelContJuge =0;
03D3 2422 CLR R2
03D4 9220008F STS ModelContJuge,R2
(0337) }
(0338) if(PDataYMax <PFileMax)
03D6 940E052A CALL 0x52A
03D8 1624 CP R2,R20
03D9 0635 CPC R3,R21
03DA F41C BGE 0x03DE
(0339) {
(0340) ModelContJuge =1;
03DB E081 LDI R24,1
03DC 9380008F STS ModelContJuge,R24
(0341) }
(0342) break;
(0343) }
(0344) case 5:
(0345) {
(0346) break;
(0347) }
(0348) }
(0349) ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
03DE E004 LDI R16,4
03DF E010 LDI R17,0
03E0 DEF7 RCALL _RAM_Read
03E1 2E20 MOV R2,R16
03E2 E005 LDI R16,5
03E3 E010 LDI R17,0
03E4 922F PUSH R2
03E5 DEF2 RCALL _RAM_Read
03E6 902F POP R2
03E7 940E0522 CALL 0x522
03E9 9230008E STS ModelDelayTime+1,R3
03EB 9220008D STS ModelDelayTime,R2
(0350) }
03ED D0AA RCALL pop_gset2
03EE 9508 RET
(0351) }
(0352)
(0353) /**************************************************
(0354)
(0355) 按键\显示事件处理区
(0356)
(0357) ****************************************************/
(0358) void KEY_event(void)
(0359) { /********* 添加按键处理代码 ***************/
(0360) switch(key_num)
_KEY_event:
03EF 9100006D LDS R16,key_num
03F1 2711 CLR R17
03F2 3000 CPI R16,0
03F3 0701 CPC R16,R17
03F4 F0D1 BEQ 0x040F
03F5 3001 CPI R16,1
03F6 E0E0 LDI R30,0
03F7 071E CPC R17,R30
03F8 F0B1 BEQ 0x040F
03F9 3002 CPI R16,2
03FA E0E0 LDI R30,0
03FB 071E CPC R17,R30
03FC F091 BEQ 0x040F
03FD 3003 CPI R16,3
03FE E0E0 LDI R30,0
03FF 071E CPC R17,R30
0400 F009 BEQ 0x0402
0401 C00D RJMP 0x040F
(0361) {
(0362) case 0:
(0363) {//And your code
(0364)
(0365) break;
(0366) }
(0367) case 1:
(0368) {
(0369) break;
(0370) }
(0371) case 2:
(0372) {
(0373) break;
(0374) }
(0375) case 3:
(0376) {
(0377) DispModel++;
0402 9180008C LDS R24,DispModel
0404 5F8F SUBI R24,0xFF
0405 9380008C STS DispModel,R24
(0378) if(DispModel >8)
0407 E088 LDI R24,0x8
0408 9020008C LDS R2,DispModel
040A 1582 CP R24,R2
040B F418 BCC 0x040F
(0379) DispModel =0;
040C 2422 CLR R2
040D 9220008C STS DispModel,R2
(0380) break;
040F 9508 RET
(0381) }
(0382) /*..................*/
(0383) }
(0384) }
(0385) void Display_event(void)
(0386) { /************* 添加显示 ***********************/
(0387) //Disp_Buff[5] =head[1]>>4;
(0388) //Disp_Buff[6] =head[2]&0x0f;
(0389) //Disp_Buff[7] =head[2]>>4;
(0390) Disp_Buff[6] =HeadEN;
_Display_event:
0410 90200087 LDS R2,HeadEN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -