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

📄 ks0108_12864lcd_m16.lst

📁 ks0108 avr单片机1284显示
💻 LST
📖 第 1 页 / 共 4 页
字号:
     631 840F      LDD	R0,Y+15
     632 9D80      MUL	R24,R0
     633 0110      MOVW	R2,R0
     634 880B      LDD	R0,Y+19
     635 881C      LDD	R1,Y+20
     636 0C20      ADD	R2,R0
     637 1C31      ADC	R3,R1
     638 9D8A      MUL	R24,R10
     639 0120      MOVW	R4,R0
     63A 0C42      ADD	R4,R2
     63B 1C53      ADC	R5,R3
     63C 2FE6      MOV	R30,R22
     63D 27FF      CLR	R31
     63E 0DE4      ADD	R30,R4
     63F 1DF5      ADC	R31,R5
     640 9104      LPM	R16,20(Z)
     641 DF4C      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     642 9563      INC	R22
     643 2C2C      MOV	R2,R12
     644 0C22      LSL	R2
     645 1562      CP	R22,R2
     646 F2C8      BCS	0x0620
(0432) 		                     D_DATA, Video_Mode);
(0433)          }      
(0434) 	  Y = Y + Char_Length + Char_Gap;
     647 2C2E      MOV	R2,R14
     648 0C2C      ADD	R2,R12
     649 8809      LDD	R0,Y+17
     64A 0C20      ADD	R2,R0
     64B 2CE2      MOV	R14,R2
(0435) 	  nm++;
     64C 94A3      INC	R10
     64D 840D      LDD	R0,Y+13
     64E 14A0      CP	R10,R0
     64F F270      BCS	0x061E
     650 9621      ADIW	R28,1
     651 940C 06EB 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
     653 940E 06C7 CALL	push_arg4
     655 940E 06F6 CALL	push_xgsetF0FC
     657 2F62      MOV	R22,R18
     658 9721      SBIW	R28,1
     659 88A9      LDD	R10,Y+17
     65A 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) 
     65B E018      LDI	R17,0x8
     65C 2D0A      MOV	R16,R10
     65D 940E 06CC CALL	mod8u
     65F 2300      TST	R16
     660 F429      BNE	0x0666
(0469)       Page = Pixel_X / 8;   
     661 2D4A      MOV	R20,R10
     662 9546      LSR	R20
     663 9546      LSR	R20
     664 9546      LSR	R20
     665 C005      RJMP	0x066B
(0470)    else
(0471)       Page = Pixel_X / 8 + 1;  
     666 2D4A      MOV	R20,R10
     667 9546      LSR	R20
     668 9546      LSR	R20
     669 9546      LSR	R20
     66A 5F4F      SUBI	R20,0xFF
(0472)       
(0473)    // Now send the Image
(0474)    for (pg = 0; pg < Page; pg++)
     66B 24AA      CLR	R10
     66C C019      RJMP	0x0686
