📄 写字库.lst
字号:
01DA 7D8F ANDI R24,0xDF
01DB BB82 OUT 0x12,R24
(0275) DDRA =0;
01DC 2422 CLR R2
01DD BA2A OUT 0x1A,R2
(0276) PORTA =0XFF;
01DE EF8F LDI R24,0xFF
01DF BB8B OUT 0x1B,R24
(0277) temp =PINA;
01E0 B349 IN R20,0x19
(0278) return temp;
01E1 2F04 MOV R16,R20
01E2 D1C5 RCALL pop_gset1
01E3 9508 RET
_data_store:
data --> R20
01E4 D1C0 RCALL push_gset1
01E5 2F40 MOV R20,R16
(0279) }
(0280) //存储数据到外部RAM
(0281)
(0282) void data_store(char data)
(0283) {
(0284) if((data ==76) &&(FileEnd ==1)) //数据起始位检测
01E6 344C CPI R20,0x4C
01E7 F479 BNE 0x01F7
01E8 91800085 LDS R24,FileEnd
01EA 3081 CPI R24,1
01EB F459 BNE 0x01F7
(0285) {
(0286) HeadEN =1; //开启头文件数据传输
01EC E081 LDI R24,1
01ED 93800087 STS HeadEN,R24
(0287) HeadLoad =0; //头文件指针清零
01EF 2422 CLR R2
01F0 92200086 STS HeadLoad,R2
(0288) DataIndex =0; //存储数据指针清零
01F2 2433 CLR R3
01F3 92300089 STS DataIndex+1,R3
01F5 92200088 STS DataIndex,R2
(0289) }
(0290) if((HeadEN ==0) &&(FileEnd ==0))
01F7 90200087 LDS R2,HeadEN
01F9 2022 TST R2
01FA F571 BNE 0x0229
01FB 90200085 LDS R2,FileEnd
01FD 2022 TST R2
01FE F551 BNE 0x0229
(0291) {
(0292) RAM_Write(DataIndex,data); //数组送数
01FF 2F24 MOV R18,R20
0200 91000088 LDS R16,DataIndex
0202 91100089 LDS R17,DataIndex+1
0204 DFCA RCALL _RAM_Write
0205 940E0427 CALL 0x427
(0293) DataIndex++;
0207 9601 ADIW R24,1
0208 93900089 STS DataIndex+1,R25
020A 93800088 STS DataIndex,R24
(0294) if(DataIndex <2) //送文件长度数据到变量
020C 3082 CPI R24,2
020D E0E0 LDI R30,0
020E 079E CPC R25,R30
020F F434 BGE 0x0216
(0295) {
(0296) //FileLength |=data <<DataIndex;
(0297) FileLength =316;
0210 E38C LDI R24,0x3C
0211 E091 LDI R25,1
0212 9390008B STS FileLength+1,R25
0214 9380008A STS FileLength,R24
(0298) } //数据指针
(0299) if((DataIndex >=FileLength)&& (DataIndex >16))
0216 9020008A LDS R2,FileLength
0218 9030008B LDS R3,FileLength+1
021A 90400088 LDS R4,DataIndex
021C 90500089 LDS R5,DataIndex+1
021E 1442 CP R4,R2
021F 0453 CPC R5,R3
0220 F044 BLT 0x0229
0221 E180 LDI R24,0x10
0222 E090 LDI R25,0
0223 1584 CP R24,R4
0224 0595 CPC R25,R5
0225 F41C BGE 0x0229
(0300) {
(0301) HeadEN =1;
0226 E081 LDI R24,1
0227 940E044B CALL 0x44B
(0302) FileEnd =1;
(0303) }
(0304) }
(0305) if(HeadEN ==1) //循环检测文件起始标志
0229 91800087 LDS R24,HeadEN
022B 3081 CPI R24,1
022C F501 BNE 0x024D
(0306) {
(0307) Head[HeadLoad] =data;
022D E983 LDI R24,0x93
022E E090 LDI R25,0
022F 91E00086 LDS R30,HeadLoad
0231 27FF CLR R31
0232 0FE8 ADD R30,R24
0233 1FF9 ADC R31,R25
0234 8340 STD Z+0,R20
(0308) HeadLoad++;
0235 91800086 LDS R24,HeadLoad
0237 5F8F SUBI R24,0xFF
0238 93800086 STS HeadLoad,R24
(0309) if(HeadLoad ==3)
023A 3083 CPI R24,3
023B F489 BNE 0x024D
(0310) {
(0311) if((Head[0] ==76) && (Head[1] ==69) &&(Head[2] ==68))//文件起始表示吻合
023C 91800093 LDS R24,Head
023E 348C CPI R24,0x4C
023F F469 BNE 0x024D
0240 91800094 LDS R24,Head+1
0242 3485 CPI R24,0x45
0243 F449 BNE 0x024D
0244 91800095 LDS R24,Head+2
0246 3484 CPI R24,0x44
0247 F429 BNE 0x024D
(0312) {
(0313) HeadEN =0;
0248 2422 CLR R2
0249 92200087 STS HeadEN,R2
(0314) FileEnd =0;
024B 92200085 STS FileEnd,R2
(0315) }
(0316) }
(0317) }
024D D15A RCALL pop_gset1
024E 9508 RET
(0318) }
(0319) /**************************************************
(0320)
(0321) 显示效果处理
(0322)
(0323) ****************************************************/
(0324) void Disp_Model(void)
(0325) {
(0326) unsigned int file_length =0;
_Disp_Model:
PFileMax --> R16
file_length --> R18
024F 2722 CLR R18
0250 2733 CLR R19
(0327) int PFileMax;
(0328) //DispModel =RAM_Read(2) & (RAM_Read(3)<<8); //model控制字节
(0329) //PFileMax =(RAM_Read(0) & RAM_Read(1)<<8)>>3; //计算缓冲区域的最大列数
(0330) if(ModelDelayTime ==0)
0251 90200090 LDS R2,ModelDelayTime
0253 90300091 LDS R3,ModelDelayTime+1
0255 2022 TST R2
0256 F009 BEQ 0x0258
0257 C05F RJMP 0x02B7
0258 2033 TST R3
0259 F009 BEQ 0x025B
025A C05C RJMP 0x02B7
(0331) {
(0332) switch(DispModel)
025B 9120008F LDS R18,DispModel
025D 2733 CLR R19
025E 3020 CPI R18,0
025F 0723 CPC R18,R19
0260 F0B9 BEQ 0x0278
0261 3021 CPI R18,1
0262 E0E0 LDI R30,0
0263 073E CPC R19,R30
0264 F0E9 BEQ 0x0282
0265 3022 CPI R18,2
0266 E0E0 LDI R30,0
0267 073E CPC R19,R30
0268 F0E1 BEQ 0x0285
0269 3023 CPI R18,3
026A E0E0 LDI R30,0
026B 073E CPC R19,R30
026C F409 BNE 0x026E
026D C045 RJMP 0x02B3
026E 3024 CPI R18,4
026F E0E0 LDI R30,0
0270 073E CPC R19,R30
0271 F0D9 BEQ 0x028D
0272 3025 CPI R18,5
0273 E0E0 LDI R30,0
0274 073E CPC R19,R30
0275 F409 BNE 0x0277
0276 C03C RJMP 0x02B3
0277 C03B RJMP 0x02B3
(0333) {
(0334) case 0:
(0335) { //基本显示
(0336) PDataYMin =4;
0278 E084 LDI R24,4
0279 E090 LDI R25,0
027A 940E0431 CALL 0x431
(0337) PDataYMax =154;
027C E98A LDI R24,0x9A
027D 93900082 STS PDataYMax+1,R25
027F 93800081 STS PDataYMax,R24
(0338) break;
0281 C031 RJMP 0x02B3
(0339) }
(0340) case 1:
(0341) { //滚屏
(0342) PDataY++;
0282 940E0403 CALL 0x403
(0343) break;
0284 C02E RJMP 0x02B3
(0344) }
(0345) case 2:
(0346) { //反向滚屏
(0347) PDataY--;
0285 940E0422 CALL 0x422
0287 9701 SBIW R24,1
0288 93900080 STS PDataY+1,R25
028A 9380007F STS PDataY,R24
(0348) break;
028C C026 RJMP 0x02B3
(0349) }
(0350) case 3:
(0351) {
(0352) break;
(0353) }
(0354) case 4:
(0355) { //覆盖模式
(0356) if(ModelContJuge =1)
028D E081 LDI R24,1
028E 93800092 STS ModelContJuge,R24
0290 2388 TST R24
0291 F049 BEQ 0x029B
0292 940E0455 CALL 0x455
(0357) {
(0358) PDataYMax++;
0294 9601 ADIW R24,1
0295 940E0414 CALL 0x414
(0359) PDataYMin++;
0297 9601 ADIW R24,1
0298 940E0431 CALL 0x431
(0360) }
029A C008 RJMP 0x02A3
(0361) else
(0362) {
(0363) PDataYMax--;
029B 940E0455 CALL 0x455
029D 9701 SBIW R24,1
029E 940E0414 CALL 0x414
(0364) PDataYMin--;
02A0 9701 SBIW R24,1
02A1 940E0431 CALL 0x431
(0365) }
(0366) if(PDataYMax >PFileMax)
02A3 940E0436 CALL 0x436
02A5 1502 CP R16,R2
02A6 0513 CPC R17,R3
02A7 F41C BGE 0x02AB
(0367) {
(0368) ModelContJuge =0;
02A8 2422 CLR R2
02A9 92200092 STS ModelContJuge,R2
(0369) }
(0370) if(PDataYMax <PFileMax)
02AB 940E0436 CALL 0x436
02AD 1620 CP R2,R16
02AE 0631 CPC R3,R17
02AF F41C BGE 0x02B3
(0371) {
(0372) ModelContJuge =1;
02B0 E081 LDI R24,1
02B1 93800092 STS ModelContJuge,R24
(0373) }
(0374) break;
(0375) }
(0376) case 5:
(0377) {
(0378) break;
(0379) }
(0380) }
(0381) //ModelDelayTime =RAM_Read(4) & (RAM_Read(5)<<8);
(0382) ModelDelayTime =400;
02B3 E980 LDI R24,0x90
02B4 E091 LDI R25,1
02B5 940E0441 CALL 0x441
(0383) }
02B7 9508 RET
(0384) }
(0385)
(0386) /**************************************************
(0387)
(0388) 按键\显示事件处理区
(0389)
(0390) ****************************************************/
(0391) void KEY_event(void)
(0392) { /********* 添加按键处理代码 ***************/
(0393) switch(key_num)
_KEY_event:
02B8 9100006D LDS R16,key_num
02BA 2711 CLR R17
02BB 3000 CPI R16,0
02BC 0701 CPC R16,R17
02BD F0F1 BEQ 0x02DC
02BE 3001 CPI R16,1
02BF E0E0 LDI R30,0
02C0 071E CPC R17,R30
02C1 F0D1 BEQ 0x02DC
02C2 3002 CPI R16,2
02C3 E0E0 LDI R30,0
02C4 071E CPC R17,R30
02C5 F029 BEQ 0x02CB
02C6 3003 CPI R16,3
02C7 E0E0 LDI R30,0
02C8 071E CPC R17,R30
02C9 F079 BEQ 0x02D9
02CA C011 RJMP 0x02DC
(0394) {
(0395) case 0:
(0396) {//And your code
(0397) //RAM_Write(0x0010,0xCF);
(0398) break;
(0399) }
(0400) case 1:
(0401) {
(0402) //Disp_Buff[0] =RAM_Read(0x0010)&0xf;
(0403) //Disp_Buff[1] =RAM_Read(0x0010)>>4;
(0404) break;
(0405) }
(0406) case 2:
(0407) {
(0408) DispModel++;
02CB 9180008F LDS R24,DispModel
02CD 5F8F SUBI R24,0xFF
02CE 9380008F STS DispModel,R24
(0409) if(DispModel >8)
02D0 E088 LDI R24,0x8
02D1 9020008F LDS R2,DispModel
02D3 1582 CP R24,R2
02D4 F438 BCC 0x02DC
(0410) DispModel =0;
02D5 2422 CLR R2
02D6 9220008F STS DispModel,R2
(0411) break;
02D8 C003 RJMP 0x02DC
(0412) }
(0413) case 3:
(0414) {
(0415) PORTD &=0b10111111;
02D9 B382 IN R24,0x12
02DA 7B8F ANDI R24,0xBF
02DB BB82 OUT 0x12,R24
(0416) break;
02DC 9508 RET
(0417) }
(0418) /*..................*/
(0419) }
(0420) }
(0421) // 显示事件添加
(0422) void Display_event(void)
(0423) { /************* 添加显示 ***********************/
(0424) //Disp_Buff[1] =>>4;
(0425) //Disp_Buff[6] =head[2]&0x0f;
(0426) Disp_Buff[0] =DataIndex&0x0f;
_Display_event:
02DD 940E0427 CALL 0x427
02DF 708F ANDI R24,0xF
02E0 7090 ANDI R25,0
02E1 93800060 STS Disp_Buff,R24
02E3 940E0427 CALL 0x427
(0427) Disp_Buff[1] =(DataIndex>>4)&0x0f;
02E5 9595 ASR R25
02E6 9587 ROR R24
02E7 9595 ASR R25
02E8 9587 ROR R24
02E9 9595 ASR R25
02EA 9587 ROR R24
02EB 9595 ASR R25
02EC 9587 ROR R24
02ED 708F ANDI R24,0xF
02EE 7090 ANDI R25,0
02EF 93800061 STS Disp_Buff+1,R24
(0428) Disp_Buff[2] =DataIndex>>8;
02F1 90200088 LDS R2,DataIndex
02F3 90300089 LDS R3,DataIndex+1
02F5 2C23 MOV R2,R3
02F6 2433 CLR R3
02F7 FC27 SBRC R2,7
02F8 9430 COM R3
02F9 92200062 STS Disp_Buff+2,R2
02FB 940E0422 CALL 0x422
(0429) Disp_Buff[4] =PDataY&0x0f;
02FD 708F ANDI R24,0xF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -