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

📄 ks0108_12864lcd_m16.lst

📁 ks0108 avr单片机1284显示
💻 LST
📖 第 1 页 / 共 4 页
字号:
     62B 9D80      MUL	R24,R0
     62C 0110      MOVW	R2,R0
     62D 880B      LDD	R0,Y+19
     62E 881C      LDD	R1,Y+20
     62F 0C20      ADD	R2,R0
     630 1C31      ADC	R3,R1
     631 9D8A      MUL	R24,R10
     632 0120      MOVW	R4,R0
     633 0C42      ADD	R4,R2
     634 1C53      ADC	R5,R3
     635 2FE6      MOV	R30,R22
     636 27FF      CLR	R31
     637 0DE4      ADD	R30,R4
     638 1DF5      ADC	R31,R5
     639 9104      LPM	R16,20(Z)
     63A DF53      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     63B 9563      INC	R22
     63C 2C2C      MOV	R2,R12
     63D 0C22      LSL	R2
     63E 1562      CP	R22,R2
     63F F2C8      BCS	0x0619
(0432) 		                     D_DATA, Video_Mode);
(0433)          }      
(0434) 	  Y = Y + Char_Length + Char_Gap;
     640 2C2E      MOV	R2,R14
     641 0C2C      ADD	R2,R12
     642 8809      LDD	R0,Y+17
     643 0C20      ADD	R2,R0
     644 2CE2      MOV	R14,R2
(0435) 	  nm++;
     645 94A3      INC	R10
     646 840D      LDD	R0,Y+13
     647 14A0      CP	R10,R0
     648 F270      BCS	0x0617
     649 9621      ADIW	R28,1
     64A 940C 06E4 JMP	pop_xgsetF0FC
KS0108_12864LCD.C:LCD_Disp_an_Image:
_LCD_Disp_an_Image:
  Page                 --> R20
  pg                   --> R10
  cl                   --> R14
  Video_Mode           --> Y,+21
  Pixel_Y              --> R12
  Pixel_X              --> R10
  pImage               --> Y,+15
  Y                    --> R22
  X                    --> Y,+11
     64C 940E 06C0 CALL	push_arg4
     64E 940E 06EF CALL	push_xgsetF0FC
     650 2F62      MOV	R22,R18
     651 9721      SBIW	R28,1
     652 88A9      LDD	R10,Y+17
     653 88CB      LDD	R12,Y+19
