📄 mega32-lcm.lst
字号:
(0126) _NOP();
035E 0000 NOP
(0127) _NOP();
035F 0000 NOP
(0128) _NOP();
0360 0000 NOP
(0129) CLEAR_LCD_E;
0361 9420 COM R2
0362 91E00066 LDS R30,0x66
0364 91F00067 LDS R31,0x67
0366 8030 LDD R3,Z+0
0367 2032 AND R3,R2
0368 8230 STD Z+0,R3
(0130) *LCD_OP_PORT = 0xff;
0369 91E00064 LDS R30,0x64
036B 91F00065 LDS R31,0x65
036D 8380 STD Z+0,R24
(0131) _SEI();
036E 9478 BSET 7
(0132) }
036F 940E09BB CALL pop_gset2
0371 9508 RET
_read_LCD:
data --> R20
lr --> R22
0372 940E09DB CALL push_gset2
0374 2F60 MOV R22,R16
(0133) unsigned char read_LCD(unsigned char lr) /* 读显示数据 */
(0134) {
(0135) unsigned char data;
(0136) _CLI();
0375 94F8 BCLR 7
(0137) LCD_BUSY(lr);
0376 2F06 MOV R16,R22
0377 DF19 RCALL _LCD_BUSY
(0138) SET_LCD_DATA;
0378 90200074 LDS R2,0x74
037A 91E0006E LDS R30,0x6E
037C 91F0006F LDS R31,0x6F
037E 8030 LDD R3,Z+0
037F 2832 OR R3,R2
0380 8230 STD Z+0,R3
(0139) *LCD_DIR_PORT = 0x00;
0381 2422 CLR R2
0382 91E00060 LDS R30,0x60
0384 91F00061 LDS R31,0x61
0386 8220 STD Z+0,R2
(0140) *LCD_OP_PORT = 0xff;
0387 EF8F LDI R24,0xFF
0388 91E00064 LDS R30,0x64
038A 91F00065 LDS R31,0x65
038C 8380 STD Z+0,R24
(0141) SET_LCD_READ;
038D 90200073 LDS R2,0x73
038F 91E0006C LDS R30,0x6C
0391 91F0006D LDS R31,0x6D
0393 8030 LDD R3,Z+0
0394 2832 OR R3,R2
0395 8230 STD Z+0,R3
(0142) SET_LCD_E;
0396 90200070 LDS R2,0x70
0398 91E00066 LDS R30,0x66
039A 91F00067 LDS R31,0x67
039C 8030 LDD R3,Z+0
039D 2832 OR R3,R2
039E 8230 STD Z+0,R3
(0143) _NOP();
039F 0000 NOP
(0144) _NOP();
03A0 0000 NOP
(0145) _NOP();
03A1 0000 NOP
(0146) _NOP();
03A2 0000 NOP
(0147) data=*LCD_IP_PORT;
03A3 91E00062 LDS R30,0x62
03A5 91F00063 LDS R31,0x63
03A7 8140 LDD R20,Z+0
(0148) CLEAR_LCD_E;
03A8 9420 COM R2
03A9 91E00066 LDS R30,0x66
03AB 91F00067 LDS R31,0x67
03AD 8030 LDD R3,Z+0
03AE 2032 AND R3,R2
03AF 8230 STD Z+0,R3
(0149) SET_LCD_WRITE;
03B0 90200073 LDS R2,0x73
03B2 9420 COM R2
03B3 91E0006C LDS R30,0x6C
03B5 91F0006D LDS R31,0x6D
03B7 8030 LDD R3,Z+0
03B8 2032 AND R3,R2
03B9 8230 STD Z+0,R3
(0150) LCD_BUSY(lr);
03BA 2F06 MOV R16,R22
03BB DED5 RCALL _LCD_BUSY
(0151) SET_LCD_DATA;
03BC 90200074 LDS R2,0x74
03BE 91E0006E LDS R30,0x6E
03C0 91F0006F LDS R31,0x6F
03C2 8030 LDD R3,Z+0
03C3 2832 OR R3,R2
03C4 8230 STD Z+0,R3
(0152) *LCD_DIR_PORT = 0x00;
03C5 2422 CLR R2
03C6 91E00060 LDS R30,0x60
03C8 91F00061 LDS R31,0x61
03CA 8220 STD Z+0,R2
(0153) *LCD_OP_PORT = 0xff;
03CB EF8F LDI R24,0xFF
03CC 91E00064 LDS R30,0x64
03CE 91F00065 LDS R31,0x65
03D0 8380 STD Z+0,R24
(0154) SET_LCD_READ;
03D1 90200073 LDS R2,0x73
03D3 91E0006C LDS R30,0x6C
03D5 91F0006D LDS R31,0x6D
03D7 8030 LDD R3,Z+0
03D8 2832 OR R3,R2
03D9 8230 STD Z+0,R3
(0155) SET_LCD_E;
03DA 90200070 LDS R2,0x70
03DC 91E00066 LDS R30,0x66
03DE 91F00067 LDS R31,0x67
03E0 8030 LDD R3,Z+0
03E1 2832 OR R3,R2
03E2 8230 STD Z+0,R3
(0156) _NOP();
03E3 0000 NOP
(0157) _NOP();
03E4 0000 NOP
(0158) _NOP();
03E5 0000 NOP
(0159) _NOP();
03E6 0000 NOP
(0160) data=*LCD_IP_PORT;
03E7 91E00062 LDS R30,0x62
03E9 91F00063 LDS R31,0x63
03EB 8140 LDD R20,Z+0
(0161) CLEAR_LCD_E;
03EC 9420 COM R2
03ED 91E00066 LDS R30,0x66
03EF 91F00067 LDS R31,0x67
03F1 8030 LDD R3,Z+0
03F2 2032 AND R3,R2
03F3 8230 STD Z+0,R3
(0162) SET_LCD_WRITE;
03F4 90200073 LDS R2,0x73
03F6 9420 COM R2
03F7 91E0006C LDS R30,0x6C
03F9 91F0006D LDS R31,0x6D
03FB 8030 LDD R3,Z+0
03FC 2032 AND R3,R2
03FD 8230 STD Z+0,R3
(0163)
(0164) _SEI();
03FE 9478 BSET 7
(0165) return data;
03FF 2F04 MOV R16,R20
0400 940E09BB CALL pop_gset2
0402 9508 RET
_set_start_line_L:
line --> R20
0403 940E09C4 CALL push_gset1
0405 2F40 MOV R20,R16
0406 9721 SBIW R28,1
(0166) }
(0167)
(0168) void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63
(0169) {
(0170) write_LCD(LEFT,CMD,0xc0|line);
0407 2F84 MOV R24,R20
0408 6C80 ORI R24,0xC0
0409 8388 STD Y+0,R24
040A 2722 CLR R18
040B 2700 CLR R16
040C DF14 RCALL _write_LCD
(0171) }
040D 9621 ADIW R28,1
040E 940E09C7 CALL pop_gset1
0410 9508 RET
_set_start_line_R:
line --> R20
0411 940E09C4 CALL push_gset1
0413 2F40 MOV R20,R16
0414 9721 SBIW R28,1
(0172)
(0173) void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63
(0174) {
(0175) write_LCD(RIGHT,CMD,0xc0|line);
0415 2F84 MOV R24,R20
0416 6C80 ORI R24,0xC0
0417 8388 STD Y+0,R24
0418 2722 CLR R18
0419 E001 LDI R16,1
041A DF06 RCALL _write_LCD
(0176) }
041B 9621 ADIW R28,1
041C 940E09C7 CALL pop_gset1
041E 9508 RET
_set_page_L:
page --> R20
041F 940E09C4 CALL push_gset1
0421 2F40 MOV R20,R16
0422 9721 SBIW R28,1
(0177)
(0178) void set_page_L(unsigned char page) /*设置X地址 设置页*/ //0-7
(0179) {
(0180) write_LCD(LEFT,CMD,0xb8|page);
0423 2F84 MOV R24,R20
0424 6B88 ORI R24,0xB8
0425 8388 STD Y+0,R24
0426 2722 CLR R18
0427 2700 CLR R16
0428 DEF8 RCALL _write_LCD
(0181) }
0429 9621 ADIW R28,1
042A 940E09C7 CALL pop_gset1
042C 9508 RET
_set_page_R:
page --> R20
042D 940E09C4 CALL push_gset1
042F 2F40 MOV R20,R16
0430 9721 SBIW R28,1
(0182) void set_page_R(unsigned char page) /*设置X地址 设置页*/ //0-7
(0183) {
(0184) write_LCD(RIGHT,CMD,0xb8|page);
0431 2F84 MOV R24,R20
0432 6B88 ORI R24,0xB8
0433 8388 STD Y+0,R24
0434 2722 CLR R18
0435 E001 LDI R16,1
0436 DEEA RCALL _write_LCD
(0185) }
0437 9621 ADIW R28,1
0438 940E09C7 CALL pop_gset1
043A 9508 RET
_set_col_addr_L:
col --> R20
043B 940E09C4 CALL push_gset1
043D 2F40 MOV R20,R16
043E 9721 SBIW R28,1
(0186)
(0187) void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
(0188) {
(0189) write_LCD(LEFT,CMD,0x40|col);
043F 2F84 MOV R24,R20
0440 6480 ORI R24,0x40
0441 8388 STD Y+0,R24
0442 2722 CLR R18
0443 2700 CLR R16
0444 DEDC RCALL _write_LCD
(0190) }
0445 9621 ADIW R28,1
0446 940E09C7 CALL pop_gset1
0448 9508 RET
_set_col_addr_R:
col --> R20
0449 940E09C4 CALL push_gset1
044B 2F40 MOV R20,R16
044C 9721 SBIW R28,1
(0191)
(0192) void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
(0193) {
(0194) write_LCD(RIGHT,CMD,0x40|col);
044D 2F84 MOV R24,R20
044E 6480 ORI R24,0x40
044F 8388 STD Y+0,R24
0450 2722 CLR R18
0451 E001 LDI R16,1
0452 DECE RCALL _write_LCD
(0195) }
0453 9621 ADIW R28,1
0454 940E09C7 CALL pop_gset1
0456 9508 RET
_init_lcd:
0457 9721 SBIW R28,1
(0196)
(0197) void init_lcd(void) /*初始化函数*/
(0198) {
(0199) set_start_line_L(0); /*显示起始行为0*/
0458 2700 CLR R16
0459 DFA9 RCALL _set_start_line_L
(0200) set_start_line_R(0); /*显示起始行为0*/
045A 2700 CLR R16
045B DFB5 RCALL _set_start_line_R
(0201) write_LCD(LEFT,CMD,DISPLAY_ON); /* 开显示 */
045C E38F LDI R24,0x3F
045D 8388 STD Y+0,R24
045E 2722 CLR R18
045F 2700 CLR R16
0460 DEC0 RCALL _write_LCD
(0202) write_LCD(RIGHT,CMD,DISPLAY_ON); /* 开显示 */
0461 E38F LDI R24,0x3F
0462 8388 STD Y+0,R24
0463 2722 CLR R18
0464 E001 LDI R16,1
0465 DEBB RCALL _write_LCD
(0203) }
0466 9621 ADIW R28,1
0467 9508 RET
_clr_lcd:
pages --> R20
i --> R22
0468 940E09DB CALL push_gset2
046A 9721 SBIW R28,1
(0204)
(0205) void clr_lcd(void) /*清屏函数*/
(0206) {
(0207) unsigned char pages,i;
(0208) for(pages=0;pages<8;pages++)
046B 2744 CLR R20
046C C018 RJMP 0x0485
(0209) {
(0210) set_page_L(pages); /* X 页地址 */
046D 2F04 MOV R16,R20
046E DFB0 RCALL _set_page_L
(0211) set_page_R(pages); /* X 页地址 */
046F 2F04 MOV R16,R20
0470 DFBC RCALL _set_page_R
(0212) for(i=0;i<64;i++)
0471 2766 CLR R22
0472 C00F RJMP 0x0482
(0213) {
(0214) set_col_addr_L(i);//Y
0473 2F06 MOV R16,R22
0474 DFC6 RCALL _set_col_addr_L
(0215) set_col_addr_R(i);//Y
0475 2F06 MOV R16,R22
0476 DFD2 RCALL _set_col_addr_R
(0216) write_LCD(LEFT,DATA,0x0);
0477 2422 CLR R2
0478 8228 STD Y+0,R2
0479 E021 LDI R18,1
047A 2700 CLR R16
047B DEA5 RCALL _write_LCD
(0217) write_LCD(RIGHT,DATA,0x0);
047C 2422 CLR R2
047D 8228 STD Y+0,R2
047E E021 LDI R18,1
047F E001 LDI R16,1
0480 DEA0 RCALL _write_LCD
0481 9563 INC R22
0482 3460 CPI R22,0x40
0483 F378 BCS 0x0473
0484 9543 INC R20
0485 3048 CPI R20,0x8
0486 F330 BCS 0x046D
(0218) }
(0219) }
(0220) }
0487 9621 ADIW R28,1
0488 940E09BB CALL pop_gset2
048A 9508 RET
(0221)
(0222) //ASCII 字模宽度及高度
(0223) #define ASC_CHR_WIDTH 8
(0224) #define ASC_CHR_HEIGHT 12
(0225)
(0226) typedef struct typFNT_ASC16 /* 汉字字模显示数据结构 */
(0227) {
(0228) char Index[1];
(0229) char Msk[16];
(0230) };
(0231) const struct typFNT_ASC16 ASC_16[] =
(0232) { /* 显示为8*16 Curier 10 常规*/
(0233) "1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
(0234) "2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
(0235) "3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
(0236) "4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00,
(0237) "5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
(0238) "6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
(0239) "7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,
(0240) "8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
(0241) "9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,
(0242) "0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
(0243) ".",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
(0244) ",",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
(0245) ":",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
(0246) ";",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
(0247) "-",0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0248) "_",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
(0249) "A",0x00,0x00,0x80,0x64,0x1C,0x60,0x80,0x00,0x00,0x04,0x07,0x05,0x01,0x05,0x07,0x04,
(0250) "B",0x00,0x04,0xFC,0x44,0x44,0x44,0x44,0xB8,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x03,
(0251) "C",0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02,
(0252) "D",0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,0x04,0x07,0x04,0x04,0x04,0x02,0x01,
(0253) "E",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x06,
(0254) "F",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x00,0x00,0x00,
(0255) " ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0256) "=",0x00,0x00,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0257) "(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00,
(0258) ")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00,
(0259) "V",0x00,0x04,0x3C,0xC4,0x00,0xC4,0x3C,0x04,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x00,
(0260) "m",0x00,0x20,0xE0,0x20,0xC0,0x20,0xC0,0x00,0x00,0x04,0x07,0x00,0x07,0x00,0x07,0x04,
(0261) "H",0x00,0x04,0xFC,0x44,0x40,0x44,0xFC,0x04,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04,
(0262) "*",0x90,0x90,0x60,0xFC,0x60,0x90,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
(0263) };
(0264)
(0265) #define ASC_HZ_WIDTH 12
(0266) //#define ASC_HZ_HEIGHT 12
(0267)
(0268) typedef struct typFNT_GB16 /*12*16 汉字字模显示数据结构 */
(0269) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -