📄 测试.lst
字号:
3F6 9AAA SBI 0x15,2
(0174) RW_L;
3F7 9AA3 SBI 0x14,3
3F8 98AB CBI 0x15,3
(0175) E_H;
3F9 9AA4 SBI 0x14,4
3FA 9AAC SBI 0x15,4
(0176) DDRA=0XFF;
3FB EF8F LDI R24,0xFF
3FC BB8A OUT 0x1A,R24
(0177) PORTA=data;
3FD BAAB OUT 0x1B,R10
(0178) delay_us(5);
3FE E005 LDI R16,5
3FF E010 LDI R17,0
400 DFA4 RCALL _delay_us
(0179) E_L;
401 9AA4 SBI 0x14,4
402 98AC CBI 0x15,4
403 90A9 LD R10,Y+
404 9508 RET
_wezhi:
p --> R20
y --> R10
x --> R22
405 940E 09C2 CALL push_xgsetF00C
407 2EA2 MOV R10,R18
408 2F60 MOV R22,R16
(0180) }
(0181) //****************************************************
(0182) /*写入显示内部带字库型的字体的位置*/
(0183) //****************************************************
(0184) void wezhi(uchar x,uchar y)//x为在哪一行,y是在哪一列
(0185) {
(0186) uchar p;
(0187) if(x==0) p=0x80;//第一行
409 2366 TST R22
40A F409 BNE 0x040C
40B E840 LDI R20,0x80
(0188) if(x==1) p=0x90;//第二行
40C 3061 CPI R22,1
40D F409 BNE 0x040F
40E E940 LDI R20,0x90
(0189) if(x==2) p=0x88;//第三行
40F 3062 CPI R22,2
410 F409 BNE 0x0412
411 E848 LDI R20,0x88
(0190) if(x==3) p=0x98;//第四行
412 3063 CPI R22,3
413 F409 BNE 0x0415
414 E948 LDI R20,0x98
(0191) p+=y;//再加上y列
415 0D4A ADD R20,R10
(0192) writecomd(p) ;
416 2F04 MOV R16,R20
417 DFC7 RCALL _writecomd
(0193) delay_ms(1);
418 E001 LDI R16,1
419 E010 LDI R17,0
41A DF75 RCALL _delay_ms
41B 940C 09C9 JMP pop_xgsetF00C
_zhiti:
data --> R20
41D 934A ST R20,-Y
41E 935A ST R21,-Y
41F 01A8 MOVW R20,R16
(0194) }
(0195) //****************************************************
(0196) /*写入字体*/
(0197) //**************************************************
(0198) void zhiti(uchar *data)
(0199) {
420 C008 RJMP 0x0429
(0200)
(0201) while(*data!='\0')
(0202) {
(0203) writedata(*data);
421 01FA MOVW R30,R20
422 8100 LDD R16,Z+0
423 DFCE RCALL _writedata
(0204) delay_ms(5);
424 E005 LDI R16,5
425 E010 LDI R17,0
426 DF69 RCALL _delay_ms
(0205) data++;
427 5F4F SUBI R20,0xFF
428 4F5F SBCI R21,0xFF
429 01FA MOVW R30,R20
42A 8020 LDD R2,Z+0
42B 2022 TST R2
42C F7A1 BNE 0x0421
42D 9159 LD R21,Y+
42E 9149 LD R20,Y+
42F 9508 RET
(0206) }
(0207) }
(0208) //********************************************************
(0209) /*基本指令初始化*/
(0210) //*******************************************************
(0211) void frist1()
(0212) {
(0213) writecomd(0x01);//清屏显示
_frist1:
430 E001 LDI R16,1
431 DFAD RCALL _writecomd
(0214) writecomd(0x30);//8位并口,基本指令
432 E300 LDI R16,0x30
433 DFAB RCALL _writecomd
(0215) delay_us(10);
434 E00A LDI R16,0xA
435 E010 LDI R17,0
436 DF6E RCALL _delay_us
(0216) writecomd(0x0c);//整体显示,无游标,无反百,
437 E00C LDI R16,0xC
438 DFA6 RCALL _writecomd
(0217) delay_us(10);
439 E00A LDI R16,0xA
43A E010 LDI R17,0
43B DF69 RCALL _delay_us
(0218) writecomd(0x02);//地址归位
43C E002 LDI R16,2
43D DFA1 RCALL _writecomd
(0219) delay_us(10);
43E E00A LDI R16,0xA
43F E010 LDI R17,0
440 DF64 RCALL _delay_us
(0220) writecomd(0x40);//设置CGRAM地址
441 E400 LDI R16,0x40
442 DF9C RCALL _writecomd
443 9508 RET
(0221)
(0222) }
(0223) //*****************************************************
(0224) /*扩充指令*/
(0225) //*****************************************************
(0226) void frist2()
(0227) {
(0228) writecomd(0x01);//清屏显示
_frist2:
444 E001 LDI R16,1
445 DF99 RCALL _writecomd
(0229) delay_us(10);
446 E00A LDI R16,0xA
447 E010 LDI R17,0
448 DF5C RCALL _delay_us
(0230) writecomd(0x36);//8位控制,扩充指令,绘图开
449 E306 LDI R16,0x36
44A DF94 RCALL _writecomd
(0231) delay_ms(5);
44B E005 LDI R16,5
44C E010 LDI R17,0
44D DF42 RCALL _delay_ms
44E 9508 RET
_drwa:
k --> R22
temp_y --> R10
temp_x --> Y,+0
i --> R12
j --> R20
data --> Y,+11
44F 931A ST R17,-Y
450 930A ST R16,-Y
451 940E 09A3 CALL push_xgsetF0FC
453 9721 SBIW R28,1
(0232) }
(0233) //*****************************************************
(0234) /*绘图程序,整页显示*/
(0235) //*****************************************************
(0236) void drwa(const uchar *data)
(0237) {
(0238) uchar i,j,k,temp_x,temp_y;
(0239) temp_x=0x80;
454 E880 LDI R24,0x80
455 8388 STD Y+0,R24
(0240) temp_y=0x80;
456 2EA8 MOV R10,R24
(0241) for(i=0;i<32;i++)
457 24CC CLR R12
458 C017 RJMP 0x0470
(0242) {
(0243) writecomd(temp_y++);
459 2C2A MOV R2,R10
45A 2D82 MOV R24,R2
45B 5F8F SUBI R24,0xFF
45C 2EA8 MOV R10,R24
45D 2D02 MOV R16,R2
45E DF80 RCALL _writecomd
(0244) writecomd(temp_x);
45F 8108 LDD R16,Y+0
460 DF7E RCALL _writecomd
(0245) for(j=0;j<16;j++)
461 2744 CLR R20
462 C00A RJMP 0x046D
(0246) {
(0247) writedata(*data);
463 85EB LDD R30,Y+11
464 85FC LDD R31,Y+12
465 9104 LPM R16,12(Z)
466 DF8B RCALL _writedata
(0248) data++;
467 858B LDD R24,Y+11
468 859C LDD R25,Y+12
469 9601 ADIW R24,1
46A 879C STD Y+12,R25
46B 878B STD Y+11,R24
46C 9543 INC R20
46D 3140 CPI R20,0x10
46E F3A0 BCS 0x0463
46F 94C3 INC R12
470 2D8C MOV R24,R12
471 3280 CPI R24,0x20
472 F330 BCS 0x0459
(0249) }
(0250) }
(0251) temp_x=0x88;
473 E888 LDI R24,0x88
474 8388 STD Y+0,R24
(0252) temp_y=0x80;
475 E880 LDI R24,0x80
476 2EA8 MOV R10,R24
(0253) for(i=0;i<32;i++)
477 24CC CLR R12
478 C017 RJMP 0x0490
(0254) {
(0255) writecomd(temp_y++);
479 2C2A MOV R2,R10
47A 2D82 MOV R24,R2
47B 5F8F SUBI R24,0xFF
47C 2EA8 MOV R10,R24
47D 2D02 MOV R16,R2
47E DF60 RCALL _writecomd
(0256) writecomd(temp_x);
47F 8108 LDD R16,Y+0
480 DF5E RCALL _writecomd
(0257) for(j=0;j<16;j++)
481 2744 CLR R20
482 C00A RJMP 0x048D
(0258) {
(0259) writedata(*data);
483 85EB LDD R30,Y+11
484 85FC LDD R31,Y+12
485 9104 LPM R16,12(Z)
486 DF6B RCALL _writedata
(0260) data++;
487 858B LDD R24,Y+11
488 859C LDD R25,Y+12
489 9601 ADIW R24,1
48A 879C STD Y+12,R25
48B 878B STD Y+11,R24
48C 9543 INC R20
48D 3140 CPI R20,0x10
48E F3A0 BCS 0x0483
48F 94C3 INC R12
490 2D8C MOV R24,R12
491 3280 CPI R24,0x20
492 F330 BCS 0x0479
(0261) }
(0262) }
(0263) for(k=0;k<11;k++) ////下面程序是为了实现动画的
493 2766 CLR R22
494 C024 RJMP 0x04B9
(0264) {
(0265) temp_x=0x98;
495 E988 LDI R24,0x98
496 8388 STD Y+0,R24
(0266) temp_y=0x9B;
497 E98B LDI R24,0x9B
498 2EA8 MOV R10,R24
(0267) for(i=0;i<3;i++)
499 24CC CLR R12
49A C017 RJMP 0x04B2
(0268) {
(0269) writecomd(temp_y++);
49B 2CEA MOV R14,R10
49C 2D8E MOV R24,R14
49D 5F8F SUBI R24,0xFF
49E 2EA8 MOV R10,R24
49F 2D0E MOV R16,R14
4A0 DF3E RCALL _writecomd
(0270) writecomd(temp_x);
4A1 8108 LDD R16,Y+0
4A2 DF3C RCALL _writecomd
(0271) for(j=0;j<16;j++)
4A3 2744 CLR R20
4A4 C00A RJMP 0x04AF
(0272) {
(0273) writedata(*data);
4A5 85EB LDD R30,Y+11
4A6 85FC LDD R31,Y+12
4A7 9104 LPM R16,12(Z)
4A8 DF49 RCALL _writedata
(0274) data++;
4A9 858B LDD R24,Y+11
4AA 859C LDD R25,Y+12
4AB 9601 ADIW R24,1
4AC 879C STD Y+12,R25
4AD 878B STD Y+11,R24
4AE 9543 INC R20
4AF 3140 CPI R20,0x10
4B0 F3A0 BCS 0x04A5
4B1 94C3 INC R12
4B2 2D8C MOV R24,R12
4B3 3083 CPI R24,3
4B4 F330 BCS 0x049B
(0275) }
(0276) }
(0277) delay_ms(100);
4B5 E604 LDI R16,0x64
4B6 E010 LDI R17,0
4B7 DED8 RCALL _delay_ms
4B8 9563 INC R22
4B9 306B CPI R22,0xB
4BA F2D0 BCS 0x0495
4BB 9621 ADIW R28,1
4BC 940E 0998 CALL pop_xgsetF0FC
4BE 9622 ADIW R28,2
4BF 9508 RET
(0278) }
(0279) }
(0280) /*********************************************
(0281) 开机画面
(0282) ***********************************************/
(0283) void kaiji(void)
(0284) {
(0285) frist2();
_kaiji:
4C0 DF83 RCALL _frist2
(0286) drwa(data00);
4C1 E504 LDI R16,0x54
4C2 E010 LDI R17,0
4C3 DF8B RCALL _drwa
(0287) frist1();
4C4 DF6B RCALL _frist1
(0288) writecomd(0x01);//清屏显示
4C5 E001 LDI R16,1
4C6 DF18 RCALL _writecomd
(0289) wezhi(1,2);
4C7 E022 LDI R18,2
4C8 E001 LDI R16,1
4C9 DF3B RCALL _wezhi
(0290) zhiti(data01);
4CA E600 LDI R16,0x60
4CB E010 LDI R17,0
4CC DF50 RCALL _zhiti
(0291) wezhi(2,0);
4CD 2722 CLR R18
4CE E002 LDI R16,2
4CF DF35 RCALL _wezhi
(0292) zhiti(data02);
4D0 E609 LDI R16,0x69
4D1 E010 LDI R17,0
4D2 DF4A RCALL _zhiti
4D3 9508 RET
_key_scan:
j --> R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -