⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr_ks0108.lst

📁 用avr控制的ks0108型128×64显示程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0332 90200073  LDS	R2,LCD_EN_BIT
    0334 91E00068  LDS	R30,LCD_EN_PORT
    0336 91F00069  LDS	R31,LCD_EN_PORT+1
    0338 8030      LDD	R3,Z+0
    0339 2832      OR	R3,R2
    033A 8230      STD	Z+0,R3
(0136)     *LCD_DIR_PORT = 0xff;
    033B EF8F      LDI	R24,0xFF
    033C 91E00060  LDS	R30,LCD_DIR_PORT
    033E 91F00061  LDS	R31,LCD_DIR_PORT+1
    0340 8380      STD	Z+0,R24
(0137)     *LCD_OP_PORT = data;
    0341 91E00064  LDS	R30,LCD_OP_PORT
    0343 91F00065  LDS	R31,LCD_OP_PORT+1
    0345 800C      LDD	R0,Y+4
    0346 8200      STD	Z+0,R0
(0138)     asm("nop");
    0347 0000      NOP
(0139)     asm("nop");
    0348 0000      NOP
(0140)     asm("nop");
    0349 0000      NOP
(0141)     asm("nop");
    034A 0000      NOP
(0142)     CLEAR_LCD_E;
    034B 90200073  LDS	R2,LCD_EN_BIT
    034D 9420      COM	R2
    034E 91E00068  LDS	R30,LCD_EN_PORT
    0350 91F00069  LDS	R31,LCD_EN_PORT+1
    0352 8030      LDD	R3,Z+0
    0353 2032      AND	R3,R2
    0354 8230      STD	Z+0,R3
(0143)     *LCD_OP_PORT = 0xff;
    0355 91E00064  LDS	R30,LCD_OP_PORT
    0357 91F00065  LDS	R31,LCD_OP_PORT+1
    0359 8380      STD	Z+0,R24
(0144)     asm("sei");
    035A 9478      BSET	7
    035B 940E098A  CALL	pop_gset2
    035D 9508      RET
_read_LCD:
  data                 --> R20
  lr                   --> R22
    035E 940E0999  CALL	push_gset2
    0360 2F60      MOV	R22,R16