(0475)       {  
(0476) 	  // Send Image data
(0477)       for(cl = 0; cl < Pixel_Y; cl++)
     66D 24EE      CLR	R14
     66E C014      RJMP	0x0683
(0478)          {
(0479) 		 // Set coordinates
(0480)          LCD_Set_XY(X + pg, Y + cl);
     66F 2F26      MOV	R18,R22
     670 0D2E      ADD	R18,R14
     671 850B      LDD	R16,Y+11
     672 0D0A      ADD	R16,R10
     673 DF3C      RCALL	_LCD_Set_XY
(0481) 		 	 
(0482)          LCD_Send_Byte(pImage[cl + Pixel_Y * pg], D_DATA, Video_Mode);
     674 880D      LDD	R0,Y+21
     675 8208      STD	Y+0,R0
     676 E021      LDI	R18,1
     677 9CCA      MUL	R12,R10
     678 2DEE      MOV	R30,R14
     679 27FF      CLR	R31
     67A 0DE0      ADD	R30,R0
     67B 1DF1      ADC	R31,R1
     67C 840F      LDD	R0,Y+15
     67D 8818      LDD	R1,Y+16
     67E 0DE0      ADD	R30,R0
     67F 1DF1      ADC	R31,R1
     680 9104      LPM	R16,16(Z)
     681 DF0C      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     682 94E3      INC	R14
     683 14EC      CP	R14,R12
     684 F350      BCS	0x066F
     685 94A3      INC	R10
     686 16A4      CP	R10,R20
     687 F328      BCS	0x066D
     688 9621      ADIW	R28,1
     689 940E 06EB CALL	pop_xgsetF0FC
     68B 9624      ADIW	R28,4
     68C 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:
     68D 940E 06FA CALL	push_xgset00FC
     68F 2EE2      MOV	R14,R18
     690 2EA0      MOV	R10,R16
     691 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;
     692 2CCA      MOV	R12,R10
     693 94C6      LSR	R12
     694 94C6      LSR	R12
     695 94C6      LSR	R12
(0506)    
(0507)    // Find which bit of the data should be lit up
(0508)    Which_Bit_Should_be_Lit = (1 << (X % 8)); 
     696 E018      LDI	R17,0x8
     697 2D0A      MOV	R16,R10
     698 940E 06CC CALL	mod8u
     69A 2F10      MOV	R17,R16
     69B E001      LDI	R16,1
     69C 940E 072B CALL	lsl8
     69E 2EA0      MOV	R10,R16
(0509)    
(0510)    LCD_Set_XY(Page, Y);
     69F 2D2E      MOV	R18,R14
     6A0 2D0C      MOV	R16,R12
     6A1 DF0E      RCALL	_LCD_Set_XY
(0511)  
(0512)    LCD_DATA_PORT = 0xFF;  
     6A2 EF8F      LDI	R24,0xFF
     6A3 BB8B      OUT	0x1B,R24
(0513)    LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction
     6A4 2422      CLR	R2
     6A5 BA2A      OUT	0x1A,R2
(0514) 
(0515)    LCD_INSTR_PORT |=  LCD_DI; // Set data
     6A6 9A90      SBI	0x12,0
(0516)    LCD_INSTR_PORT |=  LCD_RW; // Set read
     6A7 9A91      SBI	0x12,1
(0517)    
(0518)    LCD_INSTR_PORT |=  LCD_EN;
     6A8 9A92      SBI	0x12,2
(0519)    asm("nop");	
     6A9 0000      NOP
(0520)    asm("nop");
     6AA 0000      NOP
(0521)     
(0522)    LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
     6AB 9892      CBI	0x12,2
(0523)    asm("nop");	
     6AC 0000      NOP
(0524)    asm("nop");
     6AD 0000      NOP
(0525)     
(0526)    if (Video_Mode) // Clear a dot on the panel
     6AE 800F      LDD	R0,Y+7
     6AF 2000      TST	R0
     6B0 F031      BEQ	0x06B7
(0527)       Which_Bit_Should_be_Lit = (~Which_Bit_Should_be_Lit & LCD_DATA_PORT_VL);
     6B1 B229      IN	R2,0x19
     6B2 2C3A      MOV	R3,R10
     6B3 9430      COM	R3
     6B4 2032      AND	R3,R2
     6B5 2CA3      MOV	R10,R3
     6B6 C002      RJMP	0x06B9
(0528) 	  
(0529)    else            // Set a dot on the panel
(0530)       Which_Bit_Should_be_Lit = (Which_Bit_Should_be_Lit | LCD_DATA_PORT_VL); 
     6B7 B229      IN	R2,0x19
     6B8 28A2      OR	R10,R2
(0531)   
(0532)    LCD_DATA_PORT_DIR = OUTPUT; // Set data PORT direction back to an output
     6B9 EF8F      LDI	R24,0xFF
     6BA BB8A      OUT	0x1A,R24
(0533)    LCD_INSTR_PORT &= ~LCD_EN;
     6BB 9892      CBI	0x12,2
(0534)    
(0535)    LCD_Set_XY(Page, Y);
     6BC 2D2E      MOV	R18,R14
     6BD 2D0C      MOV	R16,R12
     6BE DEF1      RCALL	_LCD_Set_XY
(0536)    LCD_Send_Byte(Which_Bit_Should_be_Lit, D_DATA, NORMAL);     
FILE: <library>
     6BF 2422      CLR	R2
     6C0 8228      STD	Y+0,R2
     6C1 E021      LDI	R18,1
     6C2 2D0A      MOV	R16,R10
     6C3 DECA      RCALL	KS0108_12864LCD.C:LCD_Send_Byte
     6C4 9621      ADIW	R28,1
     6C5 940C 06E4 JMP	pop_xgset00FC
push_arg4:
     6C7 933A      ST	R19,-Y
     6C8 932A      ST	R18,-Y
push_arg2:
     6C9 931A      ST	R17,-Y
     6CA 930A      ST	R16,-Y
     6CB 9508      RET
mod8u:
     6CC 9468      BSET	6
     6CD C001      RJMP	xdiv8u
div8u:
     6CE 94E8      BCLR	6
xdiv8u:
     6CF 932A      ST	R18,-Y
     6D0 92FA      ST	R15,-Y
     6D1 92EA      ST	R14,-Y
     6D2 24FF      CLR	R15
     6D3 24EE      CLR	R14
     6D4 E120      LDI	R18,0x10
     6D5 0F00      LSL	R16
     6D6 1CFF      ROL	R15
     6D7 1CEE      ROL	R14
     6D8 16E1      CP	R14,R17
     6D9 F010      BCS	0x06DC
     6DA 1AE1      SUB	R14,R17
     6DB 9503      INC	R16
     6DC 952A      DEC	R18
     6DD F7B9      BNE	0x06D5
     6DE F40E      BRTC	0x06E0
     6DF 2D0E      MOV	R16,R14
     6E0 90E9      LD	R14,Y+
     6E1 90F9      LD	R15,Y+
     6E2 9129      LD	R18,Y+
     6E3 9508      RET
pop_xgset00FC:
     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 9508      RET
pop_xgsetF0FC:
     6EB 90A9      LD	R10,Y+
     6EC 90B9      LD	R11,Y+
     6ED 90C9      LD	R12,Y+
     6EE 90D9      LD	R13,Y+
     6EF 90E9      LD	R14,Y+
     6F0 90F9      LD	R15,Y+
     6F1 9149      LD	R20,Y+
     6F2 9159      LD	R21,Y+
     6F3 9169      LD	R22,Y+
     6F4 9179      LD	R23,Y+
     6F5 9508      RET
push_xgsetF0FC:
     6F6 937A      ST	R23,-Y
     6F7 936A      ST	R22,-Y
push_xgset30FC:
     6F8 935A      ST	R21,-Y
     6F9 934A      ST	R20,-Y
push_xgset00FC:
     6FA 92FA      ST	R15,-Y
     6FB 92EA      ST	R14,-Y
push_xgset003C:
     6FC 92DA      ST	R13,-Y
     6FD 92CA      ST	R12,-Y
     6FE 92BA      ST	R11,-Y
     6FF 92AA      ST	R10,-Y
     700 9508      RET
push_xgsetF000:
     701 937A      ST	R23,-Y
     702 936A      ST	R22,-Y
     703 935A      ST	R21,-Y
     704 934A      ST	R20,-Y
     705 9508      RET
pop_xgsetF000:
     706 9149      LD	R20,Y+
     707 9159      LD	R21,Y+
     708 9169      LD	R22,Y+
     709 9179      LD	R23,Y+
     70A 9508      RET
push_xgsetF00C:
     70B 937A      ST	R23,-Y
     70C 936A      ST	R22,-Y
     70D 935A      ST	R21,-Y
     70E 934A      ST	R20,-Y
     70F 92BA      ST	R11,-Y
     710 92AA      ST	R10,-Y
     711 9508      RET
pop_xgsetF00C:
     712 90A9      LD	R10,Y+
     713 90B9      LD	R11,Y+
     714 9149      LD	R20,Y+
     715 9159      LD	R21,Y+
     716 9169      LD	R22,Y+
     717 9179      LD	R23,Y+
     718 9508      RET
push_xgsetF03C:
     719 937A      ST	R23,-Y
     71A 936A      ST	R22,-Y
     71B 935A      ST	R21,-Y
     71C 934A      ST	R20,-Y
     71D 92DA      ST	R13,-Y
     71E 92CA      ST	R12,-Y
     71F 92BA      ST	R11,-Y
     720 92AA      ST	R10,-Y
     721 9508      RET
pop_xgsetF03C:
     722 90A9      LD	R10,Y+
     723 90B9      LD	R11,Y+
     724 90C9      LD	R12,Y+
     725 90D9      LD	R13,Y+
     726 9149      LD	R20,Y+
     727 9159      LD	R21,Y+
     728 9169      LD	R22,Y+
     729 9179      LD	R23,Y+
     72A 9508      RET
lsl8:
     72B 2311      TST	R17
     72C F019      BEQ	0x0730
     72D 0F00      LSL	R16
     72E 951A      DEC	R17
     72F CFFB      RJMP	lsl8
     730 9508      RET

⌨️ 快捷键说明

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