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

📄 ks0108_12864lcd.lis

📁 ks0108 avr单片机1284显示
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03E2           ;       
 03E2           ; -*----------------------------------------------------------------------------*/                        
 03E2           ; static void LCD_Disp_Chinese_String (uInt8 X, uInt8 Y, 
 03E2           ;                                      uInt8 Char_Length, uInt8 Char_Amount,
 03E2           ;                                      uInt8 Start_Char, uInt8 Char_Gap,
 03E2           ;                                                                        flash uInt8 (* pCN_String)[32], 
 03E2           ;                                                                        uInt8 Video_Mode)
 03E2           ;    {
 03E2                   .dbline 416
 03E2           ;    uInt8 cl, nm; 
 03E2           ;     
 03E2           ;    for (nm = 0; nm < Char_Amount; )
 03E2 AA24              clr R10
 03E4 2FC0              xjmp L77
 03E6           L74:
 03E6                   .dbline 417
 03E6           ;       {
 03E6                   .dbline 418
 03E6           ;       for (cl = 0; cl < Char_Length * 2; cl++) // Send a Chinese character
 03E6 6627              clr R22
 03E8 23C0              xjmp L81
 03EA           L78:
 03EA                   .dbline 419
 03EA           ;          { 
 03EA                   .dbline 420
 03EA           ;                if (cl >= Char_Length)  
 03EA 6C15              cp R22,R12
 03EC 38F0              brlo L82
 03EE           X20:
 03EE                   .dbline 421
 03EE           ;             { 
 03EE                   .dbline 423
 03EE           ;                       // Send below part of a Chinese character
 03EE           ;                       LCD_Set_XY(X + 1, Y + cl - Char_Length);
 03EE 2E2D              mov R18,R14
 03F0 260F              add R18,R22
 03F2 2C19              sub R18,R12
 03F4 042F              mov R16,R20
 03F6 0F5F              subi R16,255    ; addi 1
 03F8 88DF              xcall _LCD_Set_XY
 03FA                   .dbline 424
 03FA           ;                       }
 03FA 04C0              xjmp L83
 03FC           L82:
 03FC                   .dbline 426
 03FC           ;          else
 03FC           ;                   {
 03FC                   .dbline 428
 03FC           ;                   // Set coordinates    
 03FC           ;             LCD_Set_XY(X, Y + cl);
 03FC 2E2D              mov R18,R14
 03FE 260F              add R18,R22
 0400 042F              mov R16,R20
 0402 83DF              xcall _LCD_Set_XY
 0404                   .dbline 429
 0404           ;                       }
 0404           L83:
 0404                   .dbline 431
 0404           ;  
 0404           ;                LCD_Send_Byte(* (* (pCN_String + Start_Char + nm)+ cl), 
 0404 0D88              ldd R0,y+21
 0406 0882              std y+0,R0
 0408 21E0              ldi R18,1
 040A 80E2              ldi R24,32
 040C 0F84              ldd R0,y+15
 040E 809D              mul R24,R0
 0410 1001              movw R2,R0
 0412 0B88              ldd R0,y+19
 0414 1C88              ldd R1,y+20
 0416 200C              add R2,R0
 0418 311C              adc R3,R1
 041A 8A9D              mul R24,R10
 041C 2001              movw R4,R0
 041E 420C              add R4,R2
 0420 531C              adc R5,R3
 0422 E62F              mov R30,R22
 0424 FF27              clr R31
 0426 E40D              add R30,R4
 0428 F51D              adc R31,R5
 042A 0491              lpm R16,Z
 042C 53DF              xcall _LCD_Send_Byte
 042E                   .dbline 433
 042E           ;                                    D_DATA, Video_Mode);
 042E           ;          }      
 042E           L79:
 042E                   .dbline 418
 042E 6395              inc R22
 0430           L81:
 0430                   .dbline 418
 0430 2C2C              mov R2,R12
 0432 220C              lsl R2
 0434 6215              cp R22,R2
 0436 C8F2              brlo L78
 0438           X21:
 0438                   .dbline 434
 0438           ;         Y = Y + Char_Length + Char_Gap;
 0438 2E2C              mov R2,R14
 043A 2C0C              add R2,R12
 043C 0988              ldd R0,y+17
 043E 200C              add R2,R0
 0440 E22C              mov R14,R2
 0442                   .dbline 435
 0442           ;         nm++;
 0442 A394              inc R10
 0444                   .dbline 436
 0444           ;       }
 0444           L75:
 0444                   .dbline 416
 0444           L77:
 0444                   .dbline 416
 0444 0D84              ldd R0,y+13
 0446 A014              cp R10,R0
 0448 70F2              brlo L74
 044A           X22:
 044A                   .dbline -2
 044A           L73:
 044A                   .dbline 0 ; func end
 044A 2196              adiw R28,1
 044C 0C940000          xjmp pop_xgsetF0FC
 0450                   .dbsym r nm 10 c
 0450                   .dbsym r cl 22 c
 0450                   .dbsym l Video_Mode 21 c
 0450                   .dbsym l pCN_String 19 pA[32:32]kc
 0450                   .dbsym l Char_Gap 17 c
 0450                   .dbsym l Start_Char 15 c
 0450                   .dbsym l Char_Amount 13 c
 0450                   .dbsym r Char_Length 12 c
 0450                   .dbsym r Y 14 c
 0450                   .dbsym r X 20 c
 0450                   .dbend
 0450                   .dbfunc s LCD_Disp_an_Image _LCD_Disp_an_Image fV
 0450           ;           Page -> R20
 0450           ;             pg -> R10
 0450           ;             cl -> R14
 0450           ;     Video_Mode -> y+21
 0450           ;        Pixel_Y -> R12
 0450           ;        Pixel_X -> R10
 0450           ;         pImage -> y+15
 0450           ;              Y -> R22
 0450           ;              X -> y+11
                        .even
 0450           _LCD_Disp_an_Image:
 0450 0E940000          xcall push_arg4
 0454 0E940000          xcall push_xgsetF0FC
 0458 622F              mov R22,R18
 045A 2197              sbiw R28,1
 045C A988              ldd R10,y+17
 045E CB88              ldd R12,y+19
 0460                   .dbline -1
 0460                   .dbline 462
 0460           ;    }
 0460           ; 
 0460           ; /*----------------------------------------------------------------------------*-
 0460           ; 
 0460           ;    LCD_Disp_an_Image() 
 0460           ; 
 0460           ;    Display an Image on the LCD panel.
 0460           ; 
 0460           ;    Parameters: 
 0460           ;    ---------------------------------------------------------------------------
 0460           ;    X, Y             : The Image start coordinates on the LCD panel
 0460           ;     
 0460           ;    pImage           : Image data pointer (Image stored in Flash area)
 0460           ; 
 0460           ;    pixel_X, pixel_Y : The Image's size
 0460           ;    
 0460           ;                       Pixel_X, the height of the Image (in pixel)
 0460           ;                                         Pixel_Y, the length of the Image (in pixel)
 0460           ;                                         
 0460           ;    Video_Mode : If Video_Mode == INVERSE(1), inverse video mode                          
 0460           ;                 If Video_Mode == NORMAL(0), normal video mode
 0460           ; 
 0460           ; -*----------------------------------------------------------------------------*/
 0460           ; static void LCD_Disp_an_Image(uInt8 X, uInt8 Y, flash uInt8 * pImage,
 0460           ;                               uInt8 Pixel_X, uInt8 Pixel_Y, uInt8 Video_Mode)
 0460           ;    {   
 0460                   .dbline 468
 0460           ;    uInt8 cl, pg;
 0460           ;    uInt8 Page;
 0460           ;    
 0460           ;    // Figure out needs how many Pages
 0460           ;    // to display the Image  
 0460           ;    if (Pixel_X % 8 == 0) 
 0460 18E0              ldi R17,8
 0462 0A2D              mov R16,R10
 0464 0E940000          xcall mod8u
 0468 0023              tst R16
 046A 29F4              brne L85
 046C           X23:
 046C                   .dbline 469
 046C           ;       Page = Pixel_X / 8;   
 046C 4A2D              mov R20,R10
 046E 4695              lsr R20
 0470 4695              lsr R20
 0472 4695              lsr R20
 0474 05C0              xjmp L86
 0476           L85:
 0476                   .dbline 471
 0476           ;    else
 0476           ;       Page = Pixel_X / 8 + 1;  
 0476 4A2D              mov R20,R10
 0478 4695              lsr R20
 047A 4695              lsr R20
 047C 4695              lsr R20
 047E 4F5F              subi R20,255    ; addi 1
 0480           L86:
 0480                   .dbline 474
 0480           ;       
 0480           ;    // Now send the Image
 0480           ;    for (pg = 0; pg < Page; pg++)
 0480 AA24              clr R10
 0482 19C0              xjmp L90
 0484           L87:
 0484                   .dbline 475
 0484           ;       {  
 0484                   .dbline 477
 0484           ;         // Send Image data
 0484           ;       for(cl = 0; cl < Pixel_Y; cl++)
 0484 EE24              clr R14
 0486 14C0              xjmp L94
 0488           L91:
 0488                   .dbline 478
 0488           ;          {
 0488                   .dbline 480
 0488           ;                // Set coordinates
 0488           ;          LCD_Set_XY(X + pg, Y + cl);
 0488 262F              mov R18,R22
 048A 2E0D              add R18,R14
 048C 0B85              ldd R16,y+11
 048E 0A0D              add R16,R10
 0490 3CDF              xcall _LCD_Set_XY
 0492                   .dbline 482
 0492           ;                        
 0492           ;          LCD_Send_Byte(pImage[cl + Pixel_Y * pg], D_DATA, Video_Mode);
 0492 0D88              ldd R0,y+21
 0494 0882              std y+0,R0
 0496 21E0              ldi R18,1
 0498 CA9C              mul R12,R10
 049A EE2D              mov R30,R14
 049C FF27              clr R31
 049E E00D              add R30,R0
 04A0 F11D              adc R31,R1
 04A2 0F84              ldd R0,y+15
 04A4 1888              ldd R1,y+16
 04A6 E00D              add R30,R0
 04A8 F11D              adc R31,R1
 04AA 0491              lpm R16,Z
 04AC 13DF              xcall _LCD_Send_Byte
 04AE                   .dbline 483
 04AE           ;          }                       
 04AE           L92:
 04AE                   .dbline 477
 04AE E394              inc R14
 04B0           L94:
 04B0                   .dbline 477
 04B0 EC14              cp R14,R12
 04B2 50F3              brlo L91
 04B4           X24:
 04B4                   .dbline 484
 04B4           ;       }      
 04B4           L88:
 04B4                   .dbline 474
 04B4 A394              inc R10
 04B6           L90:
 04B6                   .dbline 474
 04B6 A416              cp R10,R20
 04B8 28F3              brlo L87
 04BA           X25:
 04BA                   .dbline -2
 04BA           L84:
 04BA                   .dbline 0 ; func end
 04BA 2196              adiw R28,1
 04BC 0E940000          xcall pop_xgsetF0FC
 04C0 2496              adiw R28,4
 04C2 0895              ret
 04C4                   .dbsym r Page 20 c
 04C4                   .dbsym r pg 10 c
 04C4                   .dbsym r cl 14 c
 04C4                   .dbsym l Video_Mode 21 c
 04C4                   .dbsym r Pixel_Y 12 c
 04C4                   .dbsym r Pixel_X 10 c
 04C4                   .dbsym l pImage 15 pkc
 04C4                   .dbsym r Y 22 c
 04C4                   .dbsym l X 11 c
 04C4                   .dbend
 04C4                   .dbfunc s LCD_Draw_a_Dot _LCD_Draw_a_Dot fV
 04C4           ;           Page -> R12
 04C4           ; Which_Bit_Should_be_Lit -> R10
 04C4           ;     Video_Mode -> y+7
 04C4           ;              Y -> R14
 04C4           ;              X -> R10
                        .even
 04C4           _LCD_Draw_a_Dot:
 04C4 0E940000          xcall push_xgset00FC
 04C8 E22E              mov R14,R18
 04CA A02E              mov R10,R16
 04CC 2197              sbiw R28,1
 04CE                   .dbline -1
 04CE                   .dbline 501
 04CE           ;    }
 04CE           ;    
 04CE           ; /*----------------------------------------------------------------------------*-
 04CE           ; 
 04CE           ;    LCD_Draw_a_Dot() 
 04CE           ; 
 04CE           ;    Draw a dot (one pixel) on specific location of the LCD panel.
 04CE           ; 
 04CE           ;    Parameters: 
 04CE           ;    ---------------------------------------------------------------------------
 04CE           ;    X, Y             : The dot location on the LCD panel
 04CE           ;    
 04CE           ;    X range : (0 ~ 63), Y range : (0 ~ 127) 
 04CE           ; 
 04CE           ; -*---------------------------------------------------

⌨️ 快捷键说明

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