(0436)       }
(0437)    }
(0438) 
(0439) /*----------------------------------------------------------------------------*-
(0440) 
(0441)    LCD_Disp_an_Image() 
(0442) 
(0443)    Display an Image on the LCD panel.
(0444) 
(0445)    Parameters: 
(0446)    ---------------------------------------------------------------------------
(0447)    X, Y             : The Image start coordinates on the LCD panel
(0448)     
(0449)    pImage           : Image data pointer (Image stored in Flash area)
(0450) 
(0451)    pixel_X, pixel_Y : The Image's size
(0452)    
(0453)                       Pixel_X, the height of the Image (in pixel)
(0454) 					  Pixel_Y, the length of the Image (in pixel)
(0455) 					  
(0456)    Video_Mode : If Video_Mode == INVERSE(1), inverse video mode			   
(0457)                 If Video_Mode == NORMAL(0), normal video mode
(0458) 
(0459) -*----------------------------------------------------------------------------*/
(0460) static void LCD_Disp_an_Image(uInt8 X, uInt8 Y, flash uInt8 * pImage,
(0461)                               uInt8 Pixel_X, uInt8 Pixel_Y, uInt8 Video_Mode)
(0462)    {   
(0463)    uInt8 cl, pg;
(0464)    uInt8 Page;
(0465)    
(0466)    // Figure out needs how many Pages
(0467)    // to display the Image  
(0468)    if (Pixel_X % 8 == 0) 
     654 E018      LDI	R17,0x8
     655 2D0A      MOV	R16,R10
     656 940E 06C5 CALL	mod8u
     658 2300      TST	R16
     659 F429      BNE	0x065F
(0469)       Page = Pixel_X / 8;   
     65A 2D4A      MOV	R20,R10
     65B 9546      LSR	R20
     65C 9546      LSR	R20
     65D 9546      LSR	R20
     65E C005      RJMP	0x0664
(0470)    else
(0471)       Page = Pixel_X / 8 + 1;  
     65F 2D4A      MOV	R20,R10
     660 9546      LSR	R20
     661 9546      LSR	R20
     662 9546      LSR	R20
     663 5F4F      SUBI	R20,0xFF
(0472)       
(0473)    // Now send the Image
(0474)    for (pg = 0; pg < Page; pg++)
     664 24AA      CLR	R10
     665 C019      RJMP	0x067F
(0475)       {  
(0476) 	  // Send Image data
(0477)       for(cl = 0; cl < Pixel_Y; cl++)
     666 24EE      CLR	R14
     667 C014      RJMP	0x067C
(0478)          {
(0479) 		 // Set coordinates
(0480)          LCD_Set_XY(X + pg, Y + cl);
     668 2F26      MOV	R18,R22
     669 0D2E      ADD	R18,R14
     66A 850B      LDD	R16,Y+11
     66B 0D0A      ADD	R16,R10
     66C DF3C      RCALL	_LCD_Set_XY
(0481) 		 	 
(0482)          LCD_Send_Byte(pImage[cl + Pixel_Y * pg], D_DATA, Video_Mode);
     66D 880D      LDD	R0,Y+21
     66E 8208      STD	Y+0,R0
     66F E021      LDI	R18,1
     670 9CCA      MUL	R12,R10
     671 2DEE      MOV	R30,R14
     672 27FF      CLR	R31
     673 0DE0      ADD	R30,R0
     674 1DF1      ADC	R31,R1
     675 840F      LDD	R0,Y+15
     676 8818      LDD	R1,Y+16
     677 0DE0      ADD	R30,R0
     678 1DF1      ADC	R31,R1
     679 9104      LPM	R16,16(Z)
     67A DF13      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     67B 94E3      INC	R14
     67C 14EC      CP	R14,R12
     67D F350      BCS	0x0668
     67E 94A3      INC	R10
     67F 16A4      CP	R10,R20
     680 F328      BCS	0x0666
     681 9621      ADIW	R28,1
     682 940E 06E4 CALL	pop_xgsetF0FC
     684 9624      ADIW	R28,4
     685 9508      RET
_LCD_Draw_a_Dot:
  Page                 --> R12
  Which_Bit_Should_be_Lit --> R10
  Video_Mode           --> Y,+7
  Y                    --> R14
  X                    --> R10
KS0108_12864LCD.C:LCD_Draw_a_Dot:
     686 940E 06F3 CALL	push_xgset00FC
     688 2EE2      MOV	R14,R18
     689 2EA0      MOV	R10,R16
     68A 9721      SBIW	R28,1
(0483)          }                       
(0484)       }      
(0485)    }
(0486)    
(0487) /*----------------------------------------------------------------------------*-
(0488) 
(0489)    LCD_Draw_a_Dot() 
(0490) 
(0491)    Draw a dot (one pixel) on specific location of the LCD panel.
(0492) 
(0493)    Parameters: 
(0494)    ---------------------------------------------------------------------------
(0495)    X, Y             : The dot location on the LCD panel
(0496)    
(0497)    X range : (0 ~ 63), Y range : (0 ~ 127) 
(0498) 
(0499) -*----------------------------------------------------------------------------*/
(0500) static void LCD_Draw_a_Dot(uInt8 X, uInt8 Y, uInt8 Video_Mode)
(0501)    {   
(0502)    uInt8 Page, Which_Bit_Should_be_Lit;
(0503)    
(0504)    // Figure out which Page the dot locate  
(0505)    Page = X / 8;
     68B 2CCA      MOV	R12,R10
     68C 94C6      LSR	R12
     68D 94C6      LSR	R12
     68E 94C6      LSR	R12
(0506)    
(0507)    // Find which bit of the data should be lit up
(0508)    Which_Bit_Should_be_Lit = (1 << (X % 8)); 
     68F E018      LDI	R17,0x8
     690 2D0A      MOV	R16,R10
     691 940E 06C5 CALL	mod8u
     693 2F10      MOV	R17,R16
     694 E001      LDI	R16,1
     695 940E 0724 CALL	lsl8
     697 2EA0      MOV	R10,R16
(0509)    
(0510)    LCD_Set_XY(Page, Y);
     698 2D2E      MOV	R18,R14
     699 2D0C      MOV	R16,R12
     69A DF0E      RCALL	_LCD_Set_XY
(0511)  
(0512)    LCD_DATA_PORT = 0xFF;  
     69B EF8F      LDI	R24,0xFF
     69C BB8B      OUT	0x1B,R24
(0513)    LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction
     69D 2422      CLR	R2
     69E BA2A      OUT	0x1A,R2
(0514) 
(0515)    LCD_INSTR_PORT |=  LCD_DI; // Set data
     69F 9A90      SBI	0x12,0
(0516)    LCD_INSTR_PORT |=  LCD_RW; // Set read
     6A0 9A91      SBI	0x12,1
(0517)    
(0518)    LCD_INSTR_PORT |=  LCD_EN;
     6A1 9A92      SBI	0x12,2
(0519)    asm("nop");	
     6A2 0000      NOP
(0520)    asm("nop");
     6A3 0000      NOP
(0521)     
(0522)    LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
     6A4 9892      CBI	0x12,2
(0523)    asm("nop");	
     6A5 0000      NOP
(0524)    asm("nop");
     6A6 0000      NOP
(0525)     
(0526)    if (Video_Mode) // Clear a dot on the panel
     6A7 800F      LDD	R0,Y+7
     6A8 2000      TST	R0
     6A9 F031      BEQ	0x06B0
(0527)       Which_Bit_Should_be_Lit = (~Which_Bit_Should_be_Lit & LCD_DATA_PORT_VL);
     6AA B229      IN	R2,0x19
     6AB 2C3A      MOV	R3,R10
     6AC 9430      COM	R3
     6AD 2032      AND	R3,R2
     6AE 2CA3      MOV	R10,R3
     6AF C002      RJMP	0x06B2
(0528) 	  
(0529)    else            // Set a dot on the panel
(0530)       Which_Bit_Should_be_Lit = (Which_Bit_Should_be_Lit | LCD_DATA_PORT_VL); 
     6B0 B229      IN	R2,0x19
     6B1 28A2      OR	R10,R2
(0531)   
(0532)    LCD_DATA_PORT_DIR = OUTPUT; // Set data PORT direction back to an output
     6B2 EF8F      LDI	R24,0xFF
     6B3 BB8A      OUT	0x1A,R24
(0533)    LCD_INSTR_PORT &= ~LCD_EN;
     6B4 9892      CBI	0x12,2
(0534)    
(0535)    LCD_Set_XY(Page, Y);
     6B5 2D2E      MOV	R18,R14
     6B6 2D0C      MOV	R16,R12
     6B7 DEF1      RCALL	_LCD_Set_XY
(0536)    LCD_Send_Byte(Which_Bit_Should_be_Lit, D_DATA, NORMAL);     
FILE: <library>
     6B8 2422      CLR	R2
     6B9 8228      STD	Y+0,R2
     6BA E021      LDI	R18,1
     6BB 2D0A      MOV	R16,R10
     6BC DED1      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     6BD 9621      ADIW	R28,1
     6BE 940C 06DD JMP	pop_xgset00FC
push_arg4:
     6C0 933A      ST	R19,-Y
     6C1 932A      ST	R18,-Y
push_arg2:
     6C2 931A      ST	R17,-Y
     6C3 930A      ST	R16,-Y
     6C4 9508      RET
mod8u:
     6C5 9468      BSET	6
     6C6 C001      RJMP	xdiv8u
div8u:
     6C7 94E8      BCLR	6
xdiv8u:
     6C8 932A      ST	R18,-Y
     6C9 92FA      ST	R15,-Y
     6CA 92EA      ST	R14,-Y
     6CB 24FF      CLR	R15
     6CC 24EE      CLR	R14
     6CD E120      LDI	R18,0x10
     6CE 0F00      LSL	R16
     6CF 1CFF      ROL	R15
     6D0 1CEE      ROL	R14
     6D1 16E1      CP	R14,R17
     6D2 F010      BCS	0x06D5
     6D3 1AE1      SUB	R14,R17
     6D4 9503      INC	R16
     6D5 952A      DEC	R18
     6D6 F7B9      BNE	0x06CE
     6D7 F40E      BRTC	0x06D9
     6D8 2D0E      MOV	R16,R14
     6D9 90E9      LD	R14,Y+
     6DA 90F9      LD	R15,Y+
     6DB 9129      LD	R18,Y+
     6DC 9508      RET
pop_xgset00FC:
     6DD 90A9      LD	R10,Y+
     6DE 90B9      LD	R11,Y+
     6DF 90C9      LD	R12,Y+
     6E0 90D9      LD	R13,Y+
     6E1 90E9      LD	R14,Y+
     6E2 90F9      LD	R15,Y+
     6E3 9508      RET
pop_xgsetF0FC:
     6E4 90A9      LD	R10,Y+
     6E5 90B9      LD	R11,Y+
     6E6 90C9      LD	R12,Y+
     6E7 90D9      LD	R13,Y+
     6E8 90E9      LD	R14,Y+
     6E9 90F9      LD	R15,Y+
     6EA 9149      LD	R20,Y+
     6EB 9159      LD	R21,Y+
     6EC 9169      LD	R22,Y+
     6ED 9179      LD	R23,Y+
     6EE 9508      RET
push_xgsetF0FC:
     6EF 937A      ST	R23,-Y
     6F0 936A      ST	R22,-Y
push_xgset30FC:
     6F1 935A      ST	R21,-Y
     6F2 934A      ST	R20,-Y
push_xgset00FC:
     6F3 92FA      ST	R15,-Y
     6F4 92EA      ST	R14,-Y
push_xgset003C:
     6F5 92DA      ST	R13,-Y
     6F6 92CA      ST	R12,-Y
     6F7 92BA      ST	R11,-Y
     6F8 92AA      ST	R10,-Y
     6F9 9508      RET
push_xgsetF000:
     6FA 937A      ST	R23,-Y
     6FB 936A      ST	R22,-Y
     6FC 935A      ST	R21,-Y
     6FD 934A      ST	R20,-Y
     6FE 9508      RET
pop_xgsetF000:
     6FF 9149      LD	R20,Y+
     700 9159      LD	R21,Y+
     701 9169      LD	R22,Y+
     702 9179      LD	R23,Y+
     703 9508      RET
push_xgsetF00C:
     704 937A      ST	R23,-Y
     705 936A      ST	R22,-Y
     706 935A      ST	R21,-Y
     707 934A      ST	R20,-Y
     708 92BA      ST	R11,-Y
     709 92AA      ST	R10,-Y
     70A 9508      RET
pop_xgsetF00C:
     70B 90A9      LD	R10,Y+
     70C 90B9      LD	R11,Y+
     70D 9149      LD	R20,Y+
     70E 9159      LD	R21,Y+
     70F 9169      LD	R22,Y+
     710 9179      LD	R23,Y+
     711 9508      RET
push_xgsetF03C:
     712 937A      ST	R23,-Y
     713 936A      ST	R22,-Y
     714 935A      ST	R21,-Y
     715 934A      ST	R20,-Y
     716 92DA      ST	R13,-Y
     717 92CA      ST	R12,-Y
     718 92BA      ST	R11,-Y
     719 92AA      ST	R10,-Y
     71A 9508      RET
pop_xgsetF03C:
     71B 90A9      LD	R10,Y+
     71C 90B9      LD	R11,Y+
     71D 90C9      LD	R12,Y+
     71E 90D9      LD	R13,Y+
     71F 9149      LD	R20,Y+
     720 9159      LD	R21,Y+
     721 9169      LD	R22,Y+
     722 9179      LD	R23,Y+
     723 9508      RET
lsl8:
     724 2311      TST	R17
     725 F019      BEQ	0x0729
     726 0F00      LSL	R16
     727 951A      DEC	R17
     728 CFFB      RJMP	lsl8
     729 9508      RET

⌨️ 快捷键说明

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