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

📄 st7920.lis

📁 ST7920液晶控制器的AVR程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0244 EA2D              mov R30,R10
 0246 FF27              clr R31
 0248 E40F              add R30,R20
 024A F51F              adc R31,R21
 024C 0081              ldd R16,z+0
 024E 4DDF              xcall _WriteData
 0250                   .dbline 146
 0250           ;               i++;
 0250 A394              inc R10
 0252                   .dbline 147
 0252           ;               if( i%16 == LineDispCnt%16 ) 
 0252 10E1              ldi R17,16
 0254 0C2D              mov R16,R12
 0256 0E940000          xcall mod8u
 025A 202E              mov R2,R16
 025C 10E1              ldi R17,16
 025E 0A2D              mov R16,R10
 0260 0E940000          xcall mod8u
 0264 0215              cp R16,R2
 0266 29F4              brne L33
 0268           X8:
 0268                   .dbline 148
 0268           ;               {
 0268                   .dbline 149
 0268           ;                  y++;
 0268 E394              inc R14
 026A                   .dbline 150
 026A           ;                  x = 0;
 026A 6627              clr R22
 026C                   .dbline 151
 026C           ;                  lcdSetXY(x,y);
 026C 2E2D              mov R18,R14
 026E 062F              mov R16,R22
 0270 50DF              xcall _lcdSetXY
 0272                   .dbline 152
 0272           ;               }
 0272           L33:
 0272                   .dbline 153
 0272           ;       }
 0272           L31:
 0272                   .dbline 143
 0272 EA2D              mov R30,R10
 0274 FF27              clr R31
 0276 E40F              add R30,R20
 0278 F51F              adc R31,R21
 027A 2080              ldd R2,z+0
 027C 2220              tst R2
 027E 11F7              brne L30
 0280           X9:
 0280                   .dbline -2
 0280           L29:
 0280                   .dbline 0 ; func end
 0280 0C940000          xjmp pop_xgsetF0FC
 0284                   .dbsym r LineDispCnt 12 c
 0284                   .dbsym r i 10 c
 0284                   .dbsym r ptr 20 pc
 0284                   .dbsym r y 14 c
 0284                   .dbsym r x 22 c
 0284                   .dbend
 0284                   .dbfunc e lcdDispChar _lcdDispChar fV
 0284           ;              c -> y+2
 0284           ;              y -> R12
 0284           ;              x -> R10
                        .even
 0284           _lcdDispChar::
 0284 AA92              st -y,R10
 0286 CA92              st -y,R12
 0288 C22E              mov R12,R18
 028A A02E              mov R10,R16
 028C                   .dbline -1
 028C                   .dbline 157
 028C           ; }
 028C           ; 
 028C           ; void lcdDispChar( uchar x, uchar y, uchar c )
 028C           ; {
 028C                   .dbline 158
 028C           ;    lcdSetXY(x,y);
 028C 2C2D              mov R18,R12
 028E 0A2D              mov R16,R10
 0290 40DF              xcall _lcdSetXY
 0292                   .dbline 159
 0292           ;    WriteData(c);
 0292 0A81              ldd R16,y+2
 0294 2ADF              xcall _WriteData
 0296                   .dbline -2
 0296           L35:
 0296                   .dbline 0 ; func end
 0296 C990              ld R12,y+
 0298 A990              ld R10,y+
 029A 0895              ret
 029C                   .dbsym l c 2 c
 029C                   .dbsym r y 12 c
 029C                   .dbsym r x 10 c
 029C                   .dbend
 029C                   .dbfunc e lcdDispGraphic _lcdDispGraphic fV
 029C           ;      widthOver -> R20
 029C           ;              i -> R14
 029C           ;              j -> R10
 029C           ;            ptr -> R22,R23
 029C           ;              y -> R12
 029C           ;              x -> y+14
 029C           ;          width -> y+12
 029C           ;         length -> y+10
                        .even
 029C           _lcdDispGraphic::
 029C 0E940000          xcall push_arg4
 02A0 0E940000          xcall push_xgsetF0FC
 02A4 C888              ldd R12,y+16
 02A6 6A89              ldd R22,y+18
 02A8 7B89              ldd R23,y+19
 02AA                   .dbline -1
 02AA                   .dbline 163
 02AA           ; }
 02AA           ; 
 02AA           ; void lcdDispGraphic(uchar length,uchar width, uchar x,uchar y,const unsigned char *ptr)
 02AA           ; {   //x:横0-15   y:纵 0-63  
 02AA                   .dbline 165
 02AA           ;    uchar i,j;
 02AA           ;    uchar widthOver=0;
 02AA 4427              clr R20
 02AC                   .dbline 166
 02AC           ;    if((width + x) > 16) {widthOver = (width + x - 16);width = (16-x);}  //超出屏幕
 02AC 2C84              ldd R2,y+12
 02AE 0E84              ldd R0,y+14
 02B0 200C              add R2,R0
 02B2 80E1              ldi R24,16
 02B4 8215              cp R24,R2
 02B6 28F4              brsh L37
 02B8           X10:
 02B8                   .dbline 166
 02B8                   .dbline 166
 02B8 4C85              ldd R20,y+12
 02BA 400D              add R20,R0
 02BC 4051              subi R20,16
 02BE                   .dbline 166
 02BE 8019              sub R24,R0
 02C0 8C87              std y+12,R24
 02C2                   .dbline 166
 02C2           L37:
 02C2                   .dbline 167
 02C2           ;    for(i = 0;i< length;i++)
 02C2 EE24              clr R14
 02C4 17C0              xjmp L42
 02C6           L39:
 02C6                   .dbline 168
 02C6           ;    {
 02C6                   .dbline 169
 02C6           ;               SetGraphicAddr(x,y);                              //定位12864坐标
 02C6 2C2D              mov R18,R12
 02C8 0E85              ldd R16,y+14
 02CA 54DF              xcall _SetGraphicAddr
 02CC                   .dbline 170
 02CC           ;               for(j = 0; j< width;j++)
 02CC AA24              clr R10
 02CE 07C0              xjmp L46
 02D0           L43:
 02D0                   .dbline 171
 02D0           ;               {
 02D0                   .dbline 172
 02D0           ;                       WriteData(*ptr++);
 02D0 1B01              movw R2,R22
 02D2 6F5F              subi R22,255  ; offset = 1
 02D4 7F4F              sbci R23,255
 02D6 F101              movw R30,R2
 02D8 0491              lpm R16,Z
 02DA 07DF              xcall _WriteData
 02DC                   .dbline 173
 02DC           ;               }
 02DC           L44:
 02DC                   .dbline 170
 02DC A394              inc R10
 02DE           L46:
 02DE                   .dbline 170
 02DE 0C84              ldd R0,y+12
 02E0 A014              cp R10,R0
 02E2 B0F3              brlo L43
 02E4           X11:
 02E4                   .dbline 174
 02E4           ;               if(widthOver)ptr +=widthOver;  
 02E4 4423              tst R20
 02E6 21F0              breq L47
 02E8           X12:
 02E8                   .dbline 174
 02E8 242E              mov R2,R20
 02EA 3324              clr R3
 02EC 620D              add R22,R2
 02EE 731D              adc R23,R3
 02F0           L47:
 02F0                   .dbline 175
 02F0           ;               y++;
 02F0 C394              inc R12
 02F2                   .dbline 176
 02F2           ;    }
 02F2           L40:
 02F2                   .dbline 167
 02F2 E394              inc R14
 02F4           L42:
 02F4                   .dbline 167
 02F4 0A84              ldd R0,y+10
 02F6 E014              cp R14,R0
 02F8 30F3              brlo L39
 02FA           X13:
 02FA                   .dbline -2
 02FA           L36:
 02FA                   .dbline 0 ; func end
 02FA 0E940000          xcall pop_xgsetF0FC
 02FE 2496              adiw R28,4
 0300 0895              ret
 0302                   .dbsym r widthOver 20 c
 0302                   .dbsym r i 14 c
 0302                   .dbsym r j 10 c
 0302                   .dbsym r ptr 22 pkc
 0302                   .dbsym r y 12 c
 0302                   .dbsym l x 14 c
 0302                   .dbsym l width 12 c
 0302                   .dbsym l length 10 c
 0302                   .dbend
 0302                   .dbfunc e ClearArea _ClearArea fV
 0302           ;              i -> R10
 0302           ;              j -> R22
 0302           ;           back -> y+14
 0302           ;              y -> R12
 0302           ;              x -> y+10
 0302           ;          width -> R14
 0302           ;         length -> R20
                        .even
 0302           _ClearArea::
 0302 0E940000          xcall push_xgsetF0FC
 0306 E22E              mov R14,R18
 0308 402F              mov R20,R16
 030A CC84              ldd R12,y+12
 030C                   .dbline -1
 030C                   .dbline 181
 030C           ; }
 030C           ; 
 030C           ; 
 030C           ; void ClearArea(uchar length,uchar width, uchar x,uchar y,uchar back)
 030C           ; {
 030C                   .dbline 182
 030C           ;     uchar i=0,j=0;
 030C AA24              clr R10
 030E                   .dbline 182
 030E 6627              clr R22
 0310                   .dbline 183
 0310           ;        for(i = 0;i< length;i++)
 0310 0CC0              xjmp L53
 0312           L50:
 0312                   .dbline 184
 0312           ;    {
 0312                   .dbline 185
 0312           ;               SetGraphicAddr(x,y);                              //定位12864坐标
 0312 2C2D              mov R18,R12
 0314 0A85              ldd R16,y+10
 0316 2EDF              xcall _SetGraphicAddr
 0318                   .dbline 186
 0318           ;               for(j = 0; j< width;j++)
 0318 6627              clr R22
 031A 03C0              xjmp L57
 031C           L54:
 031C                   .dbline 187
 031C           ;               {
 031C                   .dbline 188
 031C           ;                       WriteData(back);
 031C 0E85              ldd R16,y+14
 031E E5DE              xcall _WriteData
 0320                   .dbline 189
 0320           ;               }
 0320           L55:
 0320                   .dbline 186
 0320 6395              inc R22
 0322           L57:
 0322                   .dbline 186
 0322 6E15              cp R22,R14
 0324 D8F3              brlo L54
 0326           X14:
 0326                   .dbline 190
 0326           ;               y++;
 0326 C394              inc R12
 0328                   .dbline 191
 0328           ;    }
 0328           L51:
 0328                   .dbline 183
 0328 A394              inc R10
 032A           L53:
 032A                   .dbline 183
 032A A416              cp R10,R20
 032C 90F3              brlo L50
 032E           X15:
 032E                   .dbline -2
 032E           L49:
 032E                   .dbline 0 ; func end
 032E 0C940000          xjmp pop_xgsetF0FC
 0332                   .dbsym r i 10 c
 0332                   .dbsym r j 22 c
 0332                   .dbsym l back 14 c
 0332                   .dbsym r y 12 c
 0332                   .dbsym l x 10 c
 0332                   .dbsym r width 14 c
 0332                   .dbsym r length 20 c
 0332                   .dbend
 0332                   .dbfunc e DrawLevelLing _DrawLevelLing fV
 0332           ;             y1 -> <dead>
 0332           ;             x1 -> y+7
 0332           ;             y0 -> R12
 0332           ;             x0 -> R10
                        .even
 0332           _DrawLevelLing::
 0332 AA92              st -y,R10
 0334 CA92              st -y,R12
 0336 C22E              mov R12,R18
 0338 A02E              mov R10,R16
 033A 2597              sbiw R28,5
 033C                   .dbline -1
 033C                   .dbline 196
 033C           ; }
 033C           ; 
 033C           ; 
 033C           ; void DrawLevelLing( uchar x0,uchar y0, uchar x1,uchar y1)
 033C           ; {
 033C                   .dbline 197
 033C           ;        ClearArea(1,x1 - x0,x0,y0,0xff);
 033C 8FEF              ldi R24,255
 033E 8C83              std y+4,R24
 0340 CA82              std y+2,R12
 0342 A882              std y+0,R10
 0344 2F81              ldd R18,y+7
 0346 2A19              sub R18,R10
 0348 01E0              ldi R16,1

⌨️ 快捷键说明

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