(0145) }
(0146) unsigned char read_LCD(unsigned char lr)	  /*  读显示数据 */
(0147) {
(0148)     unsigned char data;
(0149)     asm("cli");
    0361 94F8      BCLR	7
(0150)     LCD_BUSY(lr);
    0362 2F06      MOV	R16,R22
    0363 DF12      RCALL	_LCD_BUSY
(0151)     SET_LCD_DATA;
    0364 90200077  LDS	R2,LCD_DI_BIT
    0366 91E00070  LDS	R30,LCD_DI_PORT
    0368 91F00071  LDS	R31,LCD_DI_PORT+1
    036A 8030      LDD	R3,Z+0
    036B 2832      OR	R3,R2
    036C 8230      STD	Z+0,R3
(0152)     *LCD_DIR_PORT = 0x00;
    036D 2422      CLR	R2
    036E 91E00060  LDS	R30,LCD_DIR_PORT
    0370 91F00061  LDS	R31,LCD_DIR_PORT+1
    0372 8220      STD	Z+0,R2
(0153)     *LCD_OP_PORT = 0xff;
    0373 EF8F      LDI	R24,0xFF
    0374 91E00064  LDS	R30,LCD_OP_PORT
    0376 91F00065  LDS	R31,LCD_OP_PORT+1
    0378 8380      STD	Z+0,R24
(0154)     SET_LCD_READ;
    0379 90200076  LDS	R2,LCD_RW_BIT
    037B 91E0006E  LDS	R30,LCD_RW_PORT
    037D 91F0006F  LDS	R31,LCD_RW_PORT+1
    037F 8030      LDD	R3,Z+0
    0380 2832      OR	R3,R2
    0381 8230      STD	Z+0,R3
(0155)     SET_LCD_E;
    0382 90200073  LDS	R2,LCD_EN_BIT
    0384 91E00068  LDS	R30,LCD_EN_PORT
    0386 91F00069  LDS	R31,LCD_EN_PORT+1
    0388 8030      LDD	R3,Z+0
    0389 2832      OR	R3,R2
    038A 8230      STD	Z+0,R3
(0156)     asm("nop");
    038B 0000      NOP
(0157)     asm("nop");
    038C 0000      NOP
(0158)     asm("nop");
    038D 0000      NOP
(0159)     asm("nop");
    038E 0000      NOP
(0160)     data=*LCD_IP_PORT;
    038F 91E00062  LDS	R30,LCD_IP_PORT
    0391 91F00063  LDS	R31,LCD_IP_PORT+1
    0393 8140      LDD	R20,Z+0
(0161)     CLEAR_LCD_E;
    0394 90200073  LDS	R2,LCD_EN_BIT
    0396 9420      COM	R2
    0397 91E00068  LDS	R30,LCD_EN_PORT
    0399 91F00069  LDS	R31,LCD_EN_PORT+1
    039B 8030      LDD	R3,Z+0
    039C 2032      AND	R3,R2
    039D 8230      STD	Z+0,R3
(0162)     SET_LCD_WRITE;
    039E 90200076  LDS	R2,LCD_RW_BIT
    03A0 9420      COM	R2
    03A1 91E0006E  LDS	R30,LCD_RW_PORT
    03A3 91F0006F  LDS	R31,LCD_RW_PORT+1
    03A5 8030      LDD	R3,Z+0
    03A6 2032      AND	R3,R2
    03A7 8230      STD	Z+0,R3
(0163)     LCD_BUSY(lr);
    03A8 2F06      MOV	R16,R22
    03A9 DECC      RCALL	_LCD_BUSY
(0164)     SET_LCD_DATA; 
    03AA 90200077  LDS	R2,LCD_DI_BIT
    03AC 91E00070  LDS	R30,LCD_DI_PORT
    03AE 91F00071  LDS	R31,LCD_DI_PORT+1
    03B0 8030      LDD	R3,Z+0
    03B1 2832      OR	R3,R2
    03B2 8230      STD	Z+0,R3
(0165)     *LCD_DIR_PORT = 0x00;
    03B3 2422      CLR	R2
    03B4 91E00060  LDS	R30,LCD_DIR_PORT
    03B6 91F00061  LDS	R31,LCD_DIR_PORT+1
    03B8 8220      STD	Z+0,R2
(0166)     *LCD_OP_PORT = 0xff;
    03B9 EF8F      LDI	R24,0xFF
    03BA 91E00064  LDS	R30,LCD_OP_PORT
    03BC 91F00065  LDS	R31,LCD_OP_PORT+1
    03BE 8380      STD	Z+0,R24
(0167)     SET_LCD_READ; 
    03BF 90200076  LDS	R2,LCD_RW_BIT
    03C1 91E0006E  LDS	R30,LCD_RW_PORT
    03C3 91F0006F  LDS	R31,LCD_RW_PORT+1
    03C5 8030      LDD	R3,Z+0
    03C6 2832      OR	R3,R2
    03C7 8230      STD	Z+0,R3
(0168)     SET_LCD_E;
    03C8 90200073  LDS	R2,LCD_EN_BIT
    03CA 91E00068  LDS	R30,LCD_EN_PORT
    03CC 91F00069  LDS	R31,LCD_EN_PORT+1
    03CE 8030      LDD	R3,Z+0
    03CF 2832      OR	R3,R2
    03D0 8230      STD	Z+0,R3
(0169)     asm("nop");	
    03D1 0000      NOP
(0170)     asm("nop");
    03D2 0000      NOP
(0171)     asm("nop");
    03D3 0000      NOP
(0172)     asm("nop");
    03D4 0000      NOP
(0173)     data=*LCD_IP_PORT;
    03D5 91E00062  LDS	R30,LCD_IP_PORT
    03D7 91F00063  LDS	R31,LCD_IP_PORT+1
    03D9 8140      LDD	R20,Z+0
(0174)     CLEAR_LCD_E;
    03DA 90200073  LDS	R2,LCD_EN_BIT
    03DC 9420      COM	R2
    03DD 91E00068  LDS	R30,LCD_EN_PORT
    03DF 91F00069  LDS	R31,LCD_EN_PORT+1
    03E1 8030      LDD	R3,Z+0
    03E2 2032      AND	R3,R2
    03E3 8230      STD	Z+0,R3
(0175)     SET_LCD_WRITE;
    03E4 90200076  LDS	R2,LCD_RW_BIT
    03E6 9420      COM	R2
    03E7 91E0006E  LDS	R30,LCD_RW_PORT
    03E9 91F0006F  LDS	R31,LCD_RW_PORT+1
    03EB 8030      LDD	R3,Z+0
    03EC 2032      AND	R3,R2
    03ED 8230      STD	Z+0,R3
(0176) 
(0177)     asm("sei");
    03EE 9478      BSET	7
(0178)     return data;
    03EF 2F04      MOV	R16,R20
    03F0 940E098A  CALL	pop_gset2
    03F2 9508      RET
_set_start_line_L:
  line                 --> R20
    03F3 940E099B  CALL	push_gset1
    03F5 2F40      MOV	R20,R16
    03F6 9721      SBIW	R28,1
(0179) }
(0180) 
(0181) void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63
(0182) {
(0183)     write_LCD(LEFT,CMD,0xc0|line); 
    03F7 2F84      MOV	R24,R20
    03F8 6C80      ORI	R24,0xC0
    03F9 8388      STD	Y+0,R24
    03FA 2722      CLR	R18
    03FB 2700      CLR	R16
    03FC DF0E      RCALL	_write_LCD
    03FD 9621      ADIW	R28,1
    03FE 940E099E  CALL	pop_gset1
    0400 9508      RET
_set_start_line_R:
  line                 --> R20
    0401 940E099B  CALL	push_gset1
    0403 2F40      MOV	R20,R16
    0404 9721      SBIW	R28,1
(0184) }
(0185) 
(0186) void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63
(0187) {
(0188)     write_LCD(RIGHT,CMD,0xc0|line); 
    0405 2F84      MOV	R24,R20
    0406 6C80      ORI	R24,0xC0
    0407 8388      STD	Y+0,R24
    0408 2722      CLR	R18
    0409 E001      LDI	R16,1
    040A DF00      RCALL	_write_LCD
    040B 9621      ADIW	R28,1
    040C 940E099E  CALL	pop_gset1
    040E 9508      RET
_set_page_L:
  page                 --> R20
    040F 940E099B  CALL	push_gset1
    0411 2F40      MOV	R20,R16
    0412 9721      SBIW	R28,1
(0189) }
(0190) 
(0191) void set_page_L(unsigned char page)	/*设置X地址 设置页*/  //0-7
(0192) {
(0193)     write_LCD(LEFT,CMD,0xb8|page);                     
    0413 2F84      MOV	R24,R20
    0414 6B88      ORI	R24,0xB8
    0415 8388      STD	Y+0,R24
    0416 2722      CLR	R18
    0417 2700      CLR	R16
    0418 DEF2      RCALL	_write_LCD
    0419 9621      ADIW	R28,1
    041A 940E099E  CALL	pop_gset1
    041C 9508      RET
_set_page_R:
  page                 --> R20
    041D 940E099B  CALL	push_gset1
    041F 2F40      MOV	R20,R16
    0420 9721      SBIW	R28,1
(0194) }
(0195) void set_page_R(unsigned char page)	/*设置X地址 设置页*/ //0-7
(0196) {
(0197)     write_LCD(RIGHT,CMD,0xb8|page);                     
    0421 2F84      MOV	R24,R20
    0422 6B88      ORI	R24,0xB8
    0423 8388      STD	Y+0,R24
    0424 2722      CLR	R18
    0425 E001      LDI	R16,1
    0426 DEE4      RCALL	_write_LCD
    0427 9621      ADIW	R28,1
    0428 940E099E  CALL	pop_gset1
    042A 9508      RET
_set_col_addr_L:
  col                  --> R20
    042B 940E099B  CALL	push_gset1
    042D 2F40      MOV	R20,R16
    042E 9721      SBIW	R28,1
(0198) }
(0199) 
(0200) void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
(0201) {
(0202)     write_LCD(LEFT,CMD,0x40|col);                     
    042F 2F84      MOV	R24,R20
    0430 6480      ORI	R24,0x40
    0431 8388      STD	Y+0,R24
    0432 2722      CLR	R18
    0433 2700      CLR	R16
    0434 DED6      RCALL	_write_LCD
    0435 9621      ADIW	R28,1
    0436 940E099E  CALL	pop_gset1
    0438 9508      RET
_set_col_addr_R:
  col                  --> R20
    0439 940E099B  CALL	push_gset1
    043B 2F40      MOV	R20,R16
    043C 9721      SBIW	R28,1
(0203) }
(0204) 
(0205) void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
(0206) {
(0207)     write_LCD(RIGHT,CMD,0x40|col);                     
    043D 2F84      MOV	R24,R20
    043E 6480      ORI	R24,0x40
    043F 8388      STD	Y+0,R24
    0440 2722      CLR	R18
    0441 E001      LDI	R16,1
    0442 DEC8      RCALL	_write_LCD
    0443 9621      ADIW	R28,1
    0444 940E099E  CALL	pop_gset1
    0446 9508      RET
_init_lcd:
    0447 9721      SBIW	R28,1
(0208) }
(0209) 
(0210) void init_lcd(void) /*初始化函数*/
(0211) {    delay_nms(1000);
    0448 EE08      LDI	R16,0xE8
    0449 E013      LDI	R17,3
    044A DE1C      RCALL	_delay_nms
(0212)     REST_LCD;  
    044B 90200072  LDS	R2,LCD_RES_BIT
    044D 91E00066  LDS	R30,LCD_RES_PORT
    044F 91F00067  LDS	R31,LCD_RES_PORT+1
    0451 8030      LDD	R3,Z+0
    0452 2832      OR	R3,R2
    0453 8230      STD	Z+0,R3
(0213) 	delay_nms(1000);
    0454 EE08      LDI	R16,0xE8
    0455 E013      LDI	R17,3
    0456 DE10      RCALL	_delay_nms
(0214)     set_start_line_L(0); /*显示起始行为0*/
    0457 2700      CLR	R16
    0458 DF9A      RCALL	_set_start_line_L
(0215)     set_start_line_R(0); /*显示起始行为0*/
    0459 2700      CLR	R16
    045A DFA6      RCALL	_set_start_line_R
(0216)     write_LCD(LEFT,CMD,DISPLAY_ON); /*  开显示  */
    045B E38F      LDI	R24,0x3F
    045C 8388      STD	Y+0,R24
    045D 2722      CLR	R18
    045E 2700      CLR	R16
    045F DEAB      RCALL	_write_LCD
(0217)     write_LCD(RIGHT,CMD,DISPLAY_ON); /*  开显示  */
    0460 E38F      LDI	R24,0x3F
    0461 8388      STD	Y+0,R24
    0462 2722      CLR	R18
    0463 E001      LDI	R16,1
    0464 DEA6      RCALL	_write_LCD
    0465 9621      ADIW	R28,1
    0466 9508      RET
_clr_lcd:
  pages                --> R20
  i                    --> R22
    0467 940E0999  CALL	push_gset2
    0469 9721      SBIW	R28,1
(0218) }
(0219) 
(0220) void clr_lcd(void) /*清屏函数*/
(0221) {
(0222)     unsigned char pages,i;
(0223)     for(pages=0;pages<8;pages++)
    046A 2744      CLR	R20
    046B C018      RJMP	0x0484
(0224)     {
(0225)         set_page_L(pages);  /* X 页地址 */
    046C 2F04      MOV	R16,R20
    046D DFA1      RCALL	_set_page_L
(0226)         set_page_R(pages);  /* X 页地址 */
    046E 2F04      MOV	R16,R20
    046F DFAD      RCALL	_set_page_R
(0227)         for(i=0;i<64;i++)   
    0470 2766      CLR	R22
    0471 C00F      RJMP	0x0481
(0228)         {
(0229)             set_col_addr_L(i);//Y
    0472 2F06      MOV	R16,R22
    0473 DFB7      RCALL	_set_col_addr_L
(0230)             set_col_addr_R(i);//Y
    0474 2F06      MOV	R16,R22
    0475 DFC3      RCALL	_set_col_addr_R
(0231)             write_LCD(LEFT,DATA,0x0);
    0476 2422      CLR	R2
    0477 8228      STD	Y+0,R2
    0478 E021      LDI	R18,1
    0479 2700      CLR	R16
    047A DE90      RCALL	_write_LCD
(0232)             write_LCD(RIGHT,DATA,0x0);
    047B 2422      CLR	R2
    047C 8228      STD	Y+0,R2
    047D E021      LDI	R18,1
    047E E001      LDI	R16,1
    047F DE8B      RCALL	_write_LCD
    0480 9563      INC	R22
    0481 3460      CPI	R22,0x40
    0482 F378      BCS	0x0472
    0483 9543      INC	R20
    0484 3048      CPI	R20,0x8
    0485 F330      BCS	0x046C
    0486 9621      ADIW	R28,1
    0487 940E098A  CALL	pop_gset2
    0489 9508      RET
(0233)         }
(0234)     }
(0235) }
(0236) 
(0237) //ASCII 字模宽度及高度
(0238) #define ASC_CHR_WIDTH	8
(0239) #define ASC_CHR_HEIGHT	12
(0240) 
(0241) typedef struct typFNT_ASC16	/* 汉字字模显示数据结构 */
(0242) {
(0243)     char Index[1];
(0244)     char Msk[16];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -