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

📄 ks0108_12864lcd.lis

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

⌨️ 快捷键说明

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