📄 mega32-lcm.lst
字号:
(0270) char Index[2];
(0271) char Msk[24];
(0272) };
(0273) const struct typFNT_GB16 GB_16[] = { /* 宋体 9 显示为12*16 */
(0274) "科",0x8A,0x6A,0xFE,0x29,0x49,0x80,0x92,0xA4,0x80,0xFF,0x40,0x00,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
(0275) "技",0x44,0x44,0xFF,0x24,0x00,0x64,0xA4,0x3F,0xA4,0x64,0x04,0x00,0x04,0x04,0x07,0x00,0x04,0x04,0x02,0x01,0x02,0x04,0x04,0x00,
(0276) "有",0x42,0x22,0x12,0xFA,0x4E,0x4B,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x00,0x00,0x00,0x07,0x01,0x01,0x01,0x05,0x07,0x00,0x00,0x00,
(0277) "限",0xFF,0x81,0x99,0xE7,0x00,0xFF,0x25,0xE5,0x25,0xBF,0x40,0x00,0x07,0x00,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x02,0x04,0x00,
(0278) "公",0x20,0x10,0x08,0x07,0xC0,0x30,0x83,0x0C,0x10,0x20,0x20,0x00,0x00,0x04,0x06,0x05,0x04,0x04,0x02,0x03,0x06,0x00,0x00,0x00,
(0279) "司",0x08,0x09,0xE9,0x29,0x29,0x29,0xED,0x09,0x01,0xFF,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x04,0x04,0x07,0x00,0x00,
(0280) "液",0x19,0xE2,0x14,0x42,0xF2,0x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00,
(0281) "晶",0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00,
(0282) "显",0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00,
(0283) "示",0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00,
(0284) "的",0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00,
(0285) "第",0x04,0xEA,0xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00,
(0286) "一",0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0287) "行",0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00,
(0288) "二",0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
(0289) "三",0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,
(0290) "四",0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00,
(0291) "五",0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00,
(0292) };
(0293)
(0294) unsigned char GetPage(void) /*得到当前页*/
(0295) {
(0296) return CurPage;
_GetPage:
048B 910000C6 LDS R16,_CurPage
048D 9508 RET
(0297) }
(0298)
(0299) unsigned char GetCol(void) /*得到当前列*/
(0300) {
(0301) return CurCol;
_GetCol:
048E 910000C5 LDS R16,_CurCol
0490 9508 RET
_SetPageCol:
ucol --> R20
upage --> R22
0491 940E09DB CALL push_gset2
0493 2F42 MOV R20,R18
0494 2F60 MOV R22,R16
(0302) }
(0303)
(0304) void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */
(0305) {
(0306) CurPage = upage;
0495 936000C6 STS _CurPage,R22
(0307) CurCol = ucol;
0497 934000C5 STS _CurCol,R20
(0308) if(ucol<64)
0499 3440 CPI R20,0x40
049A F428 BCC 0x04A0
(0309) {
(0310) set_page_L(upage);
049B 2F06 MOV R16,R22
049C DF82 RCALL _set_page_L
(0311) set_col_addr_L(ucol);
049D 2F04 MOV R16,R20
049E DF9C RCALL _set_col_addr_L
(0312) }
049F C005 RJMP 0x04A5
(0313) else
(0314) {
(0315) set_page_R(upage);
04A0 2F06 MOV R16,R22
04A1 DF8B RCALL _set_page_R
(0316) set_col_addr_R(ucol-64);
04A2 2F04 MOV R16,R20
04A3 5400 SUBI R16,0x40
04A4 DFA4 RCALL _set_col_addr_R
(0317) }
(0318) }
04A5 940E09BB CALL pop_gset2
04A7 9508 RET
_SetRowCol:
page --> R20
ucol --> R22
urow --> R20
04A8 940E09DB CALL push_gset2
04AA 2F62 MOV R22,R18
04AB 2F40 MOV R20,R16
(0319)
(0320) /* 设置当前显示的页和列 */
(0321) void SetRowCol(unsigned char urow, unsigned char ucol)
(0322) {
(0323) unsigned char page;
(0324) CurRow = urow;
04AC 934000C7 STS _CurRow,R20
(0325) CurCol = ucol;
04AE 936000C5 STS _CurCol,R22
(0326)
(0327) switch(urow)
04B0 2755 CLR R21
04B1 3041 CPI R20,1
04B2 E0E0 LDI R30,0
04B3 075E CPC R21,R30
04B4 F089 BEQ 0x04C6
04B5 3042 CPI R20,2
04B6 E0E0 LDI R30,0
04B7 075E CPC R21,R30
04B8 F091 BEQ 0x04CB
04B9 3043 CPI R20,3
04BA E0E0 LDI R30,0
04BB 075E CPC R21,R30
04BC F099 BEQ 0x04D0
04BD 3044 CPI R20,4
04BE E0E0 LDI R30,0
04BF 075E CPC R21,R30
04C0 F0A1 BEQ 0x04D5
04C1 3045 CPI R20,5
04C2 E0E0 LDI R30,0
04C3 075E CPC R21,R30
04C4 F0A9 BEQ 0x04DA
04C5 C018 RJMP 0x04DE
(0328) {
(0329) case 1:
(0330) page=0;
04C6 2744 CLR R20
(0331) CurOffset=1;
04C7 E081 LDI R24,1
04C8 938000C8 STS _CurOffset,R24
(0332) break;
04CA C013 RJMP 0x04DE
(0333) case 2:
(0334) page=1;
04CB E041 LDI R20,1
(0335) CurOffset=2;
04CC E082 LDI R24,2
04CD 938000C8 STS _CurOffset,R24
(0336) break;
04CF C00E RJMP 0x04DE
(0337) case 3:
(0338) page=3;
04D0 E043 LDI R20,3
(0339) CurOffset=1;
04D1 E081 LDI R24,1
04D2 938000C8 STS _CurOffset,R24
(0340) break;
04D4 C009 RJMP 0x04DE
(0341) case 4:
(0342) page=4;
04D5 E044 LDI R20,4
(0343) CurOffset=2;
04D6 E082 LDI R24,2
04D7 938000C8 STS _CurOffset,R24
(0344) break;
04D9 C004 RJMP 0x04DE
(0345) case 5:
(0346) page=6;
04DA E046 LDI R20,6
(0347) CurOffset=1;
04DB E081 LDI R24,1
04DC 938000C8 STS _CurOffset,R24
(0348) break;
(0349) }
(0350) SetPageCol(page,ucol);
04DE 2F26 MOV R18,R22
04DF 2F04 MOV R16,R20
04E0 DFB0 RCALL _SetPageCol
(0351) }
04E1 940E09BB CALL pop_gset2
04E3 9508 RET
_disp_ch:
width --> R22
len --> R22
uPage --> Y+2
ch_r --> R10
uCol --> Y+1
ch_w --> R14
k --> R20
j --> R12
c --> R10
04E4 940E09E7 CALL push_gset5
04E6 2EA0 MOV R10,R16
04E7 9723 SBIW R28,3
(0352)
(0353) void disp_ch(unsigned char c)
(0354) {
(0355) unsigned char k,j,uPage,uCol,ch_r,ch_w;
(0356) unsigned char width;
(0357) unsigned char len;
(0358) uPage = GetPage();
04E8 DFA2 RCALL _GetPage
04E9 830A STD Y+2,R16
(0359) uCol = GetCol();
04EA DFA3 RCALL _GetCol
04EB 8309 STD Y+1,R16
(0360) len=sizeof(ASC_16)/sizeof(ASC_16[0]);
04EC E16E LDI R22,0x1E
(0361) for(k=0;k<len;k++)
04ED 2744 CLR R20
04EE C00C RJMP 0x04FB
(0362) {
(0363) if(c == ASC_16[k].Index[0] ) break;
04EF E181 LDI R24,0x11
04F0 9F84 MUL R24,R20
04F1 01F0 MOVW R30,R0
04F2 E584 LDI R24,0x54
04F3 E090 LDI R25,0
04F4 0FE8 ADD R30,R24
04F5 1FF9 ADC R31,R25
04F6 91E4 LPM R30,0(Z)
04F7 16AE CP R10,R30
04F8 F409 BNE 0x04FA
04F9 C003 RJMP 0x04FD
04FA 9543 INC R20
04FB 1746 CP R20,R22
04FC F390 BCS 0x04EF
(0364) }
(0365) if(k<len)
04FD 1746 CP R20,R22
04FE F008 BCS 0x0500
04FF C0F1 RJMP 0x05F1
(0366) {
(0367)
(0368) if(c=='-'||c==':')
0500 2D8A MOV R24,R10
0501 328D CPI R24,0x2D
0502 F011 BEQ 0x0505
0503 338A CPI R24,0x3A
0504 F411 BNE 0x0507
(0369) width=ASC_CHR_WIDTH-2;
0505 E066 LDI R22,6
0506 C006 RJMP 0x050D
(0370) else if(c=='|')
0507 2D8A MOV R24,R10
0508 378C CPI R24,0x7C
0509 F411 BNE 0x050C
(0371) width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
050A E064 LDI R22,4
050B C001 RJMP 0x050D
(0372) else
(0373) width=ASC_CHR_WIDTH;
050C E068 LDI R22,0x8
(0374)
(0375) if(CurOffset==1) //下半部是写半个字节
050D 918000C8 LDS R24,_CurOffset
050F 3081 CPI R24,1
0510 F009 BEQ 0x0512
0511 C062 RJMP 0x0574
(0376) {
(0377) for(j=0;j<width;j++)
0512 24CC CLR R12
0513 C01E RJMP 0x0532
(0378) {
(0379) SetPageCol(uPage,uCol+j);
0514 8129 LDD R18,Y+1
0515 0D2C ADD R18,R12
0516 810A LDD R16,Y+2
0517 DF79 RCALL _SetPageCol
(0380) ch_w=ASC_16[k].Msk[j];
0518 E181 LDI R24,0x11
0519 9F84 MUL R24,R20
051A 0110 MOVW R2,R0
051B E585 LDI R24,0x55
051C E090 LDI R25,0
051D 0E28 ADD R2,R24
051E 1E39 ADC R3,R25
051F 2DEC MOV R30,R12
0520 27FF CLR R31
0521 0DE2 ADD R30,R2
0522 1DF3 ADC R31,R3
0523 90E4 LPM R14,0(Z)
(0381) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
0524 8189 LDD R24,Y+1
0525 0D8C ADD R24,R12
0526 3480 CPI R24,0x40
0527 F428 BCC 0x052D
0528 82E8 STD Y+0,R14
0529 E021 LDI R18,1
052A 2700 CLR R16
052B DDF5 RCALL _write_LCD
052C C004 RJMP 0x0531
(0382) else write_LCD(RIGHT,DATA,ch_w);
052D 82E8 STD Y+0,R14
052E E021 LDI R18,1
052F E001 LDI R16,1
0530 DDF0 RCALL _write_LCD
0531 94C3 INC R12
0532 16C6 CP R12,R22
0533 F300 BCS 0x0514
(0383) }
(0384) SetPageCol(uPage+1,uCol);
0534 8129 LDD R18,Y+1
0535 810A LDD R16,Y+2
0536 5F0F SUBI R16,0xFF
0537 DF59 RCALL _SetPageCol
(0385)
(0386) for(j=0;j<width;j++)
0538 24CC CLR R12
0539 C036 RJMP 0x0570
(0387) {
(0388) SetPageCol(uPage+1,uCol+j);
053A 8129 LDD R18,Y+1
053B 0D2C ADD R18,R12
053C 810A LDD R16,Y+2
053D 5F0F SUBI R16,0xFF
053E DF52 RCALL _SetPageCol
(0389) if(uCol+j<64) ch_r=read_LCD(LEFT);
053F 8189 LDD R24,Y+1
0540 0D8C ADD R24,R12
0541 3480 CPI R24,0x40
0542 F420 BCC 0x0547
0543 2700 CLR R16
0544 DE2D RCALL _read_LCD
0545 2EA0 MOV R10,R16
0546 C003 RJMP 0x054A
(0390) else ch_r=read_LCD(RIGHT);
0547 E001 LDI R16,1
0548 DE29 RCALL _read_LCD
0549 2EA0 MOV R10,R16
(0391) ch_r&=0xf0;
054A 2D8A MOV R24,R10
054B 7F80 ANDI R24,0xF0
054C 2EA8 MOV R10,R24
(0392) ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;
054D E181 LDI R24,0x11
054E 9F84 MUL R24,R20
054F 0110 MOVW R2,R0
0550 E585 LDI R24,0x55
0551 E090 LDI R25,0
0552 0E28 ADD R2,R24
0553 1E39 ADC R3,R25
0554 2DEC MOV R30,R12
0555 27FF CLR R31
0556 9638 ADIW R30,0x8
0557 0DE2 ADD R30,R2
0558 1DF3 ADC R31,R3
0559 91E4 LPM R30,0(Z)
055A 70EF ANDI R30,0xF
055B 2EEE MOV R14,R30
(0393) ch_w|=ch_r;
055C 28EA OR R14,R10
(0394) SetPageCol(uPage+1,uCol+j);
055D 8129 LDD R18,Y+1
055E 0D2C ADD R18,R12
055F 810A LDD R16,Y+2
0560 5F0F SUBI R16,0xFF
0561 DF2F RCALL _SetPageCol
(0395) if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
0562 8189 LDD R24,Y+1
0563 0D8C ADD R24,R12
0564 3480 CPI R24,0x40
0565 F428 BCC 0x056B
0566 82E8 STD Y+0,R14
0567 E021 LDI R18,1
0568 2700 CLR R16
0569 DDB7 RCALL _write_LCD
056A C004 RJMP 0x056F
(0396) else write_LCD(RIGHT,DATA,ch_w);
056B 82E8 STD Y+0,R14
056C E021 LDI R18,1
056D E001 LDI R16,1
056E DDB2 RCALL _write_LCD
056F 94C3 INC R12
0570 16C6 CP R12,R22
0571 F408 BCC 0x0573
0572 CFC7 RJMP 0x053A
(0397) }
(0398) }
0573 C07D RJMP 0x05F1
(0399) else //上半部是写半个字节
(0400) {
(0401) for(j=0;j<width;j++)
0574 24CC CLR R12
0575 C035 RJMP 0x05AB
(0402) {
(0403) SetPageCol(uPage,uCol+j);
0576 8129 LDD R18,Y+1
0577 0D2C ADD R18,R12
0578 810A LDD R16,Y+2
0579 DF17 RCALL _SetPageCol
(0404) if(uCol+j<64) ch_r=read_LCD(LEFT);
057A 8189 LDD R24,Y+1
057B 0D8C ADD R24,R12
057C 3480 CPI R24,0x40
057D F420 BCC 0x0582
057E 2700 CLR R16
057F DDF2 RCALL _read_LCD
0580 2EA0 MOV R10,R16
0581 C003 RJMP 0x0585
(0405) else ch_r=read_LCD(RIGHT);
0582 E001 LDI R16,1
0583 DDEE RCALL _read_LCD
0584 2EA0 MOV R10,R16
(0406) ch_r&=0x0f;
0585 2D8A MOV R24,R10
0586 708F ANDI R24,0xF
0587 2EA8 MOV R10,R24
(0407) ch_w=ASC_16[k].Msk[j];
0588 E181 LDI R24,0x11
0589 9F84 MUL R24,R20
058A 0110 MOVW R2,R0
058B E585 LDI R24,0x55
058C E090 LDI R25,0
058D 0E28 ADD R2,R24
058E 1E39 ADC R3,R25
058F 2DEC MOV R30,R12
0590 27FF CLR R31
0591 0DE2 ADD R30,